Skip to content

Self-host Navidrome

updated Sep 2026prices checked · Jul 2026Install verified on Ubuntu 26.04 · Sep 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →

A self-hosted music streaming server (Subsonic-compatible) — stream your own library to dozens of mobile and desktop apps. Your music, your server.

Key facts

CategoryMedia server
LicenseGPL-3.0
StackGo
Min RAM256 MB
Official imageyes
Measured idle RAM16 MB
Difficulty
Our recommendation

Pick Navidrome when you want your own music library streamed to the existing ecosystem of Subsonic, Airsonic and Madsonic clients: it is a GPL-3.0 Go binary with a React web UI, SQLite for its own data, on-the-fly transcoding through ffmpeg, and per-user play counts and playlists. One container, one read-only `/music` mount and one `/data` folder is the install, and the README describes "Very low resource usage", though no RAM figure is published — our 256 MB floor is an estimate. For audiobooks and podcasts Audiobookshelf is the better shape; for video, Jellyfin.

Follow the Navidrome deploy guide →

What you need

  • Any VPS with at least 256 MB of RAM
  • A domain you control — most self-hosted setups need HTTPS in front of them
  • Under an hour if you've used Docker before
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + US
Get Hetzner Cloud (opens in new tab)
Kamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + Asia
Start free on Kamatera → (opens in new tab)
DigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + Asia
Deploy on DigitalOcean → (opens in new tab)

Paid link — we earn a commission if you shop through it.

Install

Run these commands on your server:

# Navidrome — official docker run (docs → Installation → Docker). Runs as your user, not root:
# the data folder must be writable and the music folder readable by that UID:GID
mkdir -p ./data ./music && sudo chown -R $(id -u):$(id -g) ./data
docker run -d \
   --name navidrome \
   --restart=unless-stopped \
   --user $(id -u):$(id -g) \
   -v ./music:/music \
   -v ./data:/data \
   -p 4533:4533 \
   -e ND_LOGLEVEL=info \
   deluan/navidrome:latest
# open http://SERVER_IP:4533

What you take on

Navidrome is light to run, but its security page and release notes name the things that actually go wrong:

non-negotiableOur snippet runs the container as root. Upstream says "You should NOT run Navidrome as root" — the Docker page adds user: 1000:1000 ("must own the data folder and be able to read music folder(s)") and notes PUID/PGID "have no effect" on this image. The first browser visit to port 4533 creates the admin account ("Create Admin"), so do that before exposing it.
non-negotiableTranscoding-profile editing is off by default (ND_ENABLETRANSCODINGCONFIG=false) because it "potentially allows an attacker to run any command"; upstream says enable it briefly, make the change, then disable it again. The install docs call ffmpeg "a requirement for Navidrome to work properly", so it has to be present in the image or on the host.
non-negotiablev0.64.0 (September 2026) re-encodes every internal ID to a 128-bit base62 format — "The migration touches every table, so back up your database before upgrading" — and now rejects negative durations and warns about unrecognised config options. The built-in backup (Backup.Schedule / Backup.Path / Backup.Count) "ONLY backs up the database", not the music or config, and navidrome backup restore must run with the app stopped.
non-negotiableAnonymous insights collection is "Enabled by default" (instance ID, OS, memory stats, library counts, feature flags); set ND_ENABLEINSIGHTSCOLLECTOR=false to opt out. If you set PasswordEncryptionKey, it cannot be changed afterwards without breaking user logins.
non-negotiableBehind a reverse proxy bind to localhost via Address and set BaseUrl when serving under a path; header-based SSO (ExtAuth.UserHeader, default Remote-User) is safe only if ExtAuth.TrustedSources is restricted to the proxy — 0.0.0.0/0 disables the protection. The 256 MB floor is our estimate; upstream publishes no RAM requirement.

An alternative to

Spotify

More in Media server

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.