Navidrome 0.64 Adds Experimental Jellyfin Music API Support

Navidrome 0.64 Adds Experimental Jellyfin Music API Support

Navidrome 0.64 introduces an experimental Jellyfin Music API, a new artwork pipeline, playlist favourites, natural sorting, and new themes.

Why a second API matters

Navidrome has always spoken Subsonic, an API originally from a commercial music server that became the de facto standard for self-hosted music. Its value is entirely in the client ecosystem: a Subsonic-compatible server works with dozens of existing mobile and desktop apps, which is what makes a self-hosted music server usable rather than a web page you tolerate.

The Subsonic API is also old, was never formally specified, and carries design decisions from a different era.

Adding a Jellyfin-compatible API opens a second and considerably larger client ecosystem, including Finamp and the Jellyfin apps themselves.

The strategic angle: a lot of people run Jellyfin for video and something else for music, because Jellyfin’s music handling has historically been weaker than a dedicated server’s. Speaking Jellyfin’s API means Navidrome can serve music to Jellyfin clients while remaining a purpose-built music server. Users get better music handling without giving up the apps they already have.

“Experimental” is doing work in that sentence. Expect gaps.

Natural sorting

Small and genuinely satisfying.

Lexical sorting produces Track 1, Track 10, Track 11, Track 2. Natural sorting understands the numbers and produces Track 1, Track 2, ... Track 10.

Anyone with a large library has been irritated by this for years. It is the same underlying issue our locale guide covers, where collation rules decide ordering and the default is rarely what a human expects.

The artwork pipeline

Cover art is a surprisingly awkward problem: it can be embedded in tags, sitting as a file in the album directory under any of several conventional names, or absent entirely and needing fetching. Handling all of that consistently across a library assembled over twenty years from varied sources is real work.

Running it

Navidrome is a single Go binary, which makes it one of the easier things to self-host. No runtime to install, no database server, just the binary and your music directory.

services:
  navidrome:
    image: deluan/navidrome:latest
    user: "1000:1000"
    ports:
      - "127.0.0.1:4533:4533"
    environment:
      ND_SCANSCHEDULE: 1h
      ND_LOGLEVEL: info
    volumes:
      - ./data:/data
      - /srv/music:/music:ro
    restart: unless-stopped

Two things worth copying from that. The 127.0.0.1: prefix keeps Docker from publishing the port on every interface and bypassing your firewall, which catches people out regularly. And mounting the music directory read-only means a compromised container cannot damage the library it serves.

Our Docker Compose guide and the compose generator cover the rest, and our self-hosting introduction covers the wider question of what running this actually commits you to.

Background reading

Explainers for the concepts behind this story.