Navidrome is a self-hosted music streaming server that gives you full control over your digital music collection, eliminating the need for paid subscription services like Spotify or Apple Music. It indexes your local music files and makes them accessible via a responsive web UI and third-party mobile clients, ideal for users who want privacy, customization, and no recurring fees.
Built in Go, Navidrome is lightweight and runs efficiently on low-resource hardware like Raspberry Pi. It supports Docker, binaries for all major OSes, and implements the Subsonic API standard, enabling compatibility with hundreds of existing music clients. The server automatically monitors your library for changes and supports multi-user access with individual preferences.
What You Get
- Subsonic API Compatibility - Fully supports the Subsonic/Madsonic/Airsonic API, enabling seamless integration with over 50+ mobile and desktop clients like DSub, Sonos, and others.
- Multi-user Support - Each user has independent playlists, play counts, favorites, and library access controls, perfect for families or shared households.
- On-the-Fly Transcoding - Dynamically converts audio formats (e.g., FLAC to Opus) based on client requirements, reducing bandwidth usage without storing derivative files.
- Large Library Handling - Proven to handle music collections of up to 900,000 tracks with mixed formats (FLAC, MP3, etc.) without performance degradation.
- Automatic Library Monitoring - Continuously scans your music directory for new files, metadata changes, or deletions and updates the library in real time.
- Themeable Web Interface - Modern, responsive UI built with Material UI, customizable via themes and optimized for both desktop and mobile browsing.
Common Use Cases
- Running a home music server - A family uses Navidrome to centralize their combined music libraries on a Raspberry Pi, allowing each member to stream their favorite tracks via mobile apps without cloud subscriptions.
- Streaming high-quality audio on limited bandwidth - A traveler uses Navidrome’s transcoding to convert lossless FLAC files to Opus on-the-fly, reducing data usage while maintaining acceptable audio quality on mobile networks.
- Managing a personal archive of rare recordings - A music collector hosts their 500GB FLAC collection on a NAS, using Navidrome to browse, rate, and play rare albums through a web browser without relying on commercial platforms.
- Deploying a private music service for a small business - A café owner installs Navidrome on a low-cost server to stream curated playlists to customers via tablets, with separate libraries for background music and staff favorites.
Under The Hood
Architecture
- Clear separation of concerns through modular packages handling CLI, business logic, data access, HTTP routing, and external integrations
- Dependency injection via constructor-based service initialization with interfaces enabling testability and pluggable implementations
- Event-driven background services orchestrated with context cancellation for graceful shutdowns
- Layered HTTP routing with distinct API endpoints decoupled by protocol (Native, Subsonic, Prometheus)
- Media processing abstracted via FFmpeg and TagLib wrappers with strategy patterns for artwork and transcoding
Tech Stack
- Go backend with CGO-enabled cross-compilation and SQLite + FTS5 for efficient metadata querying
- Docker multi-stage builds using Alpine Linux for lightweight, multi-arch deployments
- Node.js frontend with Vite and npm, bundled into the final binary for seamless user experience
- Comprehensive static analysis via golangci-lint with security and code quality rules
- Makefile-driven development workflow with hot-reload support for integrated backend and frontend iteration
Code Quality
- Extensive test coverage with Ginkgo/Gomega for unit and integration testing across core features
- Clean interfaces and dependency injection promoting modularity and testability
- Robust error handling with typed errors and contextual propagation, avoiding generic strings
- Strong type safety enforced across Go and TypeScript layers with consistent naming and idiomatic structure
- Automated linting and testing pipelines ensuring code standards and reliability
What Makes It Unique
- Pluggable metadata extractors allow seamless integration of custom tag libraries without core modifications
- Dynamic MPV command templating with shellquote parsing enables precise, flexible playback control
- Advanced animated image detection using low-level binary parsing, eliminating external dependencies
- Unified metadata enrichment system with intelligent caching and background refresh queues
- Built-in ZIP archiving with intelligent album/playlist structuring and metadata-preserving transcoding
- Service management integration with automatic systemd configuration and graceful shutdown for true self-hosted appliance behavior