Navidrome¶
What it is¶
Navidrome is a modern self-hosted music server and streamer. It indexes a local music library, serves it through a responsive web UI, and exposes a Subsonic-compatible API for mobile and desktop music clients. As of July 2026, it is the industry standard for lightweight, high-performance music streaming in personal homelabs, featuring deep integration with the Model Context Protocol (MCP) for automated library curation.
What problem it solves¶
It turns a folder of owned audio files into a private streaming service. This avoids reliance on commercial music subscriptions, ensures your personal collection remains available offline or over a private VPN (like Tailscale), and provides automation scripts with a stable API for library management, scrobbling, and AI-driven metadata enrichment.
Where it fits in the stack¶
Navidrome belongs in the Media Services layer alongside Jellyfin and Audiobookshelf. In a home-office setup, it is typically deployed behind a reverse proxy (like Authentik for OIDC), backed up to secure storage, and pointed at read-only music datasets to prevent accidental modification of source files.
Typical use cases¶
- Personal Spotify: Streaming a FLAC/MP3 library to browsers, phones, and desktop clients.
- Family Accounts: Maintaining separate favorites, playlists, and playback states for multiple users.
- Low-Resource Streaming: Running a music service on modest hardware (like a Raspberry Pi) where heavier servers fail.
- AI-Powered Discovery: Using Gemma 3 via Ollama to analyze sonic characteristics and generate hyper-personalized playlists via the MCP 3.0 Task Protocol.
Strengths¶
- Small operational footprint: Simple single-binary or single-container deployment with minimal RAM usage.
- Broad Compatibility: Works with dozens of Subsonic-compatible apps (Ample, DSub, Play:Sub).
- Read-only media mounts: Ensures your curated music library remains untouched by the application.
- Native Transcoding: Uses
ffmpegto serve high-quality audio to bandwidth-constrained mobile devices. - MCP 3.0 Integration (2026): Enables autonomous agents to curate playlists and manage metadata based on real-time triggers.
Limitations¶
- Music-focused: It is not designed for video, photo, or live TV libraries (use Jellyfin).
- Metadata-dependent: Requires well-tagged files for a good browsing experience.
- No Native Chapter Support: For audiobooks and podcasts, Audiobookshelf is the preferred choice.
When to use it¶
- When you have a large collection of owned music files and want a private, Spotify-like experience.
- For a lightweight music server that runs efficiently on modest hardware.
- When you want to use third-party mobile apps with a stable, well-documented API.
- To maintain privacy by keeping your listening habits and files on your own hardware.
When not to use it¶
- For general media hosting (video/photos); use Jellyfin or Plex.
- If you require specific audiobook features like chapter-level navigation and narrator metadata; use Audiobookshelf.
- If you strictly stream from commercial services and do not own physical or digital music files.
Getting started¶
Docker Compose¶
Create a data directory and point the music mount at your local music folder:
services:
navidrome:
image: ghcr.io/navidrome/navidrome:latest
container_name: navidrome
user: "1000:1000"
ports:
- "4533:4533"
restart: unless-stopped
environment:
ND_SCANSCHEDULE: "1h"
ND_LOGLEVEL: "info"
ND_SESSIONTIMEOUT: "24h"
volumes:
- ./navidrome-data:/data
- ./music:/music:ro
Open http://localhost:4533, create the first admin user, and the initial library scan will begin.
Troubleshooting Tip¶
If the UI starts but no albums appear, verify Linux permissions with ls -n ./music and make the Compose user match the folder owner. Ensure ffmpeg is accessible for transcoding if using bandwidth-limited clients.
CLI examples¶
# Follow startup and scan logs for the container
docker logs -f navidrome
# Confirm the web UI is listening on the default port
curl -I http://localhost:4533
# Check that the container can see mounted music files
docker exec navidrome find /music -maxdepth 2 -type f | head
API examples¶
Navidrome supports the Subsonic API. A basic ping request verifies authentication:
curl "http://localhost:4533/rest/ping.view?u=USER&p=PASS&v=1.16.1&c=home-office&f=json"
Automated Playlist Management (Python + MCP 3.0)¶
This pattern is useful for agents curating music based on external triggers via n8n.
import requests
import hashlib
import secrets
BASE_URL = "http://localhost:4533/rest"
USER = "admin"
PASS = "password"
def get_auth():
salt = secrets.token_hex(6)
token = hashlib.md5(f"{PASS}{salt}".encode()).hexdigest()
return {"u": USER, "t": token, "s": salt, "v": "1.16.1", "c": "mcp-agent", "f": "json"}
# Example: Search for Jazz tracks for an MCP-driven morning routine
params = get_auth()
params["query"] = "genre:Jazz"
res = requests.get(f"{BASE_URL}/search3.view", params=params)
songs = res.json().get("subsonic-response", {}).get("searchResult3", {}).get("song", [])
print(f"Found {len(songs)} Jazz tracks.")
Related tools / concepts¶
- Audiobookshelf — For specialized audiobook and podcast management.
- Jellyfin — For video and photo media libraries.
- Plex — Proprietary alternative for general media hosting.
- Tailscale — For secure remote access to your music server.
- n8n — For automating library updates and scrobbling notifications.
- Ollama — For AI-powered sonic analysis via Gemma 3.
- Homebox — For inventory management of physical media collections.
- Authentik — For managing multi-user access via OIDC.
Sources / references¶
- Official Website
- GitHub Repository
- Navidrome Documentation
- Subsonic API Specification
- MCP 3.0 Task Protocol
Contribution Metadata¶
- Last reviewed: 2026-07-21
- Confidence: high