How to Install Navidrome (Stream Your Music Collection Like Spotify)

Navidrome: stream the music you own — Twenty years of CDs, on every phone. No subscription.

Twenty years of ripped CDs and bought downloads shouldn't sit on a drive while you pay monthly for a streaming service that doesn't have half of them. Navidrome indexes a music folder and serves it to a browser and to dozens of phone apps through the Subsonic API, with playlists, favourites, transcoding for mobile data and separate accounts for the family. It's tiny — happy on a Pi.

Quick reference

TaskWhat
Folder~/docker/navidrome/compose.yaml
Music/mnt/data/media/Music (read-only mount)
Webhttp://server-ip:4533
AppsSymfonium, DSub (Android); play:Sub, Amperfy (iOS); Supersonic, Feishin (desktop)
Rescanautomatic on a schedule, or Settings → Rescan
Usersadmin → Users

1. The compose file

mkdir -p ~/docker/navidrome && cd ~/docker/navidrome
nano compose.yaml

services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
user: 1000:1000
ports:
- "4533:4533"
environment:
ND_SCANSCHEDULE: 1h
ND_LOGLEVEL: info
ND_SESSIONTIMEOUT: 24h
ND_LASTFM_ENABLED: "true"
volumes:
- ./data:/data
- /mnt/data/media/Music:/music:ro
restart: unless-stopped

docker compose up -d
sudo ufw allow 4533/tcp

Open http://192.168.1.50:4533, create the admin user. The first scan starts immediately; a big library takes a few minutes.

2. Tags matter more than folders

Navidrome reads the tags inside the files (artist, album, track number, year, cover art), not the folder names. Untagged files show as "Unknown Artist". Fix tags once with MusicBrainz Picard on your PC — it fingerprints each track and fills everything in, including album art — and the library looks like a shop.

Folder structure still helps for your own sanity: Artist/Album/01 - Title.flac.

3. Apps

Any Subsonic-compatible app works. Server address http://192.168.1.50:4533 (or the https address through your proxy), your Navidrome username and password.

For mobile data, set the app to transcode to 128–192 kbps; Navidrome converts on the fly and keeps the FLACs at home.

4. Family accounts

Users → New. Each person gets their own favourites, playlists, play counts and "recently played". Playlists can be made public to share.

5. Last.fm and ListenBrainz

Personal → Scrobble to Last.fm, link the account, and everything you play from any app is scrobbled. ListenBrainz works the same way with a token.

Behind the proxy

music.example.com → 127.0.0.1:4533 (tutorial 28). Add HTTPS; the apps are happier with it.

Troubleshooting

Nothing appears after scanning. The container can't read the folder — user: 1000:1000 must be able to; ls -ln /mnt/data/media/Music.

Albums split into two, or tracks in the wrong order. Inconsistent album-artist tags or missing track numbers. Picard fixes both in one pass.

Covers missing. Embed them (Picard does), or put cover.jpg in each album folder.

App says "wrong credentials" but the web works. Some apps need the legacy auth toggle on, or the password has a character the app mangles. Try a simpler password for that user.

Wrapping up

One container, music mounted read-only, tags fixed with Picard, a Subsonic app on each phone. The collection you already own streams anywhere, scrobbles, and never asks for a card.

Call us