Library / SDK
avdept/JellyBoxPlayer avatar
avdept/JellyBoxPlayer

JellyBox: a native Jellyfin and Emby music client for desktop and mobile

The best native desktop and mobile music player for Jellyfin and Emby

603 stars20 forksDartAGPL-3.0

At a glance

What is it?
JellyBox is an AGPL-3.0 Flutter client that turns a self-hosted Jellyfin or Emby music library into a streaming-style app. It is a client only, so you need a server first, and the README leaves several platform details thin.
Who is it for?
JellyBox fits people who already run Jellyfin or Emby with a music library and want a dedicated audio client instead of a browser tab or a full media centre. It does not fit anyone without a server, since the README states plainly that JellyBox is a client, not a server.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 2 days 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 September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What problem JellyBox solves, and who it is for

Jellyfin and Emby both ship web interfaces, and both can play music. A browser tab is a poor music player, though: no offline library, no lock-screen controls, no CarPlay, and no playback memory when the tab closes. JellyBox targets exactly that gap. The README describes it as an unofficial, audio-only client for Jellyfin and Emby, and it says the project focuses on doing one thing well: making your own music library feel like a modern streaming app.

The intended user is someone who already runs one of those servers and has music on it. The README states this directly: JellyBox is a client, not a server, and you need access to a running Jellyfin or Emby server with a music library on it. If you have no server, this project is not a starting point for you.

The scope is deliberately narrow. It is audio-only, so video libraries and photo libraries are out of scope. It supports multiple connections and lets you switch between them without signing out, which suits people who run more than one server or share access to a friend's instance. Favourites are written back to the server rather than stored locally, so the library state stays consistent with whatever else you use.

How JellyBox talks to your Jellyfin or Emby server

The repository is a Flutter project, which is why one codebase covers macOS, Windows, Linux, iOS and Android. The top-level layout shows platform folders for android, ios, linux, macos, windows and web, plus lib for shared Dart code, packages for local package code, native_route_picker and mediakeys_proxy as separate native integrations, and shaders for GPU work. That structure explains the platform-specific UI claim in the README: the shared Dart layer holds logic, while native code handles media keys and routing.

Data flow is client-server in the ordinary sense. The app authenticates against your Jellyfin or Emby instance, then requests library views over the server's HTTP API. Browsing albums, artists, genres, playlists and songs all happens against that API. Playback is where the interesting part sits: the README lists per-connection streaming profiles with automatic transcoding when a codec is not supported natively. In practice this means the app decides, per connection, whether to play the original file or ask the server to transcode it, and the audio quality badge tells you which of the two you are hearing. That badge is a small feature with real value, because transcoding silently changes what you are listening to.

Offline downloads are the other half of the data model. Downloaded albums and tracks are stored locally so they play without a server round trip, and the README claims a full offline mode where downloaded tracks remain accessible on a plane. The README does not document how conflict resolution works when a downloaded track changes on the server, and it does not describe the download storage format. Those are open questions, not documented behaviour.

Installing JellyBox and playing your first track

There is no build-from-source quickstart in the README, and no documented command for running the app from the repository. Distribution is through prebuilt binaries and store listings, so installation means picking a package rather than compiling Dart.

On desktop, the README points to the latest release page for signed and notarized macOS .dmg files, a Windows installer .exe or portable .zip, and Linux .AppImage, .deb, .rpm or .tar.gz bundles for x64 and arm64. On mobile it points to the App Store for iOS and iPadOS, Google Play for Android, and a sideloadable .apk from the same releases page. The macOS App Store listing covers macOS as well as iOS.

The README does not give a terminal install command, so there is nothing to copy into a shell block. The install path is the download table: pick the artifact for your platform from the latest GitHub release, or install from the App Store or Google Play listing.

After the app starts, the flow is: add a server, authenticate, then browse. The README documents Jellyfin Quick Connect as a way to sign in from your phone or desktop without typing a password, which is the fastest path on a device with an awkward keyboard. Once something is playing, the audio quality badge tells you whether the stream is the original file. If it is not, the per-connection streaming profile is transcoding, which usually means the codec is not natively supported on that platform.

Where JellyBox stops being the right tool

The first limitation is structural. JellyBox cannot do anything without a reachable server. Offline mode covers downloaded tracks only, so a fresh install with no downloads and no network is an empty app. The README is explicit that a running Jellyfin or Emby server with a music library is a prerequisite.

