|
Some checks failed
CI / ci (push) Has been cancelled
Desktop Release / Build desktop (aarch64-apple-darwin) (push) Has been cancelled
Desktop Release / Build desktop (x86_64-apple-darwin) (push) Has been cancelled
Desktop Release / Publish Gitea release (push) Has been cancelled
Desktop Release / Update Homebrew tap (push) Has been cancelled
- Change the bundle identifier to com.quineglobal.drome (Tauri config, Flatpak manifest/metainfo, Linux build, Justfile, READMEs). On first launch the app moves the old com.quintodrome.desktop data folder over so existing users keep their library. - Ad-hoc sign macOS builds (signingIdentity "-") so the whole bundle is signed; the linker-only signature made Gatekeeper report the app as "damaged". - Forgejo desktop workflow: cross-compile the Intel build on the Mac runner, drop Windows (no runner), create releases on the pushed tag instead of a "v"-less copy, fail on upload errors, and update the Quine/homebrew-quintodrome cask after each release. - Add Flatpak AppStream metainfo and a 512px icon, and document the macOS "damaged" workaround in the README and GitHub release notes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .dagger | ||
| .devcontainer | ||
| .gitea/workflows | ||
| .github | ||
| adapters | ||
| cmd | ||
| conf | ||
| consts | ||
| contrib | ||
| core | ||
| db | ||
| desktop | ||
| git | ||
| log | ||
| model | ||
| persistence | ||
| plugins | ||
| release | ||
| resources | ||
| scanner | ||
| scheduler | ||
| scripts | ||
| server | ||
| tests | ||
| ui | ||
| utils | ||
| .dockerignore | ||
| .git-blame-ignore-revs | ||
| .gitignore | ||
| .golangci.yml | ||
| .nvmrc | ||
| CODE_OF_CONDUCT.md | ||
| context7.json | ||
| CONTRIBUTING.md | ||
| dagger.json | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| Justfile | ||
| LICENSE | ||
| main.go | ||
| Makefile | ||
| Procfile.dev | ||
| README.md | ||
| reflex.conf | ||
| screenshot.png | ||
Quintodrome
A Tauri desktop app that wraps Navidrome — your self-hosted music server — into a native macOS/Windows application.
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:4533origin is shown ashttp://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.
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
.github/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.