After a few years of streaming, I realized my favorite tracks kept changing catalogs or disappearing. Navidrome fixes that: a small server that exposes my own library of files through the Subsonic API, reachable from any compatible app.

Installing with Docker Compose

services:
  navidrome:
    image: deluan/navidrome:latest
    restart: unless-stopped
    ports:
      - '4533:4533'
    environment:
      ND_SCANSCHEDULE: 1h
      ND_LOGLEVEL: info
      ND_SESSIONTIMEOUT: 24h
    volumes:
      - ./data:/data
      - /srv/music:/music:ro

The music folder is mounted read-only: Navidrome has no reason to modify your files.

What to prepare first

Item Recommendation
Format FLAC for the archive, MP3 320 or Opus for mobile
Tags Well filled in (artist, album, year, cover art)
Folder layout Artist/Album/01 - Title.flac

Client apps

  • On mobile: Symfonium (Android), Substreamer (iOS and Android)
  • On desktop: the built-in web interface is enough
  • In the car: any Subsonic client through Android Auto

Tip: good tagging is 90% of the experience. A tool like MusicBrainz Picard fixes metadata in bulk before the import.

Security

Don't expose it directly: go through a reverse proxy with HTTPS, or keep it behind a VPN such as WireGuard or Tailscale. An admin account with a weak password on a service open to the internet is an invitation.

  • Library scanned
  • Reverse proxy with HTTPS
  • Regular backup of the data folder, which holds playlists and favorites

The result is simple: my music belongs to me, it doesn't disappear, and I listen to it wherever I want.