The second is scope. It is an audio-only client. If you want one app for films, series and music, JellyBox is the wrong pick by design, and the README makes no claim otherwise.

The third concerns transcoding. Automatic transcoding when a codec is not supported natively is a convenience, but it means the app can quietly serve you a lossy stream from a lossless library depending on the platform and connection profile. The README offers the audio quality badge as the way to know, and that is a manual check rather than a guarantee. The README does not state which codecs are natively supported on which platform, so you cannot predict from the documentation alone whether a given FLAC file will play as-is.

Licensing is a fourth consideration. The project is AGPL-3.0. That is a strong copyleft licence, and it matters if you plan to fork the app, ship a modified build, or run a modified version as a network service. The repository includes a LICENSE file, and it is the authority here, not this article.

JellyBox compared with Finamp and the Jellyfin web client

Finamp is the most obvious alternative for Jellyfin users: a dedicated mobile music client for Jellyfin. The difference in approach is breadth of platform. JellyBox ships desktop builds for macOS, Windows and Linux alongside iOS, iPadOS and Android, and the README lists a signed and notarized macOS .dmg plus Linux .AppImage, .deb and .rpm packages. A mobile-only client leaves desktop listeners on the web interface.

The Jellyfin web client is the zero-install option and it is maintained by the server project itself, so it will always track server features closely. What it does not give you is playback memory between restarts, offline downloads with a dedicated offline mode, or CarPlay. The README lists all three for JellyBox. That is the trade: an extra app to install and update, in exchange for behaviour a browser tab cannot provide.

Emby support is where JellyBox differentiates further. The README says it connects to Jellyfin or Emby servers and lets you switch between them without signing out. A Jellyfin-only client cannot do that, so anyone running both kinds of server gets one app instead of two. The README does not describe how feature parity between the two server types is handled, so treat that as unverified.

Release cadence, licence and what maintenance costs you

The repository is not archived, and the last push was on 2026-09-14, one day before this article's reference point. Releases v2.4.0, v2.5.0 and v2.6.0 arrived on 2026-08-31, 2026-09-08 and 2026-09-13 respectively, which is a roughly weekly cadence across those three tags. The README does not state a support policy, a minimum server version, or a deprecation process, so upgrade cost is not documented.

What the README does show is the shape of that cost. Store distribution for iOS, iPadOS, macOS and Android means updates arrive through the store. Desktop users on the GitHub release channel have to fetch new .dmg, .exe, .AppImage, .deb, .rpm or .tar.gz artifacts themselves. The README does not document an in-app updater for desktop builds.

AGPL-3.0 is the licence, and the practical implication is that modified versions distributed or exposed over a network carry source disclosure obligations. That is a summary of the licence's reputation, not legal advice, and the LICENSE file in the repository is what actually governs. If your organisation forbids AGPL software on developer machines, check before installing rather than after.

Editorial conclusion

JellyBox fits people who already run Jellyfin or Emby with a music library and want a dedicated audio client instead of a browser tab or a full media centre. It does not fit anyone without a server, since the README states plainly that JellyBox is a client, not a server. Before committing, check that your server version supports Quick Connect if you plan to use it, confirm the codec support of your target platform so you know when transcoding will kick in, and read the AGPL-3.0 text for yourself if you intend to modify or redistribute the app.

Frequently asked questions

Where can I download the JellyBox player APK for Android?

The README lists two Android routes: Google Play, and a sideloadable .apk from the latest GitHub release page. The Play listing uses the package id com.prodigytech.jellybox.

Does JellyBox work without a Jellyfin or Emby server?

No. The README states that JellyBox is a client, not a server, and that you need access to a running Jellyfin or Emby server with a music library on it. Downloaded tracks remain playable offline, but they have to come from a server first.

Which platforms does the JellyBox player support?

The README lists macOS, Windows, Linux, iOS including CarPlay, and Android. Desktop builds are .dmg, installer .exe or portable .zip, and .AppImage, .deb, .rpm or .tar.gz bundles, with x64 and arm64 Linux builds mentioned.

Official sources

  1. avdept/JellyBoxPlayer on GitHub
  2. License: AGPL-3.0
  3. Project website
  4. README
  5. Releases
Community notes

Community notes