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

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
| Task | What |
|---|---|
| Folder | ~/docker/navidrome/compose.yaml |
| Music | /mnt/data/media/Music (read-only mount) |
| Web | http://server-ip:4533 |
| Apps | Symfonium, DSub (Android); play:Sub, Amperfy (iOS); Supersonic, Feishin (desktop) |
| Rescan | automatic on a schedule, or Settings → Rescan |
| Users | admin → 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.
- Android: Symfonium (best), DSub, Ultrasonic
- iOS: play:Sub, Amperfy, Substreamer
- Desktop: Supersonic, Feishin, or just the browser
- Car: Symfonium supports Android Auto
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.
