finale
A simple Jellyfin music player.
What it is
finale is a small client for your Jellyfin music library. No social layer, no recommendations, no clutter — just your library, search, and playback.
It exists because the Jellyfin clients I tried did more than I wanted. This one tries to do less.
Features
Browse & search
Searchable artist and album pages, with detail views for each.
Playback
Gapless audio backed by a system audio service, with repeat modes and a queue.
Playlists
Create, edit, and delete Jellyfin playlists from inside the app.
Now playing
A full-screen player with the current track, queue, and quick controls.
Recently played
Pick up where you left off without digging through the library.
Remote-friendly
Connects to your Jellyfin server over LAN or Tailscale.
Try it in the browser beta
There's a hosted web build at /app/. It runs in any modern browser and connects directly to your Jellyfin server — your library and listening history stay between your browser and your server.
Your Jellyfin server has to be reachable over HTTPS from your browser. The cleanest way to do that without putting Jellyfin on the public internet is Tailscale.
-
Install Tailscale on the device running Jellyfin and on every device you want to play music from.
If you don't have a tailnet yet, sign up at
tailscale.com— the free plan is enough. -
Expose Jellyfin over HTTPS via Tailscale Serve. On the Jellyfin host:
sudo tailscale serve --bg --https=443 http://localhost:8096This gives Jellyfin a real Let's Encrypt cert at
https://<host>.<tailnet>.ts.net. The hostname only resolves on devices logged into your tailnet — it isn't public. -
Open the web player at /app/ from a tailnet-connected device. On the setup screen, enter your Jellyfin URL — the
https://<host>.<tailnet>.ts.netone, no port — and sign in.
Caveats: clearing your browser's site data resets finale's cached library info — it'll reload it from your server next time. And any device not on your tailnet will load this page but won't reach Jellyfin.
Download
Latest builds from CI. Refreshed every time the release branch is updated.