[PREVIEW] Music player desktop app (Spotify alternative, Navidrome desktop app) (Forked from https://github.com/navidrome/navidrome)
Find a file
Philip Peterson 671c5e6fae
All checks were successful
CI / ci (push) Successful in 4m1s
README: trust the tap before installing
Current Homebrew refuses to load casks from untrusted third-party taps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 07:35:36 -08:00
.dagger Commit the Dagger module's go.mod and pin OpenTelemetry to v1.43.0 2026-10-10 21:53:28 -08:00
.devcontainer chore(deps): upgrade Go to 1.26 (#5361) 2026-04-14 19:31:01 -04:00
.gitea/workflows Use the public Forgejo URL in the Homebrew cask 2026-10-11 07:21:10 -08:00
.github Run workflows on main instead of master 2026-10-10 20:37:47 -08:00
adapters fix(lastfm): require signed state token on link callback (#5521) 2026-05-23 12:16:15 -03:00
cmd chore: go fix 2026-05-28 22:13:05 -03:00
conf fix(conf): make Dir a plain value type to prevent sync.Once corruption (#5543) 2026-05-27 23:18:35 -03:00
consts fix(transcoding): place -ss before -i for fast input seeking (#5492) 2026-05-13 17:17:20 -03:00
contrib build: add packages for deb and rpm to release (#3202) 2024-10-26 13:31:45 -04:00
core Quintodrome 2026-09-02 23:41:24 -08:00
db Quintodrome 2026-09-02 23:41:24 -08:00
desktop Rename to com.quineglobal.drome and publish a Homebrew tap from Forgejo 2026-09-26 21:50:54 -08:00
git feat(plugins): experimental support for plugins (#3998) 2025-06-22 20:45:38 -04:00
log chore: go fix 2026-05-28 22:13:05 -03:00
model fix(smartplaylist): support isMissing/isPresent operators on ReplayGain fields (#5585) 2026-06-10 21:12:31 -04:00
persistence fix(smartplaylist): support isMissing/isPresent operators on ReplayGain fields (#5585) 2026-06-10 21:12:31 -04:00
plugins chore: go fix 2026-05-28 22:13:05 -03:00
release Fix goreleaser release body exceeding GitHub's 125000-char limit 2026-09-24 15:25:09 -08:00
resources fix(ui): update Indonesian translations from POEditor (#5575) 2026-06-08 08:22:59 -04:00
scanner refactor: more warnings clean up 2026-05-20 17:43:12 -03:00
scheduler chore: go fix 2026-05-28 22:13:05 -03:00
scripts build(worktree): add script for setting up git worktrees 2026-03-17 21:34:00 -04:00
server fix(transcode): log warning for invalid or stale transcode tokens 2026-06-06 11:00:27 -04:00
tests refactor: multiple syntax updates for Go 1.26 2026-05-19 18:02:36 -03:00
ui fix(ui): Fix Nautiline theme font and width on mobile devices (#5590) 2026-06-10 16:47:54 -04:00
utils test: fix flaky tests in utils/cache (#5567) 2026-06-05 18:06:52 -04:00
.dockerignore fix: add music.old to .dockerignore and .gitignore 2026-02-06 07:40:05 -05:00
.git-blame-ignore-revs Move project to Navidrome GitHub organization 2021-02-06 21:47:19 -05:00
.gitignore Add build actions 2026-09-24 04:21:55 -08:00
.golangci.yml chore(ui): regenerate package-lock.json to have integrity fields (#5276) 2026-04-05 11:37:50 -04:00
.nvmrc chore(deps): update all dependencies (#4618) 2025-10-25 17:05:16 -04:00
CODE_OF_CONDUCT.md Use Contributor Covenant v2.0 2020-07-21 14:40:21 -04:00
context7.json Add context7.json with URL and public key 2026-04-14 19:19:42 -04:00
CONTRIBUTING.md docs: update commit message format in CONTRIBUTING.md 2026-02-20 11:00:34 -05:00
dagger.json Quintodrome 2026-09-02 23:41:24 -08:00
Dockerfile Quintodrome 2026-09-02 23:41:24 -08:00
go.mod chore(deps): update dependencies to latest versions in go.mod and go.sum 2026-05-28 20:15:40 -03:00
go.sum chore(deps): update dependencies to latest versions in go.mod and go.sum 2026-05-28 20:15:40 -03:00
Justfile Rename to com.quineglobal.drome and publish a Homebrew tap from Forgejo 2026-09-26 21:50:54 -08:00
LICENSE Change license to GPLv3 2020-01-22 14:48:38 -05:00
main.go feat(server): implement FTS5-based full-text search (#5079) 2026-02-21 17:52:42 -05:00
Makefile chore(lint): upgrade golangci-lint, fix/ignore new errors 2026-05-01 14:22:51 -04:00
Procfile.dev chore(deps): upgrade to Go 1.24.1 (#3851) 2025-03-17 21:08:10 -04:00
README.md README: trust the tap before installing 2026-10-11 07:35:36 -08:00
reflex.conf feat(server): implement FTS5-based full-text search (#5079) 2026-02-21 17:52:42 -05:00
screenshot.png Add files via upload 2026-09-23 01:16:23 -08:00

Quintodrome logo

Quintodrome

A Tauri desktop app that wraps Navidrome — your self-hosted music server — into a native macOS/Windows application.

Screenshot of Quintodrome music player

The server is bundled as a sidecar binary and managed automatically, so there's nothing to install, configure, or keep running: launch the app and it starts (and later shuts down) its own Navidrome instance for you.

This repository is a fork of Navidrome. Everything outside desktop/ is the upstream server + web UI; desktop/ is the Quintodrome wrapper around it.

What it does

Batteries included:

  • Auto-provisioning — on a fresh install the app creates the initial admin user (admin / admin) and logs in as it automatically, skipping both the "create an admin user" and login screens.
  • Opted-out telemetry — Navidrome's insights collector is disabled by default.
  • Masked address bar — the internal 127.0.0.1:4533 origin is shown as http://quintodrome.
  • External links (Last.fm, artist pages, …) open in your default browser.
  • Native editing shortcuts — Cmd+X/C/V/A/Z work in the web UI.
  • Swipe navigation — two-finger swipe back/forward on macOS.

Install

On macOS, with Homebrew:

brew tap quine/tap https://forge.quinefoundation.com/quine-global/homebrew-tap.git
brew trust quine/tap
brew install --cask quintodrome

The tap URL is required: without one, brew tap assumes a GitHub repo. Homebrew refuses to load casks from a tap you haven't trusted, hence brew trust. Update with brew upgrade --cask quintodrome.

Or download the .dmg from the releases page (see below if macOS refuses to open it).

Quick start

# one-time: Node >= 24 (see .nvmrc), Go >= 1.26, Rust
just run

just run builds the Navidrome sidecar and launches the app. No just? See the desktop README for the plain commands, or install it with brew install just.

To wipe Navidrome's persistent state (database, cache) and start fresh:

just clean-state

Building a distributable

just bundle          # or: ./desktop/scripts/build.sh

This produces the platform's packaged app under desktop/src-tauri/target/release/bundle/ (e.g. macos/Quintodrome.app on macOS). Cross-platform binaries are built in CI — see .gitea/workflows/desktop.yml, which produces .app/.dmg on macOS and .exe/.msi on Windows for tagged releases.

Artifacts are unsigned (no Apple/Windows code-signing certs), so users will see Gatekeeper/SmartScreen prompts.

macOS: "Quintodrome is damaged and can't be opened"

Because the app isn't signed with an Apple Developer ID, macOS blocks downloaded copies. After moving the app to /Applications, run:

xattr -dr com.apple.quarantine /Applications/Quintodrome.app
codesign --force --deep -s - /Applications/Quintodrome.app

The Homebrew cask strips the quarantine flag automatically on install.

Configuration

Environment variables override the defaults:

Variable Default Purpose
QUINTODROME_HOST 127.0.0.1 Address the webview connects to
QUINTODROME_PORT 4533 Port for the Navidrome server
QUINTODROME_MUSIC_FOLDER OS music dir (e.g. ~/Music) Where your music lives
QUINTODROME_ADMIN_PASSWORD admin Password for the auto-created admin user (fresh installs only)
QUINTODROME_PUBLIC_URL http://quintodrome Friendly origin shown in the address bar

The data folder (database, cache) is always the OS app-data directory (e.g. ~/Library/Application Support/com.quineglobal.drome on macOS).

Repository layout

.
├── desktop/          # Quintodrome: the Tauri wrapper (Rust + toolbar HTML)
│   ├── src-tauri/    #   sidecar spawn/health-check, lifecycle, menu, clipboard
│   ├── src/          #   toolbar.html (nav bar) + index.html (splash)
│   └── scripts/      #   build.sh, icon generator
├── ui/               # Navidrome web UI (React)
├── server/           # Navidrome HTTP server
├── core/             # Navidrome core (scanning, transcoding, …)
├── cmd/              # Navidrome entrypoint / CLI
└── Justfile          # run / bundle / sidecar / clean-state

For the details of building and running the desktop app directly, see desktop/README.md.

Development

Prerequisites:

  • Rust (stable)
  • Node.js ≥ 24 (pinned in .nvmrc)
  • Go ≥ 1.26 (for building the Navidrome binary)

The Navidrome server is built with make build; the wrapper stages it as desktop/src-tauri/binaries/navidrome-<target-triple> and bundles it as a Tauri sidecar. See desktop/scripts/build.sh.

Acknowledgements

Quintodrome is built on Navidrome, an open-source web-based music collection server and streamer. All credit for the music server and web UI goes to the Navidrome project.