mrkeyoor.com_
Wed 16 Sept 05:29 UTC
Self-Hostedevaluationupdated 26 Aug 2026

navidrome review

Navidrome is a self-hosted music server that turns your own audio files into a browser and mobile streaming library. It scans tags, keeps per-user favorites and playlists, transcodes when needed, and works with many Subsonic-compatible clients.

+184stars / 7d
Verdict

Our Navidrome build finished in 93 seconds, but 11 of 77 Go test packages failed, so commit fc9d93d is not a clean contributor baseline in our sandbox. For streaming a well-tagged personal music library, the release build remains the focused choice: lighter in scope than Jellyfin and far friendlier to mobile apps than a browser-only server. Use a tagged release, mount music read-only, and prove scanning, transcoding, and backup restoration with your own collection.

We ran it

Lab card: what happened when we ran navidromeScreenshot of navidrome (www.navidrome.org)
Install✓ · 86s240 packages
Build✓ · 93s
Tests✗ · 74s66 passed · 11 failed of 77 (go test)
Repo2114 files~264,877 lines of source · 18.8 MB · 5 CI workflows · Dockerfile · tests dir

Answers from our run

Does navidrome build from source?

Dependencies installed in 86 seconds (240 packages), and the build succeeded in 93 seconds. We cloned commit fc9d93d into a clean Debian container with 3 CPUs and no project-specific setup.

Do navidrome's tests pass?

Not all of them: 66 of 77 passed and 11 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use navidrome?

Listeners expecting Spotify's licensed catalog: Navidrome streams the music files you supply.

What are the alternatives to navidrome?

Jellyfin, Koel, Ampache. Our Navidrome build finished in 93 seconds, but 11 of 77 Go test packages failed, so commit fc9d93d is not a clean contributor baseline in our sandbox.

Setup4/5Clear binaries and container, with storage permissions to get right
Docs5/5Detailed install, configuration, client, security, and backup guides
Community5/523,119 stars, same-day pushes, current releases, and active PRs
Maturity4/5Established music server, held back here by 11 failing packages

Discussed on

  1. hnNavidrome: Open-Source Software to enjoy your music collection from anywhere73 points
  2. hnNavidrome: Self-Hostable Music Server4 points
  3. hnNavidrome Music Server3 points
  4. hnNavidrome – Subsonic-compatible music server and streamer3 points

Who it’s for

Music collectors who own files and want remote listening without a subscription catalog.
Households that need separate users, favorites, play counts, and playlists.
Self-hosters who want a web player plus a broad choice of Subsonic mobile clients.
Raspberry Pi, Linux, macOS, Windows, Docker, or Podman users willing to manage storage and backups.

Who it’s NOT for

Listeners expecting Spotify's licensed catalog: Navidrome streams the music files you supply.
People with a poorly tagged library who expect folder names to fix everything: the README makes curated metadata central to browsing and compilations.
Operators who want to deploy the master branch directly: the README warns it may be unstable or broken and tells users to install releases.
Users requiring deletion scans to be flawless without verification: issue #5109 reports deleted files not being recognized as missing.
Anyone assuming every Subsonic client feature maps perfectly: issue #6034 describes queue entries losing lyrics when sourced through Subsonic records.
Teams seeking one server for music, films, and television: Navidrome is specifically a music collection server.

Setup reality

Our sandbox installed 240 packages in 86 seconds and built Navidrome in 93 seconds. Tests exited 1 after 74 seconds: 66 Go packages passed and 11 failed out of 77. The log tail shows several utility packages passing, then only the final FAIL, so it does not reveal the cause.

The supported user path is a release binary or container, not the master checkout. Docker needs a writable /data mount for the database and cache, a readable /music mount, matching UID and GID permissions, and port 4533. The first web session creates the administrator.

Transcoding needs suitable codecs and CPU capacity, while external access needs HTTPS and normal reverse-proxy care. Back up the data directory as well as the music library. Our checkout had 2,114 files, about 264,877 source lines, 5 CI workflows, a Dockerfile, and a tests directory.

Navidrome serves your files, not a music catalog

Navidrome turns a music directory into a private streaming service. It scans audio metadata, builds a web library, watches for file changes, and gives each user separate favorites, playlists, and play counts. Playback works in the responsive browser interface or through compatible Subsonic, Madsonic, and Airsonic clients. On-demand transcoding can adapt formats for a particular user or player, including Opus output.

The ownership model is the main reason to choose it. You provide every audio file and keep the server. There is no licensed streaming catalog hiding behind the interface, and no promise that a subscription service's recommendations or social graph will appear. In return, a release can run on Linux, macOS, Windows, Raspberry Pi, or Docker and keep a collection available across devices.

Metadata quality determines how pleasant that collection feels. Navidrome reads tags and specifically supports compilations, box sets, embedded or sidecar lyrics, artwork, and multi-user state. A folder full of inconsistent artist names and disc numbers will still need cleanup. The server removes the need to copy files onto every phone; it does not replace a tag editor or decide which edition of an album you own.

Port 4533 needs 2 correctly permissioned mounts

The official Docker example exposes port 4533 and mounts /data plus /music. The data directory must be writable because it holds the database and cache. The music directory needs read access and can be mounted read-only, which is the safer default. The documented container user must match a UID and GID that can satisfy both requirements. Wrong data permissions stop startup, while wrong music permissions can leave a working web page with an empty library.

That distinction makes setup easier to diagnose than many home servers. Keep the database and cache on persistent storage, point the music mount at the real collection, and create the first administrator through the browser. Configuration can come from environment variables or a TOML file in the data directory. Remote use still calls for HTTPS, careful proxy headers, strong user passwords, and tested backups.

Transcoding is the variable cost. Direct play asks little of the server, but converting an incompatible or bandwidth-heavy file consumes CPU and depends on available codecs. Set formats per user or player only after testing a representative lossless album, a phone on mobile data, and concurrent playback. The README claims low resource use but publishes no number there, so capacity should come from your hardware and library rather than a slogan.

What happened when we ran it

Our run at commit fc9d93d installed 240 Go packages in 86 seconds and completed the build in 93 seconds. The checkout contained 2,114 files, about 264,877 lines of source, and occupied 18.8 MB. It included 5 CI workflow files, a Dockerfile, and a tests directory, all useful signals for a project intended to ship server releases and images.

The test command exited with status 1 after 74 seconds. Sixty-six Go packages passed and 11 failed out of 77. The supplied log tail lists successful utility packages such as natural, number, shellquote, singleton, and str, followed by a bare final FAIL. It does not name the 11 failed packages or show an error message, so we cannot responsibly explain the failure from that excerpt.

Our result concerns the repository at fc9d93d in a fresh 3-CPU, 8 GB Debian container. It does not prove that release v0.63.2 fails, and the README explicitly tells users that master may be unstable or broken. End users should choose a release image or binary. Contributors should reproduce the 11 failures, collect the complete output, and avoid treating a successful compile as a clean baseline.

Scanner and Subsonic edges deserve a real-library trial

Open issue #5109 reports that deleted files were not recognized as missing during scanning. It is marked stale and should not be generalized to every installation, yet the workflow matters enough to test. Copy a small album into a staging library, scan it, remove and rename tracks, then confirm that the database and artwork views match the disk after another scan.

Client compatibility also has edges. Issue #6034 describes artist play, radio, and instant-mix queues without lyrics because records originating through the Subsonic path lack a lyrics field. Navidrome's protocol support is a major advantage, though compatibility is not identity. If a particular mobile app and feature matter, test that pair rather than assuming the web player proves it.

Release v0.63.2 fixed symlink resolution in the production scanner, surfaced host-service failures while loading plugins, rejected an invalid smart-playlist structure, and added CI validation for database migration order. Those changes are operationally relevant: libraries depend on paths, plugins can fail outside the core server, and database upgrades need ordered migrations. Use backups that you have restored at least once before an upgrade.

The 2026-08-26 push shows an active project

Navidrome v0.63.2 was released on 2026-07-11, and the repository was pushed on 2026-08-26. GitHub listed 273 open issues and pull requests together. Recent work covered dependency updates, lyrics request handling, translations, scrobbler backoff, themes, lossless audio details, and server error handling. That mix looks like active product maintenance rather than release-only housekeeping.

The GPL-3.0 project has 23,119 stars and a dedicated documentation site covering binaries, containers, configuration, security, backups, clients, and development. Managed hosting is offered for people who want the application without server upkeep. Self-hosting is still the reason to choose Navidrome, so paying someone else to run it only makes sense when data placement and maintenance terms fit your goals.

Navidrome is the cleanest fit here for a music-only household with files worth curating. Our 66-pass, 11-fail test result blocks a spotless source recommendation, but it does not erase the release path or active maintenance. Start with v0.63.2 or newer, keep /music read-only, preserve /data, and test the exact client and transcoding path your listeners will use.

Alternatives

ProjectWhat it isPick it when
Jellyfin gh↗A larger self-hosted media server covering music, films, television, and more clients.pick this instead when one household server must organize video as well as music.
KoelA web-focused personal music streamer built with PHP and a modern browser interface.pick this instead when the browser experience matters more than Subsonic client compatibility.
AmpacheA long-running web music server with broad catalog and client protocol support.pick this instead when you want a PHP stack and deeper library-management history.

What people are saying

  1. [github-trending] navidrome/navidrome

Sources

  1. Navidrome repository README
  2. Navidrome repository facts
  3. Navidrome v0.63.2 release
  4. Navidrome Docker installation guide
  5. Deleted file scanner issue
  6. Subsonic lyrics queue issue

More self-hosted reviews

newsnow · forem · octo-server · runtime · openfang · SparkyFitness · the whole board →