How to Use Navidrome: The Beginner's Guide to Your Own Music Server

CodexFuse Team · 2026-10-31T18:06:15.000Z · 12 min read min read

Install Navidrome with Docker, create the admin account before anyone else can, scan your first music folder, connect Subsonic phone apps, and stream your own library anywhere — your self-hosted Spotify, minus the subscription.

Navidrome is a lightweight, self-hosted music server that turns a folder of audio files into your own private streaming service \u2014 no monthly fee, no ads, no algorithm deciding what you hear next. Learning how to use Navidrome means learning three things: how to start it, how to feed it your music, and how to play that music on your phone. The good news is that Navidrome ships as a single Go binary with its database built in, so there is no database server to configure \u2014 and the fastest path is the official Docker image, which our Docker beginner guide walks through from zero. This navidrome tutorial covers the complete beginner arc: the Docker first run, the port-4533 admin-account lesson most guides bury, your first library scan, Subsonic phone apps, transcoding for mobile data, and HTTPS access from outside your home.

What is Navidrome, exactly?

Navidrome is an open-source, self-hosted music streaming server: it reads the music folder on your machine, indexes every track, and serves your collection through a modern web UI plus the Subsonic API that dozens of phone and desktop apps speak. It is built in Go, runs on almost nothing \u2014 one community test ran a library of about 29,000 songs in under 50 MB of RAM \u2014 and stores everything in an embedded SQLite database, so there is no separate database to install or tune. As of this writing, the project (navidrome/navidrome on GitHub) sits at roughly 24,500 stars with v0.64.2 released on September 24, 2026, and it is licensed GPL-3.0. For navidrome for beginners, the mental model is simple: Navidrome is to your music folder what Jellyfin is to your video folder \u2014 and the two are siblings, never substitutes. Here is the 7-step first-use arc this guide follows:

  1. Install Docker on your server or computer \u2014 the navidrome docker path works on any VPS, home server, or Raspberry Pi.
  2. Write a docker-compose.yml with the official navidrome/navidrome:latest image (see the compose block below).
  3. Start it with docker compose up -d and open http://YOUR-SERVER-IP:4533.
  4. Create the admin account immediately \u2014 the first visitor to the web UI becomes the admin.
  5. Point /music at your music folder and let the navidrome first run scan finish.
  6. Install a Subsonic phone app, log in with your server address, and press play.
  7. Optionally add a reverse proxy so you can listen from anywhere over HTTPS.

How do I install Navidrome with Docker?

A navidrome install starts with a machine that stays on: a cheap VPS works, so does a home server or a Raspberry Pi. If you have not picked one yet, read what is VPS hosting first \u2014 Navidrome sips resources, so the smallest VPS tier is usually enough. Then create a folder for the project and write this docker-compose.yml, taken from the official docs (revised October 16, 2026):

services:
  navidrome:
    image: navidrome/navidrome:latest
    user: 1000:1000   # must own /data and read /music; see below
    ports:
      - "4533:4533"
    restart: unless-stopped
    environment:
      # Optional: ND_SCANNER_SCHEDULE: "@every 6h"
    volumes:
      - "/path/to/data:/data"
      - "/path/to/your/music/folder:/music:ro"

Two freshness notes before you run it. First, the official image is now navidrome/navidrome:latest \u2014 the docs moved off deluan/navidrome on October 16, 2026, but older community guides (and some from just days ago) still show the old name. Use the official one. Second, the image ships for linux/amd64, linux/arm/v6, linux/arm/v7, and linux/arm64, so the same compose file runs on a Pi and on a VPS. Start it with docker compose up -d, then check docker logs navidrome \u2014 the log tells you exactly which folder is wrong if the container stops.

Why must I create the admin account immediately?

This is the port-4533 lesson: Navidrome binds to port 4533 by default, and the first user created through the web interface automatically becomes the admin (the official security docs confirm this behavior). That is convenient on your own laptop and dangerous on a shared network \u2014 anyone who opens your Navidrome URL before you do claims the admin account. So open http://YOUR-SERVER-IP:4533 the moment the container is up, create your username and password, and only then think about who else gets the address. Until the account exists, keep port 4533 off the public internet: bind the port to localhost for LAN-only use, or create the account first and add the reverse proxy second. Admin sessions last 48 hours by default (ND_SESSIONTIMEOUT), so you will not be re-logging constantly.

How do I set up Navidrome with my music folder?

Navidrome never moves or renames your files \u2014 it reads the folder you mount at /music and builds its index from the tags. The compose example mounts it read-only (:ro), which is the navidrome setup habit to keep: your library is the one thing you cannot re-download if something goes wrong, so give the container read access and nothing more. Two permission lessons from the official docs:

  • The user: 1000:1000 directive matters. Navidrome needs write access to /data (its database and cache) and read access to /music. If /data is not writable, the container dies at startup with Error applying PRAGMA optimize; if /music is not readable, the web UI works but your library stays empty. Run id -u and id -g on the host, match those numbers in the user line, and give them ownership of the data folder.
  • PUID and PGID do nothing here. Those variables are a linuxserver.io convention; Navidrome's official image ignores them. Use the user directive instead \u2014 and do not "fix" a permission error by deleting the directive, because then the container runs as root.

You can also override the folder with the ND_MUSICFOLDER environment variable, and the docs even support multiple music libraries from one server. Music lands in Navidrome's index with artist, album, genre, and year read from your files' tags \u2014 which is why a tagging pass on your folder pays off before a big first import.

How does the first Navidrome music scan work?

Navidrome scans automatically: the default schedule is @every 24h, set by the ND_SCANNER_SCHEDULE environment variable (sources disagree on the name across versions \u2014 the current official options reference lists Scanner.Schedule, so ND_SCANNER_SCHEDULE is the one to use). The first scan of a large folder takes a while \u2014 thousands of files means thousands of tag reads \u2014 so do not panic at an empty dashboard; watch docker logs -f navidrome for progress, and trigger a manual rescan from the web UI after you add new music. One practical habit: add your whole library in one go, let the first scan finish, and only then judge the artwork and tag quality. Missing covers and wrong artist splits are almost always tag problems in the files, not Navidrome problems.

How do I play my music on my phone with the Navidrome Subsonic API?

A navidrome mobile app is how the setup becomes a daily driver: Navidrome speaks the Subsonic (and OpenSubsonic) API, so dozens of third-party apps can browse and stream your library as if it were a cloud service. The community's usual picks are Symfonium on Android, play:Sub on iOS, and Sonixd on desktop. The pairing flow is the same in all of them: install the app, add a new server, enter your Navidrome address (for example http://192.168.1.50:4533 on your home network, or your HTTPS domain once the reverse proxy is up), then your Navidrome username and password. The app logs in through the navidrome subsonic endpoint, pulls your artists, albums, and playlists, and streams on demand \u2014 including offline caching in the better apps, which is the feature that finally replaces the cloud service for commuters. Create a separate Navidrome user for each family member rather than sharing your admin login; regular users get their own play history and starred tracks.

What is Navidrome transcoding and should I turn it on?

Navidrome transcoding converts your audio on the fly when the original format is wrong for the moment \u2014 the classic case is a FLAC library streamed over a weak cellular connection, where sending the full lossless file would stall and burn data. Transcoding profiles live in the server configuration, and here is the beginner trap: transcoding configuration is disabled in the web UI by default (ND_ENABLETRANSCODINGCONFIG defaults to false). The official security docs explain why \u2014 on-demand transcoding runs commands on your server, so an attacker who could edit the config could run anything. If you need it, set ND_ENABLETRANSCODINGCONFIG: "true" in your compose environment and restart; then define profiles (for example, FLAC \u2192 Opus at a modest bitrate for mobile) in the UI. For home Wi-Fi listening, leave it off: direct streaming costs the server nothing and sounds exactly like your files.

How do I put Navidrome behind a reverse proxy?

A navidrome reverse proxy does two jobs: it gives you HTTPS (so your password and music are not crossing the internet in the clear) and a clean address like https://music.example.com instead of an IP plus a port. The one Navidrome-side setting is ND_BASEURL \u2014 set it to your public URL so shared links and Subsonic clients resolve correctly. The proxy itself can be Caddy (two lines with automatic certificates), Traefik, or Nginx; point it at http://localhost:4533 and stop publishing port 4533 to the world. Once the proxy is in front, your phone apps use the HTTPS address everywhere \u2014 home, office, or a caf\u00e9 \u2014 and the port-4533 lesson from earlier stops mattering because the raw port is no longer reachable.

How do I scrobble to Last.fm?

Last.fm integration is on by default (ND_LASTFM_ENABLED defaults to true), but scrobbling needs your own API credentials: create an API account on last.fm, then set ND_LASTFM_APIKEY and ND_LASTFM_SECRET in the Navidrome environment and restart. Each Navidrome user then links their own Last.fm account in their profile, and plays scrobble from there. It is the one piece of the setup that depends on a third party, and it is entirely optional \u2014 skip it and Navidrome still keeps its own local play history and "recently played" views per user.

Is Navidrome really a self-hosted Spotify alternative?

Honestly: yes for your library, no for the catalog. As a self hosted spotify alternative, Navidrome replaces the player and sync half of Spotify \u2014 your playlists, your offline downloads via Subsonic apps, your play history \u2014 while the other half, the licensed catalog and discovery algorithms, never existed in a self-hosted world. You bring the music: ripped CDs, Bandcamp purchases, old MP3 folders. What you get back is a service with no monthly fee, no ads, no "this track is not available in your region," and a library nobody can delete from under you. Users who keep both usually land in the same spot: Navidrome for the collection they own, Spotify (or nothing) for discovery.

Navidrome vs Jellyfin: which one do I actually need?

Beginners ask this constantly, and the answer is that they are not competitors \u2014 Navidrome is the music lane of the self-hosted media setup, and our Jellyfin beginner guide covers the video lane. Navidrome does music and only music: albums, artists, playlists, Subsonic apps. Jellyfin does movies, TV, and photos. Many home servers run both, with Navidrome handing the phone's music and Jellyfin handling the TV.

NavidromeJellyfinPlex
Built forMusic onlyVideo, music, photosVideo, music, photos
LicenseOpen source (GPL-3.0)Open sourceFreemium, proprietary
Resource useTiny (single Go binary, embedded DB)ModerateModerate to heavy
Phone appsAny Subsonic/OpenSubsonic appOfficial Jellyfin appsOfficial Plex apps
Best forMusic collectors with a tag-clean libraryMovie/TV libraries on your own hardwareUsers who want official apps with minimal setup

The draw-the-line rule: if your question is "which server for my music folder," the answer is Navidrome; if it is "which server for my movie folder," it is Jellyfin. Run both and they never fight.

What are the 7 beginner mistakes with Navidrome?

Every one of these comes from a real support thread, tutorial comment, or the official docs' own troubleshooting section \u2014 read the table once and you will skip the week of confusion most beginners pay.

MistakeWhy it hurtsThe fix
Waiting to create the admin accountThe first visitor to port 4533 becomes admin \u2014 if that is not you, it is a strangerCreate the account the minute the container is up, before sharing the URL
Copying a compose file with the old deluan/navidrome imageCommunity guides from before October 2026 use the retired nameUse navidrome/navidrome:latest, the current official image
Setting PUID/PGID for permissionsThe official image ignores both \u2014 your folder stays unreadableUse the user: UID:GID directive and match your host IDs
Mounting /music writableA misbehaving process \u2014 or a future you \u2014 can rename your only copy of the libraryMount /music:ro; Navidrome only needs to read
Exposing port 4533 to the internet with no proxyPlain HTTP means your password travels in the clear, and the admin-creation race is openReverse proxy with HTTPS (Caddy/Traefik/Nginx) and ND_BASEURL
Wondering where the transcoding settings areTranscoding config is disabled in the UI by default for securitySet ND_ENABLETRANSCODINGCONFIG=true and restart \u2014 only if you need it
Expecting Navidrome to handle videoIt is music-only; video features do not exist and never willPair it with Jellyfin for the video lane \u2014 siblings, not substitutes

Sources

Facts in this guide were verified at write time (October 31, 2026) from: the GitHub navidrome/navidrome releases API (v0.64.2 released September 24, 2026; ~24,500 stars; GPL-3.0; created February 2016); the official Navidrome Docker installation docs (revised October 16, 2026 \u2014 official image navidrome/navidrome:latest, amd64/arm platforms, user directive, port 4533, /data and /music:ro volumes, PUID/PGID and root-runner warnings); the official configuration-options reference (ND_PORT, ND_SCANNER_SCHEDULE default @every 24h, ND_SESSIONTIMEOUT 48h, ND_BASEURL, ND_ENABLESHARING, ND_ENABLETRANSCODINGCONFIG, ND_LASTFM_ENABLED/APIKEY/SECRET, ND_MUSICFOLDER, multi-library); the official security-considerations docs (first web-UI user becomes admin; transcoding config disabled by default); the NixOS wiki Navidrome page (127.0.0.1:4533, ND_MUSICFOLDER, lyrics plugins); the dev.to Vultr guide "Deploying Navidrome on Ubuntu 24.04" (~121 days ago \u2014 compose arc, admin account step, manual rescan); the real4web.com step-by-step Docker guide (~6 days ago \u2014 compose, :ro lesson, ~29,000 songs under 50 MB RAM note); the selfhosthero.com Proxmox guide (~121 days ago \u2014 first-boot admin, Subsonic apps play:Sub/Symfonium/Sonixd); the turbogeek.co.uk Raspberry Pi beginner's log (~94 days ago \u2014 Pi arc, 0.63 sharing note); and the mainvps.net Symphonium pairing guide (~51 days ago).

Frequently Asked Questions

Is Navidrome free to use?

Yes. Navidrome is open source under the GPL-3.0 license \u2014 no account, no subscription, no feature paywall. Your only cost is whatever machine runs it, and a small VPS or a Raspberry Pi you already own is enough.

Can Navidrome run on a Raspberry Pi?

Yes. The official Docker image ships for linux/arm/v6, linux/arm/v7, and linux/arm64 alongside amd64, and the project's whole reputation is built on running on tiny hardware. One community beginner's log runs the full setup on a Raspberry Pi 3 with 1 GB of RAM.

Do I need a database for Navidrome?

No. Navidrome embeds its database (SQLite) inside the single Go binary and keeps it in the /data volume. You configure no database server, no users, no passwords \u2014 you only need to make sure the container can write to /data.

Which phone apps work with Navidrome?

Any app that speaks the Subsonic or OpenSubsonic API. The community's usual picks are Symfonium on Android, play:Sub on iOS, and Sonixd on desktop \u2014 point the app at your server address, log in with your Navidrome user, and your whole library appears.

Can I use Navidrome without Docker?

Yes. The official docs cover native installs for Windows (MSI), Linux, macOS, and FreeBSD, plus Podman and community packages. This guide uses Docker because the steps are identical on every system, but the same settings \u2014 port 4533, music folder, scan schedule \u2014 apply everywhere.

Featured on Twelve Tools Launch Llama Tools Launch your MCP