Bundle a managed, loopback-only Navidrome sidecar with verified release preparation, native source setup, lifecycle controls, licensing, and a polished charcoal/onyx visual system

Hop-State: A_06FNDXP543RHZ4436GTD01G
Hop-Proposal: R_06FNDXNBVJNF9Q2KMKT0ASR
Hop-Task: T_06FNDRZ9CM02JWJ98SRNFNR
Hop-Attempt: AT_06FNDRZ9CNGSWJSFVV54DR8
This commit is contained in:
2026-07-12 08:34:00 -07:00
committed by Hop
parent 38b140905f
commit ed99fc7f09
22 changed files with 1661 additions and 114 deletions
+27 -6
View File
@@ -2,7 +2,7 @@
Your library, wherever you listen.
Resonant is a desktop-first music player for personal, self-hosted collections. It connects directly to Navidrome and other OpenSubsonic-compatible servers while keeping the listening experience calm, immediate, and separate from server administration.
Resonant is a desktop-first music player for personal collections. The desktop app can privately serve a folder on this computer through its bundled Navidrome engine, or connect directly to an existing Navidrome or OpenSubsonic-compatible server.
## What works in v0.1
@@ -10,6 +10,9 @@ Resonant is a desktop-first music player for personal, self-hosted collections.
- Functional playback controls with seek, volume, previous, and next actions
- An offline demo library with locally synthesized audio, so the app is useful immediately after cloning
- OpenSubsonic token authentication, connection testing, album loading, random-track loading, artwork, and streaming URLs
- A managed Navidrome 0.61.2 sidecar bound to `127.0.0.1`, with native folder selection, first-user setup, process lifecycle control, and app-private server data
- Official release download and SHA-256 verification for Apple Silicon/Intel macOS, x64/ARM64 Linux, and x64 Windows desktop builds
- A charcoal and onyx interface with coral reserved for active state and primary action
- A Tauri 2 desktop shell for macOS, Windows, and Linux development
- Keyboard-visible controls, reduced-motion support, semantic labels, and a WCAG 2.2 AA target
@@ -24,21 +27,28 @@ npm install
npm run dev
```
To run the desktop shell:
To run the desktop shell with the bundled server:
```sh
npm run tauri dev
npm run desktop:dev
```
The first desktop run downloads the pinned official Navidrome binary for the current Rust target, verifies its release digest, and places it in Tauri's ignored sidecar build directory. The binary is bundled into packaged apps, not committed to this repository.
To validate the full project:
```sh
npm run check
```
## Connect a server
## Choose a library source
Open the server control in the lower-left corner, then enter the URL and credentials for a Navidrome or OpenSubsonic server. Browser development requires the server to allow the development origin. The Tauri networking layer will replace browser fetch before packaged distribution so remote libraries do not depend on browser CORS policy.
Open the library control in the lower-left corner.
- **This computer:** choose a music folder and a local password. Resonant starts its bundled Navidrome process on `127.0.0.1:4533`, stores the Navidrome database under the app data directory, and stops it when Resonant closes.
- **Existing server:** enter the URL and credentials for a Navidrome or OpenSubsonic server you already run.
The local password and remote server password are held only in memory. Browser development can preview the interface and connect to servers that allow the development origin, but native folder selection and the managed server require the Tauri desktop app.
## Architecture
@@ -51,6 +61,10 @@ Resonant desktop client
│ ├── library and artwork requests
│ └── authenticated stream URLs
└── Tauri shell
└── managed Navidrome sidecar
├── official, pinned, checksum-verified binary
├── loopback-only HTTP server
└── app-private database and logs
Navidrome or another OpenSubsonic server
├── scans and indexes music
@@ -60,12 +74,19 @@ Navidrome or another OpenSubsonic server
The protocol boundary is deliberate. Resonant owns the product experience without forking the media engine, and the server can be replaced as long as it speaks OpenSubsonic.
## Current boundaries
- Navidrome is bundled; FFmpeg is not yet bundled. Native browser-supported audio formats play directly, while formats that require transcoding still need FFmpeg available on the system.
- The local server is intentionally reachable only from this computer. Listening from another device will be a separate, explicitly enabled feature.
- Credentials are session-only until OS keychain integration lands.
## Next milestones
1. Move remote requests into Tauri's HTTP plugin and store credentials in the OS keychain.
2. Add album and artist detail routes with deterministic library pagination.
3. Persist the queue, favorites, and playback position, then synchronize favorites back to the server.
4. Add native media keys, system now-playing metadata, ReplayGain, and gapless transition support.
5. Bundle an optional managed Navidrome sidecar for the “choose a folder” setup path.
5. Add an explicit remote-access flow without weakening the local-only default.
Product direction and accessibility principles live in [`PRODUCT.md`](./PRODUCT.md).
Third-party licensing and source links live in [`THIRD_PARTY_NOTICES.md`](./THIRD_PARTY_NOTICES.md).