Derived from open milestones, issues & PRs of navidrome/navidrome via an NKS reasoning graph. Every cited item shows its verified author and an author-role weight. Inferred dependencies are marked as hypotheses.
#NNN always denotes a real GitHub
issue/PR; directions are named D1…D5, never by internal id. An open PR is
work in flight, not a guarantee it will land.
PID.Artist / credited-participants PR
(#5527,
deluan, MEMBER, high) is the keystone of library identity and is
maintainer-authored — review & merge first. Surrounding maintainer deeds
(#5662, #5568) already merged.Then: resolve the D1↔D3 plugin-host hypothesis (see Dependencies), and work the contributor-PR backlog (ratings D2, sharing/auth D5) where engagement is real.
The four open GitHub milestones — the maintainer's scheduled plan, the strongest single signal. Every open milestone issue is listed in full.
| # | Title | Author | Assoc. | Weight | Dir. |
|---|---|---|---|---|---|
| #2650 | Recently Added shouldn't rely on Update but Create timestamp | anarcat | NONE | high · milestone | D1 |
| #1652 | Support for non-numeric tracknumbers tags | awsms | NONE | high · milestone | D1 |
| # | Title | Author | Assoc. | Weight | Dir. |
|---|---|---|---|---|---|
| #3020 | Web Player Skips | Pachin0 | NONE | high · milestone | D4 |
| #1473 | Add the Rating column to the Playlist view (Multiselect & Rate) | WolfgangDpunkt | NONE | high · milestone | D2 |
| #389 | Import, display and filter by Label/Publisher | Baswazz | NONE | high · milestone | D1 |
| #245 | Remember playing queue and last position (partial audiobook support) | JaneX8 | CONTRIBUTOR | high · milestone | D4 |
Committed milestone (add a plugin system) with no open issues on the board. Live plugin-host work is driven through open PRs in D3 (#5643, #5655, #5668).
Committed milestone (FTS in the DB + an omni search bar) with no open issues remaining. Live nearby work: CJK-search perf PR #5614 (in D3).
Ordered by signal strength (D1 carries the most committed + maintainer items). No hard dependencies between directions — each is independently actionable.
Library identity becomes authoritative and editable: writable tags, configurable artist/track identity (PID, MBID, credited participants), correct non-numeric & grouped sorting, MusicBrainz enrichment — on a scanner/DB model that orders by the right timestamps and survives without corruption.
| Ref | What | Author | Weight | State |
|---|---|---|---|---|
| #5527 | Configurable PID.Artist + credited participants | deluan MEMBER | high | open PR |
| #5453 | Metadata-management / tag-writing system | Serikpg NONE | low | open PR |
| #5662 | Annotation-index speedup for smart playlists | deluan MEMBER | high | merged ✅ |
| #5568 | Scanner.IgnoreDotFolders — index dot-folders | deluan MEMBER | high | merged ✅ |
| #5668 | Match similar/top songs across multiple artists | deluan MEMBER | high | merged ✅ |
| #389 | Import/display/filter by Label/Publisher (ms: New UI) | Baswazz NONE | high · ms | open issue |
| #1652 | Non-numeric tracknumber tags (ms: Big Refactor) | awsms NONE | high · ms | open issue |
| Ref | Risk | Author | Weight |
|---|---|---|---|
| #4830 | "database disk image is malformed" — SQLite corruption / data loss (most severe reported bug) | Toniob | medium |
| #2650 | Recently Added ranks by Update not Create timestamp (ms: Big Refactor) | anarcat | high |
| #2575 | API serves a fallback artist image instead of 404 | tzugen | medium |
Unblocks: a correct, writable, well-ordered library identity — the substrate every other direction draws on.
A listener's ratings become first-class and act everywhere: rate from the player, rate in bulk, see ratings in every list (incl. playlists), aggregate across users, and let ratings shape playback (skip low-rated in shuffle).
| Ref | What | Author | Weight | State |
|---|---|---|---|---|
| #5550 | SkipLowRatingInShuffle — exclude 1-star from shuffle | Finomosec NONE | medium | open PR |
| #5570 | Inline star-rating control in the player toolbar | realrossmanngroup NONE | low | open PR |
| #5552 | Bulk rate/like multiple selected songs | Finomosec NONE | low | open PR |
| #5561 | User ratings with cross-user average display | plutskiy NONE | low | open PR |
| #1473 | Rating column in Playlist view + Multiselect & Rate (ms: New UI) | WolfgangDpunkt NONE | high · ms | open issue |
Unblocks: ratings as a usable signal — feeds shuffle/queue behaviour and the ratings-in-playlists UI (#1473). Leans on D1's identity model.
A fully OpenSubsonic-compatible, extensible server: missing API endpoints & attributes (play history, work/movement, podcasts, working jukebox), and a plugin host exposing core services (song matcher, shared DTO types, faster CJK search).
| Ref | What | Author | Weight | State |
|---|---|---|---|---|
| #5643 | Expose song matcher as a plugin Matcher host service | deluan MEMBER | high | open PR |
| #5655 | Shared types package for plugin DTOs (PDK refactor) | deluan MEMBER | high | open PR |
| #5614 | NOCASE covering indexes to speed up CJK search | deluan MEMBER | high | open PR |
| #5650 | getSongHistory Subsonic endpoint | Voten641 NONE | low | open PR |
| #5659 | OpenSubsonic works / movements attributes | deluan MEMBER | high | merged ✅ |
| Ref | Risk | Author | Weight |
|---|---|---|---|
| #2771 | Jukebox (server-side playback) control does not work | julienlag | medium |
Unblocks: the plugin host surface — which D1's external-metadata enrichment may depend on (hypothesis below). Carries the live work behind the otherwise-empty Plugins and Full Text Search milestones.
A richer, more reliable listening surface: a player that doesn't
skip, browsable album artwork, an artist page, audiobook-style resume, rendering lyrics
(incl. external .lrc), themeable UI, smoother share downloads, localized dates.
| Ref | What | Author | Weight | State |
|---|---|---|---|---|
| #5598 | Album image gallery / lightbox | BorisLord NONE | medium | open PR |
| #5631 | Share-download dialog: current item vs. whole share | katedickey NONE | low | open PR |
| #5664 | Add Rosé Pine themes (based on Catppuccin files) | draconivis NONE | low | open PR |
| #5632 | Single ParseLyrics entry point; fixes sidecar lyrics | deluan MEMBER | high | merged ✅ |
| #3020 | Web Player Skips (ms: New UI) | Pachin0 NONE | high · ms | open issue |
| #245 | Remember queue & last position / audiobook resume (ms: New UI) | JaneX8 CONTRIBUTOR | high · ms | open issue |
| Ref | Risk | Author | Weight |
|---|---|---|---|
| #3020 | Web player skips during playback (ms: New UI) | Pachin0 | high |
| #4148 | External sidecar .lrc lyrics don't render (related fix merged in #5632) | CrazyVito11 | medium |
Unblocks: a reliable listening surface — the most user-visible direction; #3020 and #245 are committed New UI milestone work.
A genuinely multi-user server: stronger/flexible auth (app passwords, LDAP/AD, improved SSO), shareable & co-edited playlists, and social features — seeing what others play, synchronized listening, following public playlists.
| Ref | What | Author | Weight | State |
|---|---|---|---|---|
| #5460 | Playlist view/edit permissions — collaborative playlists (API; UI pending) | DerRockWolf NONE | medium | open PR |
| #5513 | Per-user named app passwords (revocable secondary creds) | zkvvoob NONE | low | open PR |
Unblocks: real multi-user use — app passwords and shared playlists are the first stepping stones toward the social features in the telos.
No confirmed anantara ordering between
directions — D1–D5 are each independently actionable, and the four committed milestones
can be worked in parallel.
D1's external-source metadata enrichment (e.g. missing studio
albums from MusicBrainz #5106, multi-artist matching) may lean on the plugin-host
surface delivered in D3 — the song matcher exposed as a host service (#5643) and the
merged multi-artist matcher (#5668). This is the roadmap author's architectural inference,
not established by any issue, PR, or maintainer statement. Treat it as a sequencing
hint, not a gate: D1 holds 3 of the open committed-milestone items and is
independently actionable.
Closing criterion: a maintainer statement either confirms the dependency (then it
becomes a real D1-after-D3 ordering) or denies it (then drop the hint).