Musly: one Flutter client for Navidrome, Jellyfin, radio and local files
A beautiful Flutter music streaming client for Subsonic-compatible servers with a modern Apple Music-inspired UI.
At a glance
- What is it?
- Musly is a Flutter music player that speaks to self-hosted servers over the Subsonic API, connects directly to Jellyfin and Emby, streams from open web sources, indexes local audio files and carries a directory of internet radio stations, with an Apple Music inspired interface and packages for desktop, mobile, TV and the web. The licence is CC BY-NC-SA, so it cannot go into a commercial store.
- Who is it for?
- Musly suits someone with a self-hosted library who wants one modern client for their server, their local files and internet radio rather than three separate apps, and it suits anyone who wants a cross-platform player with the same interface on a phone, a desktop and a TV. It does not suit a commercial distribution, because the licence is CC BY-NC-SA and the readme explicitly says not to publish the app to commercial application stores.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Dart, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Six sources behind one client
Musly is a free, cross-platform music player and streaming client for self-hosted libraries, web streams and local audio files, and the source list is what makes it more than a wrapper around one server.
Web Stream gives direct music search and on-demand streaming from open web sources with no server, user account or login required, and the feature list adds discovering tracks, creating local playlists, caching audio locally and getting time-synced lyrics automatically.
Navidrome gets full Subsonic API support for browsing albums, artists, playlists, genres and favourites. Jellyfin and Emby are connected to directly through their own API with user authentication and media library browsing. Subsonic, Airsonic and Gonic are grouped as standard Subsonic API compatible servers, which is the useful grouping since those three are interchangeable from a client's point of view.
Internet Radio is a directory of thousands of live stations worldwide powered by Radio Browser, plus custom stream URLs. Local audio files are played directly from device storage, supporting MP3, FLAC, AAC, WAV, OGG, OPUS and M4A.
That last pairing is the interesting one. Most clients in this space pick either the server or the local library, and the choice of Navidrome over Airsonic and Gonic in the same bullet tells you the author treats the Subsonic protocol as the interchange point rather than the individual server. A user who migrates between self-hosted servers does not have to change client.
The interface inspiration is stated in the project description as an Apple Music inspired UI, with dynamic colour themes that adapt to the album artwork or to system accents, and light, dark and true OLED black themes.
Nine packaging formats for six platforms
The platform list is long, and the reason is that Flutter makes the same binary ship in many shapes.
On Linux there are seven: a .deb for Debian, Ubuntu and Linux Mint, a .rpm for Fedora, RHEL and openSUSE, a .pkg.tar.zst for Arch Linux and Manjaro, an .AppImage as a universal standalone executable for any distribution, a .flatpak, a .snap, and a .tar.gz portable standalone archive.
On Windows there is a Windows 10 and 11 setup installer named musly-setup.exe plus a portable standalone archive. On macOS there is a drag-and-drop installer named musly-macos.dmg for Apple Silicon and Intel Macs.
The mobile and TV entries are the ones that carry conditions. iOS is a sideloadable IPA named musly-ios.ipa via AltStore, Sideloadly or similar, supporting iOS 15.0 and newer. Android is a universal APK named app-release.apk supporting phones, tablets, foldables and Android Auto integration. Tizen is a native Smart TV package as a .tpk for Samsung TVs running Tizen 4.0 or newer, which the readme dates as 2018 or newer.
The web is a progressive web client.
The platform support is real rather than aspirational, and the Tizen and iOS entries are unusual for an open source music player. A Samsung Smart TV package and a sideloadable iOS build both point at a project that treats the TV and the phone as first class targets rather than afterthoughts, and the Android Auto integration in the APK is a similar statement.
The project is built with Flutter and runs natively across desktop, mobile and TV, and the top level of the repository is the standard Flutter layout with android/, ios/, linux/, macos/, windows/, web/ and tizen/ directories alongside lib/, test/ and assets/, plus packaging/ and a fastlane/ directory for the release automation, a Gemfile and a CNAME file for the website, and a react-website/ directory for the landing site, which is a different stack from the application itself.
Lyrics, casting and the small features that decide daily use
The feature list is grouped, and the audio and playback group sets the baseline.
Gapless playback and ReplayGain loudness normalization are the two that separate a serious player from a simple one. Gapless matters for albums and long mixes, and ReplayGain matters because without it the volume jumps between tracks of different loudness, which is the single most common complaint about a self-hosted music setup.
There are smart radio queues with auto-refill based on your favourite tracks and artists, a sleep timer, custom playback speeds, loop and repeat modes, and media session integration, which means the system media controls, the lock screen player and the headphone buttons all work.
Synchronised lyrics get their own group and are the most distinctive feature. There is time-synced lyrics with interactive tap-to-seek, a desktop fullscreen lyrics view with smooth auto-scroll, and automatic screen wake lock control while the lyrics are open. Tap-to-seek is the detail that matters, because a lyrics view you can correct by tapping the right line is far more useful than one that only scrolls.
The desktop group is separate from the mobile one: a dedicated desktop layout with a persistent sidebar and collapsible navigation, a desktop player bar with direct playlist navigation and track options, Spotverlay desktop overlay integration, and system tray and media key support, with SMTC on Windows and MPRIS on Linux.
Casting and remote control covers casting audio to UPnP, DLNA and network cast devices directly from the app. The offline group allows downloading individual tracks, entire albums and playlists, local playlist management independent of remote servers, and granular cache controls with storage management.
There is also Musly Wrapped, which is in-app listening statistics with top genres and yearly rewind summaries.
Getting started, building from source, and the licence limit
There are two ways in, and they are documented separately.
To use it, you download Musly for your operating system from the releases page, launch the app and pick your music source. For a self-hosted server, which covers Navidrome, Subsonic, Jellyfin and Emby, you enter your server URL, username and password. For Web Stream you start searching and streaming immediately with zero setup. For Local Storage you select your music folder to index audio files, and for Internet Radio you explore live stations by genre or country. Then you tap Connect and start listening.
Building from source takes three commands:
git clone https://github.com/dddevid/Musly.git
cd Musly
flutter pub get
flutter runThe licence is the constraint to understand before you go further. The project is open source and distributed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Licence, with the details in the LICENSE file, and there is an important note attached: do not redistribute or publish this app to commercial application stores.
That is a non-commercial licence, and it is a different kind of arrangement from the permissive MIT or Apache licences most client projects use. You can read the code, run it, and modify it for yourself, and the share-alike clause means a derived version has to carry the same licence. What you cannot do is publish it as a commercial product, which is exactly why the Google Play and App Store listings are absent and the iOS route is a sideloadable IPA.
For anyone building a similar client, that licence choice is the most consequential decision in the repository, more so than any feature. The community contributions are another visible part of the project, with translations into 27 languages through Crowdin, and a TRANSLATIONS.md file with the contribution guidelines, plus a Discord community and a GitHub issues tracker for bug reports and feature requests.
The project was made with care in Italy by an Albanian developer, as the footer says, and there is a PRIVACY_POLICY.md at the root, which is worth reading before you add your server credentials.
Editorial conclusion
Musly suits someone with a self-hosted library who wants one modern client for their server, their local files and internet radio rather than three separate apps, and it suits anyone who wants a cross-platform player with the same interface on a phone, a desktop and a TV. It does not suit a commercial distribution, because the licence is CC BY-NC-SA and the readme explicitly says not to publish the app to commercial application stores. Before installing, pick the package that matches your platform, including the AppImage or the tar.gz if you would rather not install anything system wide, and check the privacy policy, since a self-hosted music client is exactly the kind of application where network behaviour is worth reading before you add your server credentials.
Frequently asked questions
What music sources does Musly support?
Six kinds: web streams from open sources with no account, Navidrome with full Subsonic API support, Jellyfin and Emby through their own APIs, Subsonic, Airsonic and Gonic servers, an internet radio directory powered by Radio Browser plus custom stream URLs, and local audio files in MP3, FLAC, AAC, WAV, OGG, OPUS and M4A.
Which platforms can I install Musly on?
Linux with deb, rpm, pkg.tar.zst, AppImage, flatpak, snap and tar.gz packages, Windows with a setup installer and a portable archive, macOS with a drag-and-drop dmg, iOS as a sideloadable IPA, Android as a universal APK, Samsung Tizen TVs as a tpk package, and the web as a progressive web client.
What licence is Musly released under?
The Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Licence, with the terms in the LICENSE file. The readme adds an important note: do not redistribute or publish this app to commercial application stores, which is why the iOS distribution is a sideloadable IPA rather than an App Store build.
How do I build Musly from source?
Clone the repository with git clone https://github.com/dddevid/Musly.git, change into the Musly directory, run flutter pub get and then flutter run. The project is built with Flutter and the repository holds the standard platform directories for android, ios, linux, macos, windows, web and tizen.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/dddevid-musly)Was this useful?