One app for your music, wherever it lives.
A free, open-source music player for the Plex, Jellyfin, or Subsonic server you already run.
Mozz is a self-hosted music player for the server you already run. Point it at Plex, Jellyfin, or a Subsonic / OpenSubsonic server (Navidrome is the tested target) and your whole library shows up on your iPhone, iPad, Android phone, and desktop — ready to stream over the network or download and take with you.
Streaming and offline both matter here, equally. Some people stream everything and never download a thing; others save their library and live underground on the subway. Mozz is built for both, and it does not push you toward either.
One app for your music, wherever it lives. Free forever. Open source.
iPhone and iPad: Join the public beta on TestFlight. Requires iOS / iPadOS 17 or later. Install Apple's TestFlight app, open the invite link, and tap Accept, then Install.
Builds for Android, Windows, macOS and Linux are on the
Releases page. Per-platform steps —
including the first-run warnings on Windows and macOS — are in
docs/INSTALL.md.
You can also build Mozz yourself from source (see
CONTRIBUTING.md).
You already self-host your music and want a fast, native client that respects it: no second subscription, no re-uploading your library to someone else's cloud, and no telemetry watching what you listen to.
Every Mozz client speaks all three backends and shares one core, so a feature is not an iPhone feature or a desktop feature — it's a Mozz feature.
| iOS / iPadOS | Android | Windows · macOS · Linux | |
|---|---|---|---|
| Plex, Jellyfin, Subsonic | ✅ | ✅ | ✅ |
| Several servers, switch instantly | ✅ | ✅ | ✅ |
| Find servers on your network | ✅ | ✅ | ✅ |
| Offline downloads | ✅ | ✅ | ✅ |
| Equalizer, loudness, lyrics | ✅ | ✅ | ✅ |
| Mixes, radio, Mozz Weekly | ✅ | ✅ | ✅ |
| In the car | CarPlay | Android Auto | — |
| Voice assistant & widgets | Siri, HomePod, widgets | — | — |
The Android and desktop clients are younger than the iPhone one. Developer notes
for each are in clients/android/README.md and
clients/desktop/README.md.
- Bring your own. Connect Plex, Jellyfin, or Subsonic/OpenSubsonic and sign in the way that server expects — a Plex login, Jellyfin Quick Connect or a password, or a Subsonic account. Choose exactly which libraries to pull in.
- More than one at a time. Sign in to several servers and switch between them without signing out of anything — your home server and a friend's, side by side, each keeping its own catalogue, history, and mixes.
- Found, not typed. Mozz looks for Plex and Jellyfin servers on your network and offers them, instead of asking you to copy an address out of a router admin page. Plex accounts with several servers get a picker rather than a guess.
HTTPS is optional for your media server. Enter an http:// or https://
address, including its port and any reverse-proxy path. HTTP works for sign-in,
library browsing, artwork, streaming, and downloads. HTTPS certificates are still
validated normally. Plain HTTP does not encrypt credentials or music traffic;
use a trusted network, a VPN, or HTTPS when connecting over the internet.
Tailscale works with the same server sign-in. With Tailscale running on the device, use your server's Tailscale IP or MagicDNS name, port, and path. Mozz recognizes likely Tailscale tunnels and shows connection guidance on mobile and desktop. This is a local-interface heuristic, not a guarantee that a peer is reachable. Saved sign-ins retain their server address for reconnecting. LAN discovery cannot list new tailnet servers; enter those addresses once. Mozz does not install or manage Tailscale, scan the tailnet, or switch between different LAN and Tailscale addresses automatically.
- One tidy library. Artists, albums, songs, playlists, and genres all live in one place, however your server organizes them.
- Works when the network doesn't. Your catalog is kept on the device, so browsing, searching, and opening albums stay instant even when the server is slow, far away, or offline.
- Search that keeps up. Results appear as you type, and accents and punctuation don't get in the way — "bjork" finds "Björk".
Mozz uses Jellyfin's image API for both embedded covers and local image files; it does not download songs just to extract their artwork. An item's own cover takes priority, followed by an explicitly inherited parent or album cover. If an album has no cover of its own, Mozz can use a known cover from one of its tracks. Custom server covers are not replaced.
Existing libraries recover missing covers from artwork already in the local catalog. Use Sync Now in Settings to fetch newly available image metadata; there is no need to sign out, reinstall, or remove downloads.
If artwork works in Jellyfin or another client but not Mozz, include the Mozz
build, Jellyfin version, and whether the affected view is albums, songs, or the
player in your report. A single affected item's ImageTags,
ParentPrimaryImageItemId, ParentPrimaryImageTag, AlbumId, and
AlbumPrimaryImageTag fields can help distinguish missing metadata from an image
request failure. Never share passwords, access tokens, or image URLs containing
api_key.
- Near-gapless. Tracks flow into one another without a silent gap between them, the way an album is meant to play.
- Smart shuffle. Shuffle spreads your artists out instead of clumping the same one back to back, plus the usual repeat modes.
- Even loudness. Volume normalization keeps quiet and loud tracks at a comfortable level, so you're not reaching for the volume between songs.
- A real equalizer. A 10-band graphic EQ (31 Hz–16 kHz) with presets.
- Lyrics. Time-synced lyrics that highlight and scroll the current line, with a full-screen mode for just the words. Mozz uses your server's lyrics first and falls back to LRCLIB when there are none.
Jellyfin audio requests carry the server's authentication header, including range requests and seeks. A catalog or cover loading successfully does not necessarily mean the audio endpoint accepts URL-token authentication.
On iPhone and iPad, repeated playback failures stop after eight unsuccessful
tracks rather than scanning the whole queue. Documents/playback-diagnostics.log
records HTTP status codes and decoder failures, capped at 256 KiB. It excludes
song titles, server URLs, and authentication tokens.
- Download for the road. Save albums, playlists, or tracks to the device and play them straight from storage — no network needed, no quality loss.
- Downloads that stick around. Transfers keep going in the background, re-syncing never loses what you've saved, and your lyrics come with them.
- Mozz Weekly. A weekly mix that rediscovers music already in your library, built right on the device.
- Radio and mixes seeded from what you're listening to.
- Likes and stars, unified. Jellyfin and Subsonic favourites and Plex's star ratings show up together, and Mozz writes them back to your server where it's supported.
- Optional enrichment. Sharpen radio and mixes with open music databases (only song and artist names are sent) — or leave it off and keep recommendations on-device.
- Continue here. Leave off on one device and Mozz can offer to pick playback up where you left it on another — resumed only when you choose, never yanked away.
- Deep links.
mozz://links open straight to an album, artist, playlist, genre, or tab, and Apple devices can hand a screen off between themselves. - Sign in once. On Apple devices your server credentials travel through the iCloud Keychain, so you don't retype them.
CarPlay and Android Auto both get your Home and Library on the car screen, with artwork, a shuffle shortcut, and an Up Next list. They read the on-device library, so they stay quick where signal is poor and downloaded tracks keep playing when the server can't be reached.
- Ask for anything. "Play …" a song, album, artist, playlist, genre, your liked songs, or a mix — from the Siri button, Shortcuts, or a HomePod, which hands the request to your iPhone.
- Widgets. Now Playing and Recently Played for your Home Screen.
Light, dark, or follow the system, with a choice of dark looks and an optional Liquid Glass player finish on newer iOS.
- A device: iPhone or iPad on iOS / iPadOS 17+, an Android phone or tablet, or a Windows, macOS, or Linux desktop.
- A media server you can reach: Plex, Jellyfin, or Subsonic / OpenSubsonic. Navidrome is the tested Subsonic target; other OpenSubsonic servers are best-effort.
- Install Mozz for your platform — TestFlight for iPhone and iPad, or the Releases page for Android and desktop.
- Choose your server type: Plex, Jellyfin, or Subsonic. Mozz offers any it finds on your network.
- Sign in the way that server expects and pick the libraries you want.
- Wait for your library to appear, then start streaming — or download some albums for offline.
Mozz has no backend of its own and collects nothing about you — no account, no
analytics, no tracking. It talks to your media server, to Plex's sign-in and
discovery service when you use Plex, and — only when you turn those features on — to
LRCLIB for lyrics and open music databases for recommendations, sending only the
minimum needed (song and artist names). Full details are in
docs/PRIVACY.md.
Please open an issue on GitHub Issues. Clear steps to reproduce, your server type, your platform, and what you expected all help.
Mozz is open source and contributions are welcome. Build instructions, the code
layout and testing live in CONTRIBUTING.md, and cutting a
release is docs/RELEASING.md; the deeper design rationale is in
ARCHITECTURE.md and the notes and decision records under
docs/.
Mozz is free forever. If it's earned a place on your Home Screen and you'd like to chip in, you can sponsor development through GitHub Sponsors. It genuinely helps — but not donating is completely fine, and you get every feature either way.
Mozz is free software licensed under the GNU General Public License v3.0, with an
additional permission under section 7 allowing distribution through Apple's App Store
despite its DRM and code-signing requirements. See LICENSE for the full
terms.
Mozz is not affiliated with or endorsed by Plex, Jellyfin, Navidrome, Subsonic/OpenSubsonic, MusicBrainz, ListenBrainz, or LRCLIB. All trademarks belong to their respective owners.
More open source