DockerSelf-Hosting

Navidrome with Docker: Stream Your Own Music Collection (Linux, Windows, Mac)

Before you start

  • 20 min read

Boxes marked Run in terminal are what you type; plain text explains why. Check what you need first

What you get in one minute#

Navidrome is a free, self-hosted music server: you point it at a folder of music files you own, and you stream them to your phone, laptop or browser, like your own small Spotify.

Navidrome official logo

Logo: the official Navidrome project (github.com/navidrome/navidrome)

It reads the tags inside your files, builds albums and artists, and talks to any app that speaks the Subsonic or OpenSubsonic API. It is for music only, uses few resources, and never changes your files.

WhatValue (official docs, read November 2026)
Current versionNavidrome v0.64.2, released 24 September 2026 (latest stable)
Image to pinnavidrome/navidrome:0.64.2 (tag checked on Docker Hub; about 94 MB compressed on amd64)
Time neededAbout 20 minutes (our estimate, not measured)
RAM and CPUNot documented as numbers; the docs say "very low resource usage"
PortTCP 4533 (web page and Subsonic API)
LicenceGPL-3.0 (LICENSE at the release tag)
Project statusActive (last code push 4 November 2026). Not archived, not renamed
Official docsnavidrome.org/docs and the repository

At a glance:

  • What it is: one container with a web player and a Subsonic-compatible API. Your music stays in your folder; Navidrome keeps only a database and a cache.
  • Your files are safe: the music folder is mounted read-only (:ro). The docs say Navidrome only needs read access there.
  • Apps: any Subsonic or OpenSubsonic client works; the project lists more than 100.
  • Remote listening: use a VPN into your home network. Do not forward port 4533 on your router.
  • Image name: the docs now say navidrome/navidrome (changed 16 October 2026). Older guides say deluan/navidrome. Docker Hub shows 0.64.2 on both.

How it fits together#

Your apps talk to one container on port 4533. It reads your music folder (read-only) and writes only to its own data folder. Away from home, the phone joins your VPN first.

Diagram with three lanes: at home a phone, laptop or browser connects to the Navidrome container on port 4533, optionally through Caddy or Traefik with HTTPS; away from home a phone connects through a VPN into the home network and then to Navidrome; Navidrome reads the read-only music folder and writes its database to the data folder

Drawn for this guide from the official Docker page and security notes. The dashed HTTPS route is optional.

Before you start#

You need a computer that stays on, Docker with Compose, and a folder of tagged music files.

SystemWhat you need
LinuxDocker Engine and the Compose plugin, curl
WindowsDocker Desktop and PowerShell
MacDocker Desktop and Terminal
Run in terminalbash
docker --version
docker compose version

Checklist:

  • [ ] Docker and Compose work (the two commands above)
  • [ ] Your music folder exists and its files have tags (see "What your library needs")
  • [ ] Port 4533 is free on the machine
  • [ ] The music folder is backed up (Navidrome does not back it up)
  • [ ] For the HTTPS section only: a DNS name for the server and ports 80 and 443 free

Without Docker, the docs describe a Windows MSI installer, a macOS navidrome service install command and Linux .deb or tarball installs. This guide uses Docker so the steps match on all three systems.

Tested by DIY Lab Hub: not yet. The commands come from the official Docker page, the Dockerfile and the docs read in November 2026. We did not run them.

Step 1: Create the folders and the settings file#

We keep everything in ~/docker_volumes/navidrome, as all DIY Lab Hub guides do. A small .env file holds three values: the user that runs the container and the path to your music. The docs say that user must own the data folder and be able to read the music.

Linux#

Run in terminalbash
mkdir -p ~/docker_volumes/navidrome/{data,backups}
cd ~/docker_volumes/navidrome
printf 'APP_UID=%s\nAPP_GID=%s\nMUSIC_DIR=%s\n' "$(id -u)" "$(id -g)" "$HOME/Music" > .env
chmod 600 .env
cat .env
ls -n "$HOME/Music" | head -5

If your music is elsewhere, edit the MUSIC_DIR line. The ls -n line shows the numeric owner of your music files.

Windows (PowerShell)#

Codepowershell
New-Item -ItemType Directory -Force "$HOME\docker_volumes\navidrome\data","$HOME\docker_volumes\navidrome\backups" | Out-Null
Set-Location "$HOME\docker_volumes\navidrome"
$music = ("$HOME\Music" -replace '\\','/')
"APP_UID=1000`nAPP_GID=1000`nMUSIC_DIR=$music" | Set-Content -Encoding ascii .env
Get-Content .env

Windows has no Linux user IDs, so we use the docs' example 1000:1000. The Navidrome docs do not cover Docker Desktop on Windows and we did not test it. If Step 2 fails with a database error, see Troubleshooting.

Mac (Terminal)#

Same commands as Linux. Docker Desktop must be allowed to share the folder that holds your music; if a mount fails, check its file sharing settings.

Check it worked. cat .env (or Get-Content .env) shows a user number, a group number and the full path to your music.

Tip: Do not copy PUID and PGID from other Docker guides. The Navidrome docs say its image ignores them. Only the user: line in Compose sets the user.

Step 2: Write the Compose file and start Navidrome#

This is the official compose file with five changes: the image is pinned to 0.64.2, paths come from .env, data lives in ./data, nightly database backups are on, and the anonymous usage report is off. Your music mounts read-only.

Linux#

Run in terminalbash
cd ~/docker_volumes/navidrome
cat > docker-compose.yml << 'EOF'
services:
  navidrome:
    image: navidrome/navidrome:0.64.2
    container_name: navidrome
    restart: unless-stopped
    user: "${APP_UID}:${APP_GID}"
    ports:
      - "4533:4533"
    environment:
      ND_ENABLEINSIGHTSCOLLECTOR: "false"
      ND_BACKUP_PATH: /backup
      ND_BACKUP_SCHEDULE: "0 3 * * *"
      ND_BACKUP_COUNT: "7"
    volumes:
      - "./data:/data"
      - "./backups:/backup"
      - "${MUSIC_DIR}:/music:ro"
EOF
docker compose config --quiet
docker compose up -d
docker compose ps
docker compose logs --tail=50 navidrome

Windows (PowerShell)#

Codepowershell
Set-Location "$HOME\docker_volumes\navidrome"
@'
services:
  navidrome:
    image: navidrome/navidrome:0.64.2
    container_name: navidrome
    restart: unless-stopped
    user: "${APP_UID}:${APP_GID}"
    ports:
      - "4533:4533"
    environment:
      ND_ENABLEINSIGHTSCOLLECTOR: "false"
      ND_BACKUP_PATH: /backup
      ND_BACKUP_SCHEDULE: "0 3 * * *"
      ND_BACKUP_COUNT: "7"
    volumes:
      - "./data:/data"
      - "./backups:/backup"
      - "${MUSIC_DIR}:/music:ro"
'@ | Set-Content -Encoding ascii docker-compose.yml
docker compose config --quiet
docker compose up -d
docker compose ps
docker compose logs --tail=50 navidrome

Mac (Terminal)#

Same commands as Linux, with the same docker-compose.yml.

SettingMeaning
user:Runs Navidrome as you, not as root. The docs say never run it as root
./data:/dataDatabase and cache. Navidrome also looks for navidrome.toml here
${MUSIC_DIR}:/music:roYour music, read-only
ND_BACKUP_*A database backup at 03:00 every night, last 7 kept, in ./backups
ND_ENABLEINSIGHTSCOLLECTORThe docs describe this report as anonymous and on by default. We switch it off. Delete the line to help the project

Check it worked. docker compose ps shows navidrome running. The docs say the log should show messages like these (their example, not our output):

Codetext
Creating DB Schema
Scanner: Starting scan
Navidrome server is ready!

A second check, curl -s -o /dev/null -w "%{http_code}\n" http://localhost:4533/ping, should print 200. The /ping route is in the server source at the release tag, not in the docs. On Windows use curl.exe.

Tip: If the container stops at once, run docker compose logs navidrome. The two commonest errors, an unwritable data folder and an unreadable music folder, are in Troubleshooting with their exact text.

Step 3: Create the admin account and let it scan#

The first person to open the page creates the admin account. Do it yourself before you share the address.

Linux#

Open http://localhost:4533 on the machine, or http://<server-address>:4533 from another computer on your network. Enter a username and a long password, repeat it and press Create Admin. Watch the scan, and press Ctrl+C to leave the log:

Run in terminalbash
cd ~/docker_volumes/navidrome
docker compose logs -f navidrome

Windows (PowerShell)#

Open http://localhost:4533, create the admin the same way, then:

Codepowershell
Set-Location "$HOME\docker_volumes\navidrome"
docker compose logs -f navidrome

Mac (Terminal)#

Same as Linux. Open http://localhost:4533, create the admin, then run docker compose logs -f navidrome in the project folder.

The docs give these first-scan times:

Library sizeApproximate time
Under 1,000 songsUnder 1 minute
1,000 to 10,000 songs1 to 5 minutes
10,000 to 50,000 songs5 to 15 minutes
More than 50,000 songsMore than 15 minutes

Check it worked. You are logged in, the sidebar shows Albums and Artists, and albums appear as the scan runs. Open one and press play. You can listen before the scan ends.

Tip: An empty library after the scan is almost always a permissions problem. The log says permission denied. See Troubleshooting.

Step 4: Connect a Subsonic app#

Any Subsonic or OpenSubsonic app can connect: add a server with the address, your username and your password. First find the address of the machine that runs Docker.

Linux#

Run in terminalbash
hostname -I

Use the first address: http://<that-address>:4533.

Windows (PowerShell)#

Codepowershell
Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.IPAddress -notlike '169.254*' -and $_.IPAddress -ne '127.0.0.1' } | Select-Object IPAddress, InterfaceAlias

Windows Defender Firewall may block other devices; the Navidrome docs name this for Windows installs. To allow your private network only, run this as administrator:

Codepowershell
New-NetFirewallRule -DisplayName "Navidrome" -Direction Inbound -Protocol TCP -LocalPort 4533 -Action Allow -Profile Private

Mac (Terminal)#

Run in terminalbash
ipconfig getifaddr en0

en0 is usually Wi-Fi on a laptop; if it prints nothing, try en1.

These apps are on the project's apps page (read 5 November 2026). We did not test them.

AppRuns onWhat the listing says
SubstreameriOS and AndroidFree, open source, offline downloads
SymfoniumAndroidFree trial, Android Auto
FeishinDesktop (MPV or web player backend)Smart playlist editor for Navidrome, lyrics
SupersonicDesktopLightweight, MPV playback, equalizer

Check it worked. The app loads your albums and plays a track. If it cannot connect, check the address, the port and the firewall, in that order.

Tip: Make a non-admin user for each person or app (Settings > Users in the web page), or use docker compose run --rm navidrome user create --username <name>.

Step 5: Listen away from home with a VPN#

Do not open port 4533 on your router. The docs ask for a reverse proxy with HTTPS if Navidrome faces the internet. A VPN is simpler: your phone joins your home network and Navidrome never faces the internet.

The VPN steps are in those guides. The only Navidrome part is the address: with the VPN on, use the home address from Step 4 in your app. Test from a laptop with the VPN on:

Linux#

Run in terminalbash
curl -s -o /dev/null -w "%{http_code}\n" http://<home-address>:4533/ping

Windows (PowerShell)#

Run in terminalpowershell
curl.exe -s -o NUL -w "%{http_code}\n" http://<home-address>:4533/ping

Mac (Terminal)#

Same command as Linux.

Check it worked. The test prints 200. On your phone with Wi-Fi off and the VPN on, the app plays a track. With the VPN off it cannot connect. That is correct: nothing is open to the internet.

Tip: Lossless files use a lot of mobile data. Navidrome can transcode on the fly, set per user or per player. Choose a lower quality in your app for the road.

Put it behind HTTPS (with or without Traefik)#

This part is optional. Use it for https://music.<your-domain>. It needs a domain with a DNS record to the server. Local-only users can skip it.

With Traefik#

On a server that already runs Traefik v3 with the Docker provider, add labels and drop the host port.

This assumes an external Docker network called proxy and an entrypoint called https; use your own names. Create the network once:

Run in terminalbash
docker network create proxy

Replace docker-compose.yml with this file (Step 2's settings plus labels and the network):

File contentyaml
services:
  navidrome:
    image: navidrome/navidrome:0.64.2
    container_name: navidrome
    restart: unless-stopped
    user: "${APP_UID}:${APP_GID}"
    environment:
      ND_ENABLEINSIGHTSCOLLECTOR: "false"
      ND_BACKUP_PATH: /backup
      ND_BACKUP_SCHEDULE: "0 3 * * *"
      ND_BACKUP_COUNT: "7"
    volumes:
      - "./data:/data"
      - "./backups:/backup"
      - "${MUSIC_DIR}:/music:ro"
    networks:
      - proxy
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.navidrome.rule=Host(`music.<your-domain>`)"
      - "traefik.http.routers.navidrome.entrypoints=https"
      - "traefik.http.routers.navidrome.tls=true"
      - "traefik.http.services.navidrome.loadbalancer.server.port=4533"

networks:
  proxy:
    external: true

Run docker compose up -d. In your apps, use https://music.<your-domain>. You do not need the BaseUrl setting for a name of its own; it is for a path such as /music.

Check it worked. curl -I https://music.<your-domain>/ returns an HTTP status line over HTTPS and the page opens with a valid certificate.

Without Traefik: Caddy#

Choose this if you have no Traefik. Caddy gets and renews its own certificates.

CaseWhat Caddy does
Public domainGets a Let's Encrypt certificate. Needs a DNS record to the server and ports 80 and 443 open
Home onlytls internal: Caddy signs its own certificate; you trust its root once per device

Caddy reaches Navidrome by container name on the shared proxy network, so Navidrome needs no host port. Use the Traefik file above without its labels: lines. Then create Caddy; we mount the folder conf, not a single file, as Caddy's Docker docs advise:

Run in terminalbash
docker network create proxy
mkdir -p ~/docker_volumes/caddy/{conf,data,config}
cd ~/docker_volumes/caddy

On Windows PowerShell use New-Item -ItemType Directory -Force "$HOME\docker_volumes\caddy\conf","$HOME\docker_volumes\caddy\data","$HOME\docker_volumes\caddy\config". Save as docker-compose.yml there (caddy:2.11.8 was the newest image tag on Docker Hub on 5 November 2026):

File contentyaml
services:
  caddy:
    image: caddy:2.11.8
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80/tcp"
      - "443:443/tcp"
      - "443:443/udp"
    volumes:
      - ./conf:/etc/caddy
      - ./data:/data
      - ./config:/config
    networks:
      - proxy

networks:
  proxy:
    external: true

Save as conf/Caddyfile. For a public domain:

File contenttext
music.example.com {
    reverse_proxy navidrome:4533
}

For a home-only name:

File contenttext
music.home.arpa {
    tls internal
    reverse_proxy navidrome:4533
}

Start both stacks with docker compose up -d in ~/docker_volumes/caddy and ~/docker_volumes/navidrome. For tls internal, trust Caddy's root certificate on each device; Caddy as a reverse proxy has the Linux, Windows and Mac commands.

Check it worked. curl -I https://music.example.com/ returns an HTTP status line over HTTPS. For a home-only name the browser shows a padlock once the root is trusted.

Tip: A certificate error usually means the Caddyfile name differs from the DNS record, or ports 80 and 443 do not reach Caddy.

Security and testing#

Navidrome is a login page that holds your listening history. These controls matter most.

ControlHow
Normal useruser: in Compose. The docs say you should NOT run Navidrome as root; EnforceNonRootUser makes it refuse to
Read-only music:ro on the mount; the docs say read access is enough
Not on the internetNo router forward for 4533. VPN (Step 5) or HTTPS through a proxy
Reverse proxyThe docs ask you to "seriously consider" one, with SSL. In Docker, publish no port and let the proxy reach it by name
Login limiterOn by default; it blocks many login tries from one address
Transcoding settingsEditing is off by default because a transcoding command can run programs on your server. Leave ND_ENABLETRANSCODINGCONFIG unset
Secretschmod 600 .env. Backups hold users and play history, so keep them private

Quick tests after each change:

Run in terminalbash
cd ~/docker_volumes/navidrome
docker compose ps
docker compose logs --tail=100 navidrome
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:4533/ping

On Windows run the same lines in PowerShell, with curl.exe for the last one.

What leaves your machine: with the usage report off (Step 2), the docs still list outside integrations that are on by default: Deezer and ListenBrainz lookups (Last.fm needs your own key) and the login screen's background image. ND_ENABLEEXTERNALSERVICES: "false" switches all of them off, the usage report included.

What your library needs#

Navidrome sorts music by tags, not by folder names. The docs say each file should have Title, Artist, Album, Album Artist and Track Number, and all tracks of an album must share the same Album and Album Artist.

You haveWhat happensFix
Untagged filesMissing or split entriesTag them with MusicBrainz Picard or beets (named in the FAQ)
A compilationEach track becomes its own albumSet the compilation tag, or one shared Album Artist
Moved or renamed filesGrey "missing" entries (admins see them)Move or rename first, scan, then change tags

Navidrome has no tag editor, no upload and no folder browsing, on purpose. Copy files in with your normal file tools.

Common mistakes#

These come from the official docs, the FAQ, the issue tracker and common AI assistant answers.

MistakeWhy it happensDo this instead
Data folder owned by another userThe container cannot write there. The docs show the crash: unable to open database file: no such file or directory and a panicsudo chown -R $(id -u):$(id -g) ./data
Music folder not readable by the container userThe page works but the library stays empty; the log says permission denied and, misleadingly, Target folder does not existchmod -R a+rX on the music, or set user: to its owner
Removing user: to hide the errorThe container then runs as root (docs: "do not do this")Fix the folder owner instead
Mounting music read-writeSeems harmless, but Navidrome never needs to write thereEnd the mount with :ro
Opening port 4533 on the router"I want to listen on the road"Use a VPN (Step 5) or HTTPS through a proxy
Nesting librariesIssue #6171: a second library inside /music meant every file was scanned twice and database is locked appearedOne folder per library, no overlap
Host-mounted network shareIssue #3406: when the share dropped, Navidrome treated files as gone and deleted its records, playlists includedMount the share in Docker itself, so the container stops if it is missing
Expecting live updates from SMBIssue #5491: the watcher saw nothing on SMB; the maintainer said not all mount options support itSet ND_SCANNER_SCHEDULE (for example @every 1h) or scan by hand
Untagged or half-tagged filesNavidrome groups by tags onlyFix tags with Picard or beets, then rescan
Upgrading to 0.64 without a backup0.64.0 re-encodes all internal IDs; its release notes say back up firstBack up, read the release notes, then upgrade
Using latestThe docs use it, but you cannot tell what the next pull bringsPin 0.64.2; change it on purpose
AI assistants: adding PUID/PGID or ND_MUSIC_FOLDERThey look right from other apps. The docs say PUID/PGID are ignored; the real name is ND_MUSICFOLDER, already /music in the imageUse user: and the /music mount from this guide
AI assistants: an old image name and a version: lineOlder posts use deluan/navidrome:latest and Compose version:. It still pulls, but the docs now use navidrome/navidromeUse the file in this guide

Tip: Look every setting up on the official configuration options page. Since 0.64.0 Navidrome warns in the log about options it does not know, so a typo shows up there.

Tip: Keep the music mount read-only. Even a bug cannot change or delete your files through it.

Tip: Test with one small folder of albums first. It scans in under a minute, so you learn quickly whether permissions and tags are right.

Troubleshooting#

ProblemSolution
unable to open database file: no such file or directory, then panic: runtime error: invalid memory addressThe data folder is not writable by the container user. sudo chown -R $(id -u):$(id -g) ./data, then docker compose up -d
Library empty, log shows Error starting watcher ... open /music: permission deniedThe container user cannot read the music. sudo chmod -R a+rX <music-folder> or change user:
database is locked after startingA long scan holds the database (issue #6171). Let it finish. 0.64.2 reduces this on slow disks
New albums do not appearNetwork shares may not support the watcher. Set ND_SCANNER_SCHEDULE, or run docker compose run --rm navidrome scan
An app cannot connectCheck the address, the port, then the firewall (Step 4)
Albums are splitCheck the tags. For a full rescan: docker compose run --rm navidrome scan --full
Artwork is missingThe FAQ points to the navidrome artwork commands and an artwork troubleshooting guide
Forgot the admin passwordAnother admin can run docker compose run --rm navidrome user edit --user <name> --set-password (asks in a terminal)
Log shows Resuming interrupted scanNormal after a stop during a scan; let it finish
Log warns about an unknown optionA typo in environment:; 0.64.0 reports these
Mac: disk I/O error a minute or two after loginIssue #5536 (open): a Mac-folder bind mount for /data. A commenter says a Docker volume works

For the Mac error, or a Windows database error in Step 2, use a named volume for the data. Change the volume lines and add a volumes: block:

File contentyaml
    volumes:
      - "navidrome_data:/data"
      - "./backups:/backup"
      - "${MUSIC_DIR}:/music:ro"

volumes:
  navidrome_data:

Then docker compose down and docker compose up -d. The data now lives in Docker's storage, so rely on the nightly backups for copies.

Diagnostics to run first:

Run in terminalbash
cd ~/docker_volumes/navidrome
docker compose ps
docker compose logs --tail=200 navidrome
docker inspect navidrome --format "{{.Config.Image}}"
docker stats navidrome --no-stream

Known bugs (open, November 2026)#

  • Issue #5536: the Mac disk I/O error above. Use a Docker volume.
  • Issue #4338: a non-root container fails with mkdir /data/cache/images: permission denied when a tmpfs or volume for the cache is owned by root. Our suggestion: keep the cache inside ./data.

Updates and backups#

Update. Read the release notes, back up, change the tag in docker-compose.yml, then:

Run in terminalbash
cd ~/docker_volumes/navidrome
docker compose pull
docker compose up -d
docker compose logs --tail=100 navidrome

What to back up. Navidrome's own backup saves only the database (users, play counts, playlists), not your music or config, say the docs. The script below copies the data and backup folders; your music needs your normal backup. For encrypted volume backups see restic with Docker.

Linux#

Run in terminalbash
cd ~/docker_volumes/navidrome
docker compose stop navidrome
mkdir -p archive
tar -czf "archive/navidrome-$(date +%F).tar.gz" data backups .env
chmod 600 archive/navidrome-*.tar.gz
docker compose start navidrome

For 03:00 every day, add a crontab line that runs these commands.

Windows (PowerShell)#

Codepowershell
Set-Location "$HOME\docker_volumes\navidrome"
docker compose stop navidrome
New-Item -ItemType Directory -Force archive | Out-Null
Compress-Archive -Path data,backups,.env -DestinationPath "archive\navidrome-$(Get-Date -Format yyyy-MM-dd).zip" -Force
docker compose start navidrome

For 03:00 daily, save those lines as a .ps1 file and add a Task Scheduler task with a daily trigger and the action powershell.exe -File <path-to-script>.

Mac (Terminal)#

Same commands as Linux; schedule with crontab or a launchd job.

Restore test. Unpack an archive into a new empty folder, never over the live one:

Run in terminalbash
mkdir -p /tmp/navidrome-restore && tar -xzf archive/navidrome-<date>.tar.gz -C /tmp/navidrome-restore
ls /tmp/navidrome-restore/data

To restore a database backup, the docs say stop the server first:

Run in terminalbash
docker compose stop navidrome
docker compose run --rm navidrome backup restore --backup-file navidrome_backup_<date>_<time>.db
docker compose start navidrome

Performance and resources#

The docs give no memory or CPU figures, so we give none. They say Navidrome has "very low resource usage" and runs on a Raspberry Pi Zero. Measure your own machine:

  • Live use: docker stats navidrome shows CPU and memory.
  • Scans: the first scan is the heavy part (table in Step 3). The watcher waits 5 seconds after a change (Scanner.WatcherWait); scheduled scans are off by default.
  • Caches: the image cache is 100 MB by default (ImageCacheSize).
  • Transcoding: the image includes ffmpeg, so converting on the fly (Opus too) needs no install. It uses CPU only when a user or player is set to transcode.

FAQ#

Is Navidrome free to use? Yes, under GPL-3.0. Only the managed hosting providers named in the docs charge, for the hosting.

Does it need a GPU? No. The docs do not mention one.

Can I use my Jellyfin music app? Since 0.64.0 there is an experimental Jellyfin API, off by default (ND_JELLYFIN_ENABLED=true). The docs name Finamp, Jellify and Feishin as tested. For video as well, see our Jellyfin guide.

Can I run it on Windows or macOS without Docker? Yes: the docs describe a Windows MSI installer and a macOS binary with a navidrome service command.

Does it send data to the project? By default it sends an anonymous usage report (no emails, IP addresses or usernames, says the docs). Our Compose file turns it off.

Sources#

Checked against the official docs on 2026-11-05.