One music player for Bilibili, YouTube and NetEase Cloud Music.
Android and Windows.
English · 繁體中文
Your playlists live on three different platforms and none of their apps will play the other two. FMP searches across all of them, plays from any of them, and keeps one queue, one library and one set of listening history.
| Platform | ||
|---|---|---|
| Android | APK (recommended) | 64-bit ARM, which is nearly every phone from recent years; smaller download |
| Android | Universal APK | Any device, including 32-bit ARM and x86_64; larger download |
| Windows | Installer (recommended) | Full SMTC, Start menu, shortcuts, system integration |
| Windows | Portable ZIP | Unzip and run; media keys and shortcut identity may be incomplete |
All versions and release notes: GitHub Releases.
| Android — Home | Android — Player | Android — Lyrics | Android — Search |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- Three sources, one search. Bilibili (video audio, multi-part collections, live-room audio, favourites import), YouTube (videos, playlists, Mix/Radio dynamic queues, Opus/AAC preference), and NetEase (songs, playlists, VIP and availability flags). Paste a URL to play it directly.
- Your library, imported. Build playlists with custom covers, or import them from any of the three — plus fuzzy-matched import from QQ Music and Spotify exports.
- Playback you expect. Queue reordering, repeat and shuffle modes, speed control, and a "try this one" mode that returns you to where you were. The queue survives a restart.
- Lyrics from NetEase, QQ Music and lrclib with a source priority you set, synced scrolling, translation and romanization, and a separate desktop lyrics window on Windows.
- Offline. Download single tracks or whole playlists; downloads become part of the local library.
- Live rooms as radio, with their own playback page.
- History with a timeline and statistics, local backup and restore, and an in-app update check against GitHub Releases.
| Android | Windows | |
|---|---|---|
| Background playback | ✅ | — |
| Notification controls | ✅ | — |
| System media keys | ✅ | ✅ |
| Windows SMTC | — | ✅ |
| System tray | — | ✅ |
| Global hotkeys | — | ✅ |
| Desktop lyrics window | — | ✅ |
| Layer | |
|---|---|
| App | Flutter · Dart · Material 3 |
| State | Riverpod |
| Local data | Isar |
| Routing | go_router |
| Audio | just_audio (Android) · media_kit (Windows) |
| Network | Dio · youtube_explode_dart · per-platform adapters |
| i18n | slang |
The UI switches between bottom navigation, a side rail and a desktop detail pane by width.
Needs the Flutter SDK. A Windows desktop build additionally needs the NuGet
CLI (pulled in by flutter_inappwebview_windows) and a Rust toolchain
(smtc_windows builds a Rust crate through cargokit).
flutter pub get
dart run build_runner build
dart run slang
flutter analyze
flutter test --exclude-tags liveGenerated code is not committed — run the two codegen steps before analyzing.
The in-depth docs are written in Traditional Chinese.
| docs/README.md | What each document covers |
| docs/building.md | Local Android and Windows builds |
| docs/development.md | Architecture, sources, data model |
| docs/build-and-release.md | CI, releases, signing, in-app update assets |
| docs/troubleshooting.md | Common build and runtime problems |
FMP hosts no music. It reads the public interfaces of platforms you already have accounts on, and your history, playlists, settings, credentials and downloads stay on your device. There are no ad or analytics SDKs.
Warning
For study and personal use. Membership-only, restricted and unavailable content still follows the source platform's rules. Frequent or abnormal requests may get your account limited or banned — that risk is yours. The authors accept no liability for any loss arising from use of this software.
Built on media_kit, just_audio, youtube_explode_dart, Isar and Riverpod.
MIT. Third-party components FMP bundles or derives from — including the LGPL-licensed libmpv/FFmpeg in the Windows build — are recorded in THIRD_PARTY_LICENSES.md.











