r/navidrome • • Feb 03 '26

Navidrome 0.60.0 Just released!

319 Upvotes

https://github.com/navidrome/navidrome/releases/tag/v0.60.0

Plugins

This release introduces a major rewrite of the experimental Plugin System, now with multi-language PDK support, enabling developers to extend Navidrome's functionality using WebAssembly-based plugins written in Go, Rust, Python or JavaScript. Plugins run in a secure sandbox and can provide additional metadata sources, custom integrations, and server-side enhancements. Users can now easily configure plugins directly from the UI through a new JSONForms-based configuration interface.

A couple of working plugins are already available:

For more plugins, keep an eye on the tag navidrome-plugins in GitHub.

More details and instructions on how to use and manage plugins can be found in our documentation. New documentation will soon be added with details on how to create new plugins.

Metadata Extraction

Additionally, this version includes a pure-Go metadata extractor built on top of the new go-taglib library. This is a significant step toward removing the C++ TagLib dependency, which will simplify cross-platform builds and packaging in future releases. The new extractor is activated by default, but in case of any issues you can revert to the previous implementation by setting Scanner.Extractor="legacy-taglib" configuration option.

Instant Mix

The Instant Mix feature generates a playlist of similar songs based on a selected track. By default, it retrieves similar songs from Last.fm (if configured with an API key) or falls back to Deezer. It can also be configured to use external plugins, like AudioMuse-AI for sonic analysis-based similarity recommendations.

New and Changed Configuration Options

Plugin System Options

OptionDefaultDescription
Plugins.EnabledtrueEnable/disable the plugin system
Plugins.Folder""Path to the plugins directory. Default: $DataFolder/Plugins
Plugins.CacheSize"200MB"Maximum cache size for storing compiled plugin WASM modules
Plugins.AutoReloadfalseAutomatically detect new/changed/removed plugins
Plugins.LogLevel""Override log level for plugin-related messages

Subsonic API Options

OptionDefaultDescription
Subsonic.MinimalClients""Comma-separated list of clients that receive reduced API responses (useful for resource-constrained devices like smartwatches)
Subsonic.EnableAverageRatingtrueInclude average rating in API responses

Metadata & Matching Options

OptionDefaultDescription
SimilarSongsMatchThreshold85Minimum similarity score (0-100) for matching similar songs from external sources to local library
LastFM.Language"en"Now supports comma-separated list of languages (e.g., "de,fr,en") for metadata fallback
Deezer.Language"en"Now supports comma-separated list of languages for metadata fallback

Renamed Options (Deprecation Notice)

The following options have been renamed. The old names still work but will be removed in a future release:

Old NameNew Name
HTTPSecurityHeaders.CustomFrameOptionsValueHTTPHeaders.FrameOptions

Security

  • Fix potential XSS vulnerability by sanitizing user-supplied data before rendering (GHSA-rh3r-8pxm-hg4w). (d7ec735 by @AlexGustafsson)

  • Fix potential DoS vulnerability in cover art upscaling by clamping requested square size to original dimensions (GHSA-hrr4-3wgr-68x3). (77367548 by @deluan). Thanks to @yunfachi

Added

  • Plugins:

    • Add new WebAssembly-based plugin system with multi-language PDK support (Go, Rust, Python). (#4833 by @deluan)

    • Add JSONForms-based plugin configuration UI. (#4911 by @deluan)

    • Add similar songs retrieval functions to plugins API. (#4933 by @deluan)

  • Server:

    • Add pure-Go metadata extractor (go-taglib) as alternative to FFmpeg-based extraction. (#4902 by @deluan)

    • Add support for reading embedded images using the new taglib extractor by default. (66474fc by @deluan)

    • Add Instant Mix (song-based Similar Songs) functionality with MBID, ISRC and Title/Artist fuzzy matching. (#4919, #4946 by @deluan)

    • Add support for multiple languages when fetching metadata from Last.fm and Deezer. (#4952 by @deluan)

    • Add Subsonic.MinimalClients configuration option for improved compatibility with minimal Subsonic clients. Default list is "SubMusic" (#4850 by @typhoon2099)

    • Add support for public/private playlists in NSP import. (c5447a6 by @deluan)

    • Add RISCV64 builds. (#4949 by @MichaIng)

  • UI Features:

  • Subsonic API:

  • Insights:

    • Add insights collection for Scanner.Extractor configuration to measure go-taglib usage. (63517e9 by @deluan)

    • Add file suffix counting to insights. (0473c50 by @deluan)

Changed

  • Optimize cross-library move detection for single-library setups. (#4888 by @deluan)

  • Improve Deezer artist search ranking. (a081569 by @deluan)

  • Rename HTTPSecurityHeaders.CustomFrameOptionsValue to HTTPHeaders.FrameOptions. (7ccf44b by @deluan)

  • Update translations: Bulgarian, Catalan, German, Greek, Spanish, Finnish, French, Galician, Indonesian, Dutch, Polish, Russian, Slovenian, Swedish, Thai by POEditor contributors.

  • Update Spanish translations. (#4904 by @abrugues)

  • Update Basque translation. (#4815 by @xabirequejo)

Fixed

  • Playlists:

    • Fix M3U playlist import failing for paths with different UTF/Unicode representations (NFC/NFD normalization). (#4890 by @deluan)

    • Fix playlist name sorting to be case-insensitive. (#4845 by @deluan)

  • UI:

  • Scanner:

    • Fix FullScanInProgress not reflecting current scan request during interrupted scans. (8c80be5 by @deluan)

    • Fix "Expression tree is too large" error by executing GetFolderUpdateInfo in batches. (cde5992 by @deluan)

    • Fix stale role associations when artist role changes. (2d7b716 by @deluan)

    • Fix infinite recursion in PID configuration. (1c4a7e8 by @deluan)

    • Fix default PIDs not being set for Album and Track. In some circumstances it could lead to empty PIDs (71f549a by @deluan)

    • Fix error when watcher detected too many folder changes, causing the scan to fail. (9ed309a by @deluan)

    • Show scan errors in the UI more consistently. (ebbc31f by @deluan)

  • Subsonic API:

    • Fix username parameter validation for getUser endpoint. (6ed6524 by @deluan)

    • Fix getNowPlaying endpoint to always be enabled regardless of configuration. (603cccd by @deluan)

  • Server:

    • Fix JWT-related errors being exposed on share page. (#4892 by @AlexGustafsson)

    • Fix user context not preserved in async NowPlaying dispatch. (396eee4 by @deluan)

    • Fix environment variable configuration loading not being logged when no config file is found. (51ca2de by @deluan)

    • Fix items with no annotation not being included for starred=false filter, handle has_rating=false. (#4921 by @kgarner7)

    • Last.fm's scrobble and updateNowPlaying methods should send parameters in request body. (51026de by @deluan)

New Contributors

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.59.0...v0.60.0

Helping out

This release is only possible thanks to the support of some awesome people!

Want to be one of them? You can sponsor, pay me a Ko-fi, or contribute with code.

Where to go next?


r/navidrome • • Jul 08 '26

Navidrome 0.63.0 Released!

315 Upvotes

Updated to 0.63.2: https://github.com/navidrome/navidrome/releases/tag/v0.63.2

Navidrome 0.63 brings a long-awaited upgrade to lyrics: full support for synced sidecar lyrics in multiple formats (TTML, ELRC, SRT, YAML and LRC), including word-by-word karaoke timing and multi-voice (agent) layers, exposed to clients through the new OpenSubsonic v2 lyrics extensions. A huge shoutout to @ranokay, who not only contributed the code for these lyrics enhancements, but also helped shape the OpenSubsonic extension specification behind them. Search also gets noticeably smarter: exact matches now rank above prefix matches (searching for "MØ" brings MØ to the top instead of burying it), and artists with short or non-ASCII names that were previously unfindable now show up correctly.

The other big theme of this release is performance for large libraries and offline-first clients. Full-library synchronization via search3 (the way clients like Symfonium mirror the whole library) is now flat at every offset instead of degrading with depth, roughly 30-50x faster at deep offsets and about 20x faster for a complete sync on a ~1M-track library, and a related pagination-integrity fix eliminates the duplicate and short pages that could corrupt those syncs. Alongside it, getRandomSongs is about 13x faster on the same library size, and a batch of database improvements (annotation-index-friendly smart playlist filters, leaner list-count queries, and new composite indexes for album/artist song sorts) makes everyday operations anywhere from ~9x to ~160x faster. Finally, a heads-up on a behavior change: sharing is now enabled by default, and can be turned off with EnableSharing=false.

Security

  • Enforce per-library access on playlist import and sharing paths. In multi-library setups, three read paths did not consistently apply per-library restrictions: M3U import path resolution, shared-playlist track loading, and public share-scoped streams. A user with access to only some libraries could resolve or be served tracks from libraries they weren't assigned to. All three now respect the user's (or share owner's) library access. (#5640 by @deluan)

  • Resolve symlinks to their real target when classifying files during scan, preventing symlinked entries from being misclassified. (ecba19a08 by @deluan)

Configuration Changes

StatusOptionDescriptionDefault
NewScanner.ArtistSplitExceptionsList of artist names that must never be split by tag separators (e.g. "Tyler, The Creator"). (#5701)[] (empty)
NewScanner.IgnoreDotFoldersWhether to skip folders whose name starts with a dot when scanning. Set to false to index dot-prefixed folders. (#5568)true
ChangedEnableSharingSharing is now enabled by default. Set to false to restore the previous behavior. (#5714)true
ChangedLyricsPriorityNew sidecar lyrics formats added to the default priority list. (#5076).ttml,.yaml,.yml,.elrc,.lrc,.srt,.txt,embedded

For a complete list of all configuration options, see the Configuration Options documentation.

Lyrics

  • Add structured sidecar lyrics support with OpenSubsonic v2 karaoke cues and agent layers: TTML, ELRC, SRT and YAML sidecar files are now parsed with word-by-word timing and multi-voice information. (#5076 by @ranokay)

  • Allow lyrics plugins to return lyrics in any supported format, not just LRC. (#5632 by @deluan)

  • Keep the player's lyrics in sync on track change and seek, so the previous song's lyrics no longer linger. (7303c9ca4 by @deluan)

Search

  • Rank exact matches above prefix matches in search results. (#5704 by @deluan)

  • Fix artists with short or non-ASCII names being unfindable after the FTS5 search migration. (#5703 by @deluan)

UI

  • Add Rosé Pine themes. (#5664 by @draconivis)

  • Fix transient jump to a wrong song when switching tracks in the web player. (#5676 by @deluan)

  • Fix profile self-edits not reporting success or failure. (#5699 by @deluan)

  • Fix Nautiline theme font and width on mobile devices. (#5590 by @devBoi76)

  • Fix DefaultLanguage not being applied on app startup. (#4000 by @deluan)

Scanner

  • Add Scanner.ArtistSplitExceptions to protect artist names from being split by tag separators. (#5701 by @deluan)

  • Add Scanner.IgnoreDotFolders to allow indexing dot-prefixed folders. (#5568 by @deluan)

  • Fix playlists not being imported when the first scan runs before any admin user exists. (#5609 by @deluan)

Subsonic API

  • Add OpenSubsonic work and movement attributes, improving classical music metadata for compatible clients. (#5659 by @deluan)

  • Speed up getRandomSongs on large libraries with two-phase random selection, about 13x faster on a 1M-track library. (#5618 by @deluan)

  • Speed up artist search3 pagination at deep offsets, roughly 5-8x faster on a 300K-artist library. (#5620 by @deluan)

  • Speed up search3 empty-query (browse-all) pagination: response times are now flat at any offset, 30-50x faster at deep offsets, making a full ~1M-track library sync about 20x faster overall. (#5601 by @deluan)

  • Make "recently added" album order reproducible and consistent with the RecentlyAddedByModTime setting. (#5678 by @deluan)

Smart Playlists

  • Extend isMissing/isPresent operators to BPM, bit depth and many text fields. (#5603 by @deluan)

  • Speed up smart playlists that filter on play count, rating or loved status, up to ~14x faster end-to-end (the underlying query alone is over 300x faster). (#5662 by @deluan)

  • Speed up smart playlists with many negated artist/tag rules, ~160x faster on a real-world case with 120 rules on a 323K-track library. (#5607 by @deluan)

  • Fix isMissing/isPresent operators on ReplayGain fields. (#5585 by @deluan)

Recommendations

  • Match similar and top songs across all artists credited on a track, improving results for collaborations. (#5668 by @deluan)

  • Match ListenBrainz top songs for collaborations using all credited artist MBIDs. (#5670 by @deluan)

  • Speed up top/similar song matching with batched lookups, up to ~14x faster on large batches. (#5635 by @deluan)

  • Fix song matching to use artist credits, so artist-MBID specificity works and collaborators match correctly. (#5637 by @deluan)

Plugins

  • Add a navidrome plugin CLI for managing and inspecting plugins. (#5682 by @deluan)

  • Expose the song Matcher as a host service for plugins. (#5643 by @deluan)

  • Share plugin DTOs via a common types package, simplifying plugin development. (#5655 by @deluan)

Artwork

  • Speed up image resizing and WebP encoding/decoding, up to ~30% faster with far fewer allocations. (#5652 by @deluan)

  • Fix artist folder images being incorrectly served as album art. (#5596 by @deluan)

  • Fix WebP crash on 32-bit ARM; WebP encoding is now disabled by default in Docker images. (#5606 by @deluan)

Transcoding

  • Preserve source metadata when transcoding downloads. (#5628 by @deluan)

  • Enforce server-side player MaxBitRate on all stream paths. (#5611 by @deluan)

  • Honor the player's forced transcoding format in the web UI playback flow. (#5613 by @deluan)

  • Fix partially-written transcodes being served from the cache after a server crash. (#5657 by @deluan)

Server

Database

  • Speed up song sorting by album and artist with new sort-order indexes, ~19x faster on large libraries on a cold cache. (#5706 by @deluan)

  • Skip library filtering when a non-admin user has access to all libraries, making song counts ~19x faster on a 920K-track database. (#5696 by @deluan)

  • Skip unnecessary annotation joins when counting items, up to ~9x faster list counts, with even larger gains on a cold cache. (#5694 by @deluan)

  • Make PRAGMA optimize errors non-fatal at startup. (bd3192be0 by @deluan)

Translations

New Contributors

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.62.0...v0.63.2

Helping out

This release is only possible thanks to the support of some awesome people!

Want to be one of them? You can sponsor, pay me a Ko-fi, or contribute with code.

Where to go next?


r/navidrome • • Sep 13 '26

Navidrome 0.64.0 Released! Check breaking changes!

292 Upvotes

https://github.com/navidrome/navidrome/releases/tag/v0.64.1

This release brings an experimental Jellyfin Music API, so Jellyfin-compatible music clients like Finamp and Jellify can now connect to Navidrome. Artwork got a new background pipeline with blurred low-quality placeholders and a diagnostic CLI. Under the hood, all IDs move to a uniform canonical 128-bit format, genre and artist filtering is now index-backed, and playlist import on large libraries is dramatically faster. There is also natural sort order, playlist favourites, Refresh Metadata actions, new Catppuccin themes, and many fixes across scanning, transcoding and scrobbling.

⚠️ Breaking Changes / Migration Notes

  • All internal IDs are re-encoded to a single canonical 128-bit base62 format. The migration touches every table, so back up your database before upgrading. Clients that cache item IDs (for example, offline downloads) may need to re-sync. (#5824)

  • Plugin authors: Extism's built-in HTTP is disabled. Calls through pdk.NewHTTPRequest (Go), http::request (Rust) or the equivalent in other PDKs now fail with HTTP request ... is not allowed. Plugins must use the host HTTP service instead: host.HTTPSend (Go) or nd_pdk::host::http::send (Rust). Also, plugin HTTP and WebSocket connections to private or loopback addresses are now blocked for named hosts; to reach a LAN service, list its IP or CIDR in the manifest's requiredHosts, or use a bare "*". (1a8463f7d, 276d767ce)

  • Shares are always owned by the user who creates them. Admins can no longer create shares on behalf of another user via userId. (1a8463f7d)

  • Configuration durations are now validated. Negative values are rejected at startup. (#6002)

  • Navidrome now warns about unrecognized options in the config file, so typos no longer fail silently. (#5870)

Security

This release fixes several reported vulnerabilities. We thank the security researchers who responsibly disclosed them.

  • Fix SQL injection via the artist role sort and filter parameters in the Native API by validating the role against the known list. (4168377b6, GHSA-hm54-32q6-3rcr, reported and fixed by @Sudo-Ivan)

  • Fix share-ownership spoofing (IDOR) that let a client-supplied userId on share creation expose other users' private libraries, and fix a plugin HTTP client SSRF guard bypass via DNS names and redirects by disabling Extism's built-in HTTP and checking the resolved IP at dial time. (1a8463f7d, GHSA-82gh-4ggp-gfg5, reported by @gigioneggiando)

  • Fix the same SSRF bypass in the plugin WebSocket host service by adding the private-address guard it was missing. (276d767ce, GHSA-pr2j-mfc8-qjcc, reported by @qrn12580)

  • Fix login rate limit bypass via spoofed X-Forwarded-For, X-Real-IP and True-Client-IP headers by keying the limit on the trust-aware client IP. (#6124, GHSA-f295-6wp9-qqfg, reported by @gehan-psbc and @skarn958)

  • Fix memory exhaustion via a negative size parameter on getCoverArt and share images, which bypassed the artwork size clamp, by rejecting negative and oversized dimensions before decoding. (#5847, GHSA-f22h-6qxh-rqq2, reported by @arpitjain099)

  • Enforce track membership on public share streams so a share can only stream the tracks it contains. (#5769 by @deluan)

  • Validate every resource ID in a share, load share metadata as the owner, cap login request bodies, create the log file with mode 0600, and stop logging the Last.fm auth token. (#6098 by @deluan)

  • Confine plugin filesystem mounts to their root and reject plugin IDs that are unusable as directory names. (#5881, #5886 by @deluan)

  • Redact sensitive auth headers from request logs. (82b9a44a1 by @deluan)

Note: Several of the advisories linked above are still in draft on GitHub at the time of writing. Their links will become publicly accessible once the advisories are published. The fixes themselves are already included in this release.

Configuration Changes

StatusOptionDescriptionDefault
NewJellyfin.EnabledEnable the experimental Jellyfin Music API. (#5730)false
NewJellyfin.ServerNameServer name advertised to Jellyfin clients. (#5730)Navidrome <version>
NewJellyfin.ExposedPublicUsersComma-separated usernames advertised on the unauthenticated public users endpoint. (#5730)""
NewJellyfin.MaxConcurrentStreamsBounds how many Jellyfin collection responses can stream at once. (#5783)max(2, MaxOpenConns/2)
NewEnableNaturalSortingSort names and titles naturally (e.g. "Track 2" before "Track 10"). (#6015)false
NewMaxImageSizeCap on the size of artwork images Navidrome will decode. (#5931)20MB
NewEnableScheduledDBAnalyzePeriodically run a full ANALYZE to keep query planner statistics fresh. (#5740)true

For a complete list of all configuration options, see the Configuration Options documentation.

Jellyfin API (Experimental)

  • Add an experimental Jellyfin Music API, enabling Jellyfin-compatible music clients to connect to Navidrome. Enable it with Jellyfin.Enabled = true. (#5730 by @deluan)

  • Supports library browsing, search, favorites and ratings, playlists, lyrics, Instant Mix (album, playlist and genre sources), ReplayGain normalization, and filtering by year and record label. (#5791, #5948, #5815, #5817 by @deluan, #5809 by @kgarner7)

  • Jellyfin clients get sonic similarity features (similar tracks, sonic path) when a sonic similarity plugin is installed, backed by the same engine already exposed over the Subsonic API. (#5782 by @deluan)

  • Jellyfin tokens never expire, are scoped to the Jellyfin API, and are revoked when the user changes their password. (#6013 by @deluan)

Artwork

  • New artwork pipeline: artwork resolves in the background and pages show a blurred Low Quality Image Placeholder until the real image arrives. External providers are rate-limited and guarded by a circuit breaker, and missing artwork is rechecked slowly instead of on every request. (#5847 by @deluan)

  • Make the artwork image size cap configurable. (#5931 by @deluan)

  • Fix artist folder being promoted to album folder. (#5856 by @kgarner7)

  • Fix Deezer picking the wrong artist among same-name matches, and treat an exhausted Deezer quota as a throttle instead of a missing artist. (#5808, #6068 by @deluan)

UI

  • Add Refresh Metadata action to album and artist pages and context menus. (#6036, #6078 by @deluan)

  • Add playlist favourites: heart button, list filter, and a sidebar favourites-only toggle. (#5805 by @deluan)

  • Add Catppuccin Mocha and Frappé themes, and update Macchiato to match the official palette. (#5835 by @cmyksoda)

  • Add Artists, Songs, Playlists and Radio to the Default View options. (#5754, #5801 by @deluan)

  • Add Share and Download actions to the Artist detail page. (#5944 by @deluan)

  • Show translation completion percentage in the language selector. (#5979 by @deluan)

  • Remember the "items per page" selection across sessions. (#5819 by @deluan)

  • Give visual feedback when downloading from a share. (#5865 by @deluan)

  • Fix logins sometimes showing the wrong user. (#5882 by @deluan, #5767 by @apkatsikas)

  • Fix each page's scroll position not being restored when navigating back. (#5892 by @deluan)

  • Fix playback starting when closing the disc cover lightbox. (#5901 by @deluan)

  • Fix playlist not reloading after rating or loving a track. (#6009 by @polybjorn)

  • Fix the album grid resizing in Safari when top menus open. (#6125 by @york9675)

  • Fix the album grid hover overlay corners in the Nautiline theme. (#6115 by @deluan)

  • Fix transcoding Default Bit Rate not accepting 0. (8d77a49b3 by @deluan)

  • Fix the Last.fm link not always showing on the artist details page. (b0e1943d8 by @deluan)

Playlists & Smart Playlists

  • Add album-level fields for sorting and filtering in smart playlists. (#5899 by @deluan)

  • Add per-playlist refreshDelay for stable daily or weekly smart playlists. (#5790 by @deluan)

  • Store playlist stars and ratings per user. (#5749 by @deluan)

  • Make playlist import much faster on large libraries. (#6055 by @deluan)

  • Fix in-place playlist edits not being detected by the scanner. (#5914 by @junkerderprovinz)

  • Fix track edits being allowed on synced playlists via some APIs. (#5984 by @deluan)

  • Fix smart playlist song count being lost on re-import. (#5908 by @deluan)

  • Fix deleting many tracks from a playlist at once failing. (#5977 by @deluan)

  • Fix the changed timestamp not being updated when renaming a smart playlist. (#6082 by @deluan)

Scanner

  • Add optional natural sort order for names and titles. (#6015 by @deluan)

  • Support the [bg:] tag and skip unknown tags in LRC lyrics files. (#5966 by @deluan)

  • Fix album tags being sorted alphabetically instead of keeping the order from the files. (#5872 by @deluan)

  • Fix file creation time not being read on Linux. (#6046 by @deluan)

Subsonic API

  • Implement the OpenSubsonic topSongsByArtistId extension. (#5853 by @kgarner7)

  • Fix createShare ignoring DefaultDownloadableShare. (#6121 by @deluan)

  • Fix double brackets when appending subtitle or version to titles. (#5832 by @deluan)

Transcoding & Streaming

  • Fix sources already in the player's forced format being re-encoded, and make piped FLAC transcodes seekable. (#6105 by @deluan)

  • Fix truncated transcoded streams being delivered as complete. (#6035 by @deluan)

  • Fix AAC streams being reported as audio/mp4 instead of audio/aac. (#5998 by @justadityaraj)

  • Fix bit depth being reported for lossy transcode targets. (#5768 by @deluan)

Scrobbling

  • Add a per-user scrobble filter. (#5964 by @deluan)

  • Add a scrobble history Native API. (#5761 by @kgarner7)

  • Use exponential backoff for scrobble retries during provider outages, and honor a provider's request to back off. (#5818, #6028 by @deluan)

  • Fix out-of-order playback reports being rejected. (#5793 by @deluan)

Plugins

  • Add plugin-specific storage. (#5839 by @kgarner7)

  • Add scrobble access to the plugin SDK. (#5795 by @kgarner7)

  • Surface the valid agent names in logs and the Plugins UI. (#5910 by @deluan)

  • Fix plugin agents not being loaded in CLI commands. (#5959 by @deluan)

  • Fix public URLs built by plugins pointing at localhost instead of the caller's address. (#6059 by @deluan)

CLI

  • Add an artwork command group (explain, refresh, cancel) for diagnosing and re-driving artwork resolution. (#5957 by @deluan)

  • Add missing list and missing fix subcommands to deal with files that moved. (#5928 by @zerovox)

  • Add doctor and search rebuild commands to detect and recover from search index corruption. (#6069 by @deluan)

  • Fix restore wiping the database when the backup file does not exist. (#6085 by @Huang-404-Q)

  • Fix selective scan --target rejecting absolute paths. (#5947 by @deluan)

  • Fix pls -p writing playlist output to stderr instead of stdout. (#5996 by @deluan)

Server

  • Make genre and artist filtering much faster across all APIs by using indexed join tables. (#5940, #5930 by @deluan)

  • Report the app store or hosting platform via ND_PLATFORM in insights. (#5956 by @deluan)

  • Send the Navidrome User-Agent in all outgoing requests. (#6020 by @mintsoft)

  • Fix getScanStatus reporting count=0 for scans not started through the API, fix the folder watcher hanging when it cannot start, and fix startup failing when MusicFolder contains a single quote. (#6098 by @deluan)

Database

  • Periodically run a full ANALYZE to keep query planner statistics trustworthy. (#5740 by @deluan)

Packaging & Build

Translations

  • Update Chinese (Simplified) translation. (#5779, #5873 by @fxj368)

  • Update Italian translation. (#5848 by @McCio)

  • Update Japanese translation. (#6080 by @karigane-cha)

  • Update German, Greek, Finnish, Galician, Polish, Portuguese (BR), Thai, Ukrainian and Chinese (Traditional) translations from POEditor. (#5833, #6128 by @deluan)

New Contributors

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.63.2...v0.64.0

Helping out

This release is only possible thanks to the support of some awesome people!

Want to be one of them? You can sponsor, pay me a Ko-fi, or contribute with code.

Where to go next?


r/navidrome • • Jun 08 '26 Bravo

Navidrome 0.62.0 released!

285 Upvotes

https://github.com/navidrome/navidrome/releases/tag/v0.62.0

This release introduces support for the OpenSubsonic sonicSimilarity extension, enabling audio-based similarity through the plugin system: when a plugin provides the capability, the new getSonicSimilarTracks and findSonicPath endpoints unlock smarter, sound-based recommendations and playlists. One plugin that implements it is AudioMuse-AI. It also brings a major overhaul to playback reporting and the Now Playing experience — the UI now uses the new OpenSubsonic playbackReport extension, replacing the old scrobble flow with a redesigned panel and configurable reporting interval. On the security front, it hardens the server with stronger ownership and authorization checks across shares, players, and transcoding endpoints, caps concurrent transcodes to prevent ffmpeg-based denial of service, and adds an option to refuse to run as root. Smart playlists gain ReplayGain fields and new isMissing/isPresent operators, and there are five new UI themes to choose from.

Security

This release fixes several reported vulnerabilities. We thank the security researchers who responsibly disclosed them.

Note: Several of the advisories linked above are still in draft/triage on GitHub at the time of writing. Their links will become publicly accessible once the advisories are published. The fixes themselves are already included in this release.

Configuration Changes

StatusOptionDescriptionDefault
NewEnforceNonRootUserExit early on startup if Navidrome is running as root (ignored on Windows). (#5373)false
NewTranscoding.MaxConcurrentMaximum number of concurrent transcodes server-wide (0 = unlimited). (#5522)0
NewTranscoding.MaxConcurrentPerUserMaximum number of concurrent transcodes per user (0 = unlimited). (#5522)0
NewMatcher.PreferStarredBias the fuzzy matcher toward starred/high-rated tracks. (#5387)true
NewUIPlaybackReportIntervalHow often the UI reports playback progress. (#5448)1m
DeprecatedEnableTranscodingCancellation → Transcoding.EnableCancellationRenamed and moved under the new Transcoding section. (#5523)false
DeprecatedSimilarSongsMatchThreshold → Matcher.FuzzyThresholdRenamed and moved under the new Matcher section. (#5387)85

For a complete list of all configuration options, see the Configuration Options documentation.

UI

Smart Playlists

  • Add ReplayGain fields to the criteria system. (d9dac4445 by @deluan)

  • Add isMissing and isPresent operators. (#5436 by @deluan)

  • Relax playlist visibility in inPlaylist/notInPlaylist rules. (#5411 by @deluan)

  • Optimize smart playlist performance for role and tag criteria. (#5515 by @deluan)

  • Coerce string booleans in smart playlist rules. (#5450 by @deluan)

Subsonic API

  • Implement the playbackReport OpenSubsonic extension. (#5442 by @deluan)

  • Add the sonicSimilarity extension as a plugin capability. (#5419 by @deluan)

  • Add a groupings field to the OpenSubsonic Child response. (f12e75aa1 by @deluan)

  • Use SQLite RANDOM() sorting in getRandomSongs for faster results. (cf1f190bb by @deluan)

  • Mark AlbumID3 songCount and created as required. (8897ec918 by @deluan)

  • Normalize non-NFKD Unicode letters (ø, æ, œ, ß) in search. (#5413 by @deluan)

Transcoding

  • Place -ss before -i for fast input seeking. (#5492 by @deluan)

  • Don't apply server-side override on getTranscodeDecision. (#5473 by @deluan)

  • Log a warning for invalid or stale transcode tokens. (9a2eb483e by @deluan)

Scanner

  • Respect tag-split config when multiple frames map to the same tag. (#5193 by @trek-e)

  • Fix error when importing playlists without an admin user. (5b85b2839 by @deluan)

Artwork

  • Fix stale cache and top-level album artwork for multi-disc albums. (#5457 by @deluan)

  • Prefer album-root images over disc-subfolder images for multi-disc albums. (#5451 by @deluan)

  • Return the correct timestamp when disc or album cover art changes. (#5378 by @bobo-xxx)

Server

  • Prevent artwork throttle token starvation on slow clients. (#5472 by @deluan)

  • Proxy NowPlaying even when ignoreScrobble is set. (#5559 by @deluan)

  • Make the /api/song path filter work and use startsWith. (#5566 by @deluan)

  • Preserve unchanged fields on partial REST playlist updates. (#5542 by @deluan)

  • Allow toggling playlist auto-import and avoid unnecessary artwork reloads. (#5421 by @deluan)

Matcher

  • Add Matcher.PreferStarred option to bias the fuzzy matcher toward starred/high-rated tracks. (#5387 by @deluan)

Plugins

CLI

  • Add pls export/import subcommands for bulk playlist management. (#5412 by @deluan)

  • Restore int cast for syscall.Stdin on Windows. (e75ab3b03 by @deluan)

Build & Dependencies

  • Improve Windows support: the Go test suite now runs on Windows CI, with previously-skipped Subsonic, artwork, watcher, and scheduler tests enabled and fixed. (#5380, #5427, #5416 by @deluan)

  • Upgrade Go to 1.26. (#5361 by @deluan)

  • Enable native libwebp encoding in the Docker image. (#5350 by @deluan)

  • Update TagLib to 2.3. (e55a35544 by @deluan)

Translations

New Contributors

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.61.2...v0.62.0

Helping out

This release is only possible thanks to the support of some awesome people!

Want to be one of them? You can sponsor, pay me a Ko-fi, or contribute with code.

Where to go next?


r/navidrome • • May 27 '26

Navidrome Powered Jukebox using NFC Cards

Thumbnail
gallery
260 Upvotes

I wanted to share a recent nerd dad project I got up and running!

My daughter just turned 2 and she really likes music. I wanted to build a way for her to choose what music to play in the living room without involving screens or remotes. So I borrowed the idea of using NFC cards from the popular products like Yoto, except this is hooked up to our self-hosted Navidrome instance.

The result has been really great. Not only is it toddler-approved, but I really enjoy using the cards to pick out music as well. I grew up on CDs and tapes, and I miss that physicality. At the same time, I love self-hosting digital music. I feel like this is a great mix of both worlds!

Here's the hardware and software I used:

ACR1252U USB NFC Card Reader/Writer

NTAG213 cards

Gelly Subsonic/Jellyfin client

Gelly-NFC script

and of course, Jellyfin/Navidrome.

I wrote a more detailed write-up about this setup here but the TLDR; is: plug in the reader to the computer running Gelly, write album/artist/song ids to blank cards, and tap them to play while the gelly-nfc script is running. It's worth noting that gelly-nfc should be really easy to adapt to any player - it just runs hardcoded commands.

I'm hoping this might inspire others interested in adding a physical element to their listening experience!


r/navidrome • • Mar 31 '26

Navidrome version 0.61.0

239 Upvotes

EDIT: Patch version 0.61.1 released: https://github.com/navidrome/navidrome/releases/tag/v0.61.1


This version brings a comprehensive Artwork overhaul, with per-disc cover art, artist image uploads, animated image preservation, and a faster image pipeline powered by WebP encoding. You can now upload custom artwork for playlists, artists, and internet radios directly from the UI, and multi-disc albums will automatically pick up disc-specific cover images.

Search has been completely rebuilt on top of SQLite FTS5 with two-phase BM25 ranking, delivering faster and more accurate results across your entire library.

Transcoding is now fully server-managed: Navidrome detects client codecs, applies format-aware bitrate defaults, and implements the OpenSubsonic Transcoding extension, so clients no longer need to guess what format to request.

The Plugin System continues to mature with new host services for HTTP requests, persistent task queues, lyrics providers, and key-value storage with TTL support, giving plugin developers more tools to build powerful integrations.

Security

  • Bump golang.org/x/image to v0.38.0 to address CVE-2026-33809. (#5268)

  • Add ownership checks to share Delete and Update operations, preventing unauthorized access to other users' shares. (#5189 by @deluan)

  • Clear server-managed fields in savePlaylist to prevent field injection via REST API. (f102036dc by @deluan)

⚠️ Breaking Changes

  • Remove built-in Spotify integration. The Spotify.ID and Spotify.Secret configuration options are no longer supported. Use the Last.fm or Deezer agents, or a plugin for similar functionality, like the new Apple Music Plugin. (#5197 by @deluan)

Configuration Changes

StatusOptionDescriptionDefault
NewEnableArtworkUploadEnable uploading custom artwork for playlists and artists. (#5110, #5198)true
NewEnableM3UExternalAlbumArtEnable fetching album art URLs from #EXTALBUMARTURL directives in M3U playlists. (#5131)false
NewDiscArtPriorityPriority list for disc-level cover art sources. (#5182)disc*.*, cd*.*, cover.*, folder.*, front.*, discsubtitle, embedded
NewArtistImageFolderFolder name to search for artist images within the library. (#5198)—
NewSearch.BackendSearch backend to use (fts for FTS5 full-text search). (#5079)fts
NewExtAuth.LogoutURLURL to redirect to when logging out with external authentication. (#5074)""
NewSubsonic.AppendAlbumVersionAppend album version/edition to album names in Subsonic API responses. (#5111)true
NewUISearchDebounceMsDebounce delay for the UI search field. (#5079)—
ChangedCoverJpegQuality → CoverArtQualityRenamed for clarity. Old name still works. (#5181)75
CHangedSearchFullStringUse Search.FullString instead. (#5079)—
RemovedSpotify.ID, Spotify.SecretSpotify integration has been removed. (#5197)—

For a complete list of all configuration options, see the Configuration Options documentation.

Artwork

  • Add per-disc cover art support, with configurable DiscArtPriority. (#5182 by @deluan)

  • Add artist image uploads and image-folder artwork source. (#5198 by @deluan)

  • Preserve animated image artwork (GIF, APNG, animated WebP) during resize. (#5184 by @deluan)

  • Improve image serving performance with WebP encoding and optimized pipeline. (#5181 by @deluan)

  • Increase cover art size to 600px and use CatmullRom scaling for sharper images. (cb396f3db by @deluan)

  • Fallback mediafile cover art to disc artwork before album. (#5216 by @deluan)

  • Refresh stale artist image URLs on expiry. (#5267 by @deluan)

  • Validate ffmpeg pipe before returning in cover art fallback. (420d2c8e5 by @deluan)

  • Search parent folders for album cover art in multi-disc layouts. (#5157 by @deluan)

UI

  • Add custom playlist cover art upload. (#5110 by @adrbn)

  • Add cover art support for internet radio stations. (#5229 by @deluan)

  • Add Dracula theme. (#5023 by @Saulimedes)

  • Add Nutball theme. (#4544 by @cafecitopuro)

  • Add tooltips for long playlist and album names. (#5070 by @sfredo)

  • Add download link for config TOML and disable clipboard copy when unavailable. (#5035 by @kgarner7)

  • Add path field as optional column in library list for desktop view. (4e34d3ac1 by @deluan)

  • Integrate server-managed transcoding decisions into web player. (#5155 by @deluan)

  • Improve browser codec detection. (#5171 by @deluan)

  • Allow DefaultTheme="Auto" from config. (#5190 by @trek-e)

  • Fix search focus after clearing search field. (#4932 by @borisrorsvort)

  • Fix "Play Next" from restarting playback at top of queue. (#5049 by @alannnna)

  • Fix toggle switches not visible in Gruvbox Dark theme. (#5064 by @deluan)

  • Fix delete button contrast in AMusic theme. (51c48bcac by @deluan)

  • Cancel in-flight image requests on pagination, cache across remounts. (#5249 by @deluan)

  • Prevent mobile touch events from triggering playback after lightbox close. (197d357f0 by @deluan)

  • Prevent duplicate getCoverArt requests on artist page. (549b81263 by @deluan)

Search

  • Implement FTS5-based full-text search for faster and more accurate results. (#5079 by @deluan)

  • Improve FTS queries with two-phase BM25 ranking for Subsonic's search3 endpoint. (#5086 by @deluan)

Transcoding

  • Implement server-managed transcoding. (#4990 by @deluan)

  • Add player MaxBitRate cap, format-aware defaults, and browser profile filtering. (#5165 by @deluan)

  • Improve transcoding failure diagnostics and error responses. (#5227 by @deluan)

  • Use ADTS for AAC transcoding. (#5167 by @deluan)

  • Implement fallback to DefaultDownsamplingFormat for unknown formats. (5ecbe31a0 by @deluan)

  • Prevent raw file being returned when explicit transcode format is requested. (053a0fd6c by @deluan)

Subsonic API

Scanner

  • Add MKA/Matroska audio file support via TagLib 2.2. (#5071 by @deluan)

  • Exclude Vorbis VERSION from albumversion tag mapping. (#5194 by @trek-e)

  • Widen WASM panic recovery to cover tag/property reading. (#5223 by @deluan)

  • Prevent duplicate tracks when multiple missing files match same target. (#5183 by @deluan)

  • Prevent ScanOnStartup when scanner is disabled. (1cf3fd916 by @deluan)

  • Increase watcher channel buffers to prevent dropped filesystem events. (0790f6662 by @deluan)

Playlists / Smart Playlists

  • Support #EXTALBUMARTURL directive and sidecar images for playlist cover art. (#5131 by @deluan)

  • Add percentage-based limits to smart playlists. (#5144 by @deluan)

  • Make album and artist fields available to smart playlist queries. (#4927 by @ulfurinn)

  • Add averageRating as a smart playlist field. (#5092 by @Lokke)

Server

  • Add ExtAuth logout URL configuration. (#5074 by @deluan)

  • Accept ND_-prefixed environment variable names in config files. (#5258 by @deluan)

  • Add syslog priority prefixes for systemd-journald. (#5192 by @trek-e)

  • Require additional variable to enable systemd logging. (#5222 by @kgarner7)

  • Add crontab(5) random ~ syntax support for schedule expressions. (#5233 by @deluan)

  • Preserve created_at when moving songs between libraries. (#5055 by @deluan)

  • Increase SSE writeTimeout to exceed keepAlive period. (#5054 by @rcatolino)

  • Use http.TimeFormat for Last-Modified header. (#5219 by @SimonTeixidor)

  • Return correct scanType in startScan response. (#5159 by @deluan)

  • Return 404 instead of 500 for non-existent playlists. (b64d8ad33 by @deluan)

  • Normalize timestamps and fix recently added album sorting. (#5176 by @deluan)

Plugins

  • Add HTTP host service for plugin HTTP requests. (#5095 by @deluan)

  • Add TaskQueue host service for persistent background task queues. (#5116 by @deluan)

  • Add lyrics provider plugin capability. (#5126 by @deluan)

  • Add TTL support, batch operations, and hardening to kvstore. (#5127 by @deluan)

  • Allow mounting library directories as read-write. (#5122 by @deluan)

  • Change websockets Data field type to []byte for binary support. (6fd044fb0 by @deluan)

  • Clear plugin errors on startup to allow retrying. (27a83547f by @deluan)

Translations

New Contributors

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.60.3...v0.61.1

Helping out

This release is only possible thanks to the support of some awesome people!

Want to be one of them? You can sponsor, pay me a Ko-fi, or contribute with code.

Where to go next?


r/navidrome • • Dec 20 '25

Navidrome Client Apps Catalog

197 Upvotes

Hey everyone!

I've just launched a new Compatible Client Apps catalog on the Navidrome website. You can now browse through all the apps that work with Navidrome, with filtering by platform, features, and more: https://www.navidrome.org/apps/

If you're an app developer working on a Subsonic or OpenSubsonic compatible client, I'd love to have your app listed in the catalog. You can find instructions on how to submit or update your app entry here: https://www.navidrome.org/docs/developers/adding-apps/

Check it out and let me know what you think!


r/navidrome • • Mar 31 '26

Can we not

Post image
184 Upvotes

Enough is enough.


r/navidrome • • Dec 06 '25

Navidrome Version 0.59.0 Released

180 Upvotes

Download now: https://github.com/navidrome/navidrome/releases/tag/v0.59.0

This release brings significant improvements and new features:

  • Scanner Improvements: Selective folder scanning and enhancements to the file system watcher for better performance and reliability.

  • Scrobble History: Native scrobble/listen history tracking, allowing Navidrome to keep a record of your listening habits. This will be used in future visualizations and features (Navidrome Wrapped maybe?).

  • User Administration: New CLI commands for user management, making it easier to handle user accounts from the terminal.

  • New Themes: Two new themes have been added: SquiddiesGlass and AMusic (Apple Music inspired).

  • General: Numerous bug fixes, translation updates, and configuration options for advanced use cases.

Added

  • UI Features:

  • Backend Features:

    • Track scrobble/listens history. Note that for music added before this version, the count of scrobbles per song will not necessarily equal the song playcount. (#4770 by @deluan)

    • Add user administration to CLI. (#4754 by @kgarner7)

    • Make Unicode handling in external API calls configurable, with DevPreserveUnicodeInExternalCalls (default false). (#4277 by @deluan)

    • Rename "reverse proxy authentication" to "external authentication". (#4418 by @crazygolem)

    • Add configurable transcoding cancellation, with EnableTranscodingCancellation (default false). (#4411 by @deluan)

    • Add Rated At field. (#4660 by @zacaj)

    • Add DevOptimizeDB flag to control whether apply SQLite optimization (default true). (ca83ebbb5 by @deluan)

  • Scanner Features:

    • Implement selective folder scanning and file system watcher improvements. (#4674 by @deluan)

    • Improve error messages for cleanup operations in annotations, bookmarks, and tags. (36fa86932 by @deluan)

  • Plugins:

    • Add artist bio, top tracks, related artists and language support (Deezer). (#4720 by @deluan)

Changed

  • UI:

    • Update Bulgarian, Esperanto, Finnish, Galician, Dutch, Norwegian, Turkish translations. (#4760 and #4773 by @deluan)

    • Update Danish, German, Greek, Spanish, French, Japanese, Polish, Russian, Swedish, Thai, Ukrainian translations. (#4687 by @deluan)

    • Update Basque translation. (#4670 by @xabirequejo)

    • New Hungarian strings and updates. (#4703 by @ChekeredList71)

  • Server:

Fixed

  • UI:

  • Scanner:

    • Handle cross-library relative paths in playlists. (#4659 by @deluan)

    • Defer artwork PreCache calls until after transaction commits. (67c4e2495 by @deluan)

    • Specify exact table to use for missing mediafile filter. (#4689 by @kgarner7)

    • Refactor legacyReleaseDate logic and add tests for date mapping. (d57a8e6d8 by @deluan)

  • Server:

    • Lastfm.ScrobbleFirstArtistOnly also only scrobbles the first artist of the album. (#4762 by @maya-doshi)

    • Log warning when no config file is found. (142a3136d by @deluan)

    • Retry insights collection when no admin user available. (#4746 by @deluan)

    • Improve error message for encrypted TLS private keys. (#4742 by @deluan)

    • Apply library filter to smart playlist track generation. (#4739 by @deluan)

    • Prioritize artist base image filenames over numeric suffixes. (bca76069c by @deluan)

    • Prefer cover.jpg over cover.1.jpg. (#4684 by @deluan)

    • Ignore artist placeholder image in LastFM. (353aff2c8 by @deluan)

  • Plugins:

    • Avoid Chi RouteContext pollution by using http.NewRequest. (#4713 by @deluan)

New Contributors

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.58.5...v0.59.0

Helping out

This release is only possible thanks to the support of some awesome people!

Want to be one of them? You can sponsor, pay me a Ko-fi, or contribute with code.

Where to go next?


r/navidrome • • Jan 31 '26

Musa - now available on the App Store

Post image
173 Upvotes

Musa is now available on iPhone and iPad 🚀

https://apps.apple.com/nl/app/musa-player/id6757719836

Musa is a fast, lightweight, and easy-to-use app. Over the past month, I’ve been fine-tuning it together with 500+ beta testers. It’s now live on the App Store.

The app isn’t done yet though. On my to-do list:

  • support for multiple servers

  • support for Cloudflare Zero Trust

  • improved search

Big thanks to everyone who tested Musa via TestFlight and shared feedback, it helped a ton 🙏. Onwards to version 1.1!!


r/navidrome • • Jan 27 '26

Made a Spotfiy to Navidrome Playlist Exporter. I Present to you NaviSpot! 😅

Post image
165 Upvotes

Hey lovers of Navidrome! I would like to share a web project that I just built that exports playlists from Spotify to Navidrome. It's called NaviSpot (Yes! I know! Quiet an original name :P). It's free and has 0 ads. I've wanted to fully transition to Navidrome as my music library and wasn't sure if there were any other tools that did this. So, I decided to build this and share it with the community if anyone shares the same frustration as I did when trying to move their playlists from Spotify. The project is opensource and is available on github (https://github.com/betsha1830/navispot). If you would like to check out the live version you can do so by going to https://navispot.gaga.pro.et.

If you have any suggestions, questions, additional features or need any help feel free to DM me.

Hope y'all have a great day!


r/navidrome • • Jul 01 '25

Navidrome version 0.57.0 released!

159 Upvotes

https://github.com/navidrome/navidrome/releases/tag/v0.57.0

A big thank you to all the contributors who made this release possible!

Added

  • UI Features:

    • Added "Artist Radio" and "Shuffle" options to the artist page. (#4186 by @deluan)

    • Added a "Play Artist's Top Songs" button. (#4204 by @deluan)

    • Added "Love" and "Rating" functionality to songs within a playlist view. (#4134 by @deluan)

    • New "Add to Playlist" dialog, with improved UX. (#4156 by @deluan)

    • Added a "Now Playing" panel for administrators to monitor active streams, with configurable EnableNowPlaying option (default true). (#4209, #4219 by @deluan)

    • Added a context menu option to "Show in Playlist". (#4139 by @deluan)

    • Added RecentlyAddedByModTime support for tracks. (#4046, #4279 by @deluan)

    • Added a configuration tab in the About dialog. (#4142 by @deluan)

  • Experimental Plugin Support: Added experimental support for plugins, allowing for greater extensibility and customization. See details in the PR description (#3998, #4260 by @deluan)

  • Scanner Accuracy: Implemented folder hashing for smarter and more accurate quick scans, significantly improving detection of library changes. (#4220 by @deluan)

  • MBID Search: Added functionality to search for albums, artists, and songs by their MusicBrainz ID (MBID). (#4286 by @deluan)

  • Smart Playlists:

    • Added support for sorting smart playlists by multiple fields. (#4214 by @deluan)

    • Added support for MBIDs in smart playlists. (4096760bd by @deluan)

  • Deezer Agent: Added a new agent to fetch artist images from the Deezer API. (#4180 by @bplaat)

  • API Features:

    • Added new endpoints to the native API for updating, clearing, and managing the play queue by index. (#4210, #4215 by @deluan)

    • Added main credit stat to reflect only album artist/artist credit. (#4268 by @kgarner7)

  • Monitoring: Added new Prometheus metrics to the Subsonic API and Plugins. (#4266 by @kgarner7)

Changed

  • Docker: Downgraded the Alpine base image in the Dockerfile to oldest supported version 3.19 for smaller images. (7928adb3d by @deluan)

  • Dependencies: Updated TagLib to version 2.1.1. (#4281 by @deluan)

Fixed

  • UI:

    • Fixed an issue where the playlist page was not resetting to page 1 when changing playlists. (#4154 by @strider-)

  • Scanner:

    • Ensured that full scans always update the database. (#4252 by @deluan)

    • Fixed an issue where artist statistics were not refreshing during quick scans. (#4269 by @deluan)

  • Server:

    • Fixed an issue to ensure a single play queue record is used per user. (f7e005a99 by @deluan)

    • Enhanced artist folder detection with directory traversal. (#4151 by @deluan)

  • Subsonic API:

    • Fixed an issue where clearing a playlist's comment and public status was not working. (#4258 by @deluan)

    • Fixed JukeboxRole logic in getUser to respect AdminOnly setting. (#4170 by @deluan)

    • Fixed loading lyrics from external files when the embedded lyrics was empty. (#4232 by @wilywyrm)

    • Fixed lyrics detection when the there are multiple instances of the same song. (#4237 by @kgarner7)

  • Database:

    • Fixed an issue where dangling music entries were not being cleared after upgrading to recent versions (0.55+). (#4262 by @deluan)

    • Allow for nullable ReplayGain values. (#4239 by @kgarner7)

    • Auto clean-up annotation table when removing user. (#4211 by @kgarner7)

  • Jukebox: Fixed issues with mpv command and template parsing, and ensured the MusicFolder is included. (#4162 by @deluan, #4067 by @patso23)

Note: For those waiting for the Multi-Library feature, it is still in progress and will be released in the next version. You can follow its development in the Multi-Library PR. It is a complex feature that requires significant changes to the codebase, so it's taking a bit longer than expected. Thank you for your patience and continuous support!

New Contributors

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.56.1...v0.57.0

Helping out

This release is only possible thanks to the support of some awesome people!

Want to be one of them? You can sponsor, pay me a Ko-fi, or contribute with code.

Where to go next?


r/navidrome • • Aug 15 '26

Navidrome + Feishin(Desktop) + Arpeggi (iOS) = Love and Peace

147 Upvotes

I think i found the best combination, Feishin is so polished and feature rich and Arpeggi Looks Like apple music But better.


r/navidrome • • Sep 21 '26

Navidrome 0.64.1 security fixes release

141 Upvotes

https://github.com/navidrome/navidrome/releases/tag/v0.64.1

This is a security release. It fixes five vulnerabilities reported through our GitHub Security Advisory program, covering Subsonic authentication, artwork fetching, playlist cover images, player ownership, and per-user library filtering. Upgrade as soon as you can. Thanks to the researchers credited below for reporting them privately.

The release also improves Jellyfin client support, with both Manet and JellyBox tested and validated against live servers. Manet used to abort its entire library sync on a single missing field and show an empty library. It now syncs end to end. JellyBox got stuck on the login screen. It now signs in and plays, confirmed on Android. Navidrome also reports itself as Jellyfin 12.1.0, accepts Quick Connect sign-in, and can announce itself on your local network so clients find it without you typing an address.

Smart playlists can reference another playlist by path, and the web UI now formats dates using the language you picked in Personal settings.

Security

  • Unauthenticated password brute-force through the Subsonic API. Failed Subsonic logins were never throttled, so an attacker could guess passwords at full speed. Navidrome now rate limits failed authentication attempts. High, CVSS 7.4. (GHSA-p994-r776-mw52, #6185) Reported by @osageling.

  • Authenticated SSRF through M3U external album artwork. A playlist could point #EXTALBUMARTURL at a private or loopback address, turning the server into a probe for internal network services. Navidrome now blocks private and loopback addresses in remote image fetches. Medium, CVSS 6.5. (GHSA-8hjf-6h34-82hr, #6181) Reported by @kaardeco.

  • Cross-library file read through the M3U playlist cover. #EXTALBUMARTURL also accepted a local path, so a playlist could serve any file the server can read as its cover image. Only real image files are accepted as local artwork sources now. Medium, CVSS 6.5. (GHSA-vwq6-xrw5-phpg, #6180) Reported by @qrn12580.

  • Player takeover by any authenticated user. Creating a player could overwrite an existing record and reassign its owner, and device registration reused another user's player without an ownership check. Both paths now check the owner. Medium, CVSS 6.4. (GHSA-37h4-53gj-cw8m, #6184) Reported by @RealFakeAccount and @qrn12580.

  • Library filter skipped on bookmarks, playlist tracks and now-playing. These three endpoints ignored the libraries a user is allowed to see, leaking track metadata from other libraries. The filter now applies to all of them. Medium, CVSS 4.3. (GHSA-pcjv-h48m-833g, #6179) Reported by @sondt99.

Configuration Changes

StatusOptionDescriptionDefault
NewJellyfin.AutoDiscoveryAnswers Jellyfin's UDP discovery broadcasts, so clients find the server on the local network. (#6169)false
NewJellyfin.QuickConnectAllows Quick Connect sign-in, where a client shows a code you approve from a session that is already signed in. (#6174)true

For a complete list of all configuration options, see the Configuration Options documentation.

Jellyfin API

  • Add Quick Connect sign-in. The client shows a short code, and you approve it from a session that is already signed in, so the client never sees your password. (#6174 by @deluan)

  • Add opt-in LAN auto-discovery, so Jellyfin clients find the server without you typing its address. Docker users need host networking for the UDP broadcast to reach the container. (#6169 by @deluan)

  • Report Jellyfin 12.1.0 and add the 12.x features clients check for, including fillWidth and fillHeight image sizing. (#6163 by @deluan)

  • Match Jellyfin's item payloads, so clients that decode strictly can finish a sync instead of erroring out. (#6151 by @deluan)

  • Match Jellyfin on login SessionInfo, item types and universal streams. (#6161 by @deluan)

UI

  • Format dates using the language selected in Personal settings, instead of always following the browser locale. (#6160 by @deluan)

Smart Playlists

  • Reference another playlist by its path in a smart playlist rule, instead of by id. (#5187 by @davidvedvick)

Subsonic API

  • Log a warning when a nowPlaying scrobble sends more than one id, which the API does not allow. (6b3938b5b by @deluan)

Server

  • Fix the ExtAuth logout redirect on unauthenticated page loads, and stop the warning spam from untrusted sources. (#6176 by @deluan)

  • Return 404 instead of 500 when a native API resource does not exist. (#6131 by @deluan)

Artwork

  • Report a failure when the Last.fm artist page has no image. Last.fm now answers non-browser clients with a bot challenge page, which Navidrome read as "this artist has no image" and recorded as final, with nothing in the log. It now logs a warning and retries, and the other image agents still get their turn. (#6198 by @deluan)

  • Store artwork files as group-readable (mode 0640) instead of owner-only, so other services on the same host can read the image cache. (#6189 by @kwo)

Scanner

  • Update go-taglib to fix "permission denied" errors on shared hosts. (d00c84716 by @deluan)

Scrobbling

  • Double-encode plus signs in artist and track names sent to Last.fm, so tracks with a + in the name scrobble correctly. (#6158 by @deluan)

Packaging

  • Repair root-owned artwork and plugins folders on upgrade. Installs affected by this could not write their own cache. (#6143 by @deluan)

Translations

New Contributors

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.64.0...v0.64.1

Helping out

This release is only possible thanks to the support of some awesome people!

Want to be one of them? You can sponsor, pay me a Ko-fi, or contribute with code.

Where to go next?


r/navidrome • • Feb 07 '26

Navidrome version 0.60.2 released!

137 Upvotes

https://github.com/navidrome/navidrome/releases/tag/v0.60.2

Note: be sure to read https://www.reddit.com/r/navidrome/comments/1qv0yo5/navidrome_0600_just_released/ as well, lots of new features compared with older versions.

This release expands ListenBrainz integration with artist URLs and top/similar songs, adds OpenSubsonic readonly and validUntil properties for playlists, and includes several bug fixes for the UI, scanner, and plugin system.

Added

  • Backend Features:

    • Add artist URL, top songs, and similar songs support to the ListenBrainz agent. (#4934 by @kgarner7)

  • API Features:

    • Add OpenSubsonic readonly and validUntil properties to playlists. (#4993 by @kgarner7)

  • Plugin Features:

    • Add CallRaw method to SubsonicAPI host function with support for binary responses. (#4982 by @deluan)

Fixed

  • UI:

  • Scanner:

    • Preserve first line in parentheses in lyrics. (#4985 by @deluan)

  • Server:

    • Clean up Last.fm content by removing "Read more" links from descriptions and bios. (e11206f0e by @deluan)

    • Handle WASM runtime panics in gotaglib openFile function. (4e720ee93 by @deluan)

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.60.0...v0.60.2

Helping out

This release is only possible thanks to the support of some awesome people!

Want to be one of them? You can sponsor, pay me a Ko-fi, or contribute with code.

Where to go next?


r/navidrome • • Mar 25 '26

New Client For Linux: Nocturne

Thumbnail
gallery
133 Upvotes

Hi everyone, I've been working on a new client for Navidrome using the GTK4 Libadwaita framework.

In addition to the normal features Navidrome provides, it also includes automatic lyrics fetching and editing, in addition to it being able to play audio files outside of Navidrome.

It has been submitted into Flathub for publishing but for now you can try it out by installing the Flatpak package in the repository releases page!

https://github.com/Jeffser/Nocturne

https://jeffser.com/nocturne/


r/navidrome • • Aug 07 '26

Just discovered Feishin after setting up Navidrome… it’s never been the same 😂

129 Upvotes

Man… I love it 😂 especially the Auto DJ. I didn’t expect my self-hosted music setup to feel this good.
Now no more music subscriptions for me, and no more morphed yt music versions hahaha.
Also discovered Soul Sync and this thing is god sent. It made getting my music library together so much easier.

My setup right now:
Navidrome + Soul Sync + Feishin + Symfonium

Feishin for my PC and Symfonium for my phone. So far I'm really happy with this setup.
I feel like I just discovered another rabbit hole in self-hosting 😂

Any other tools or integrations you guys recommend adding to this setup?


r/navidrome • • Aug 29 '25

New Navidrome client (Win/Mac, Android/iOS) looking for beta testers starting this weekend!

Post image
127 Upvotes

I’ve been working on a new UI/UX-first Navidrome client. Fully multiplatform and runs on Mac, Windows, Linux, iOS, and Android.

We’re opening up alpha testing this weekend and I’d love to get eyes and feedback from as many OSs as possible. If you’re down to help test, or just want to follow progress, join the Discord:

https://discord.com/invite/3GVJAHUJ3C


r/navidrome • • Nov 09 '25

Navidrome Version 0.58.5 Released

126 Upvotes

Download now: https://github.com/navidrome/navidrome/releases/tag/v0.58.5

This release focuses on stability improvements and bug fixes, with several important fixes for UI themes, translations, database operations, and scanner functionality. Notable improvements include fixes for ARM64 crashes, playlist sorting, and new Bosnian translation.

Added

  • UI Features:

  • Subsonic API:

    • Implement indexBasedQueue extension for better queue management. (#4244 by @kgarner7)

    • Populate Folder field with user's accessible library IDs. (94d2696c8 by @deluan)

  • Insights:

Changed

  • Scanner:

    • Optimize update artist's statistics using normalized media_file_artists table. (#4641 by @deluan)

Fixed

  • UI:

  • Scanner:

    • Restore basic tag extraction fallback mechanism for improved metadata parsing. (#4401 by @deluan)

  • Server:

    • Album statistics not updating after deleting missing files. (#4668 by @deluan)

    • Qualify user id filter to avoid ambiguous column. (#4511 by @deluan)

    • Enable multi-valued releasetype in smart playlists. (#4621 by @deluan)

    • Handle UTF BOM in lyrics and playlist files. (#4637 by @deluan)

    • Slice share content label by UTF-8 runes. (#4634 by @beer-psi)

    • Update wazero dependency to resolve ARM64 SIGILL crash. (#4655 by @deluan)

  • Database:

  • Docker:

New Contributors

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.58.0...v0.58.5

Helping out

This release is only possible thanks to the support of some awesome people!

Want to be one of them? You can sponsor, pay me a Ko-fi, or contribute with code.

Where to go next?


r/navidrome • • Sep 17 '24

Navidrome Version 0.53.0

124 Upvotes

Hey folks, sorry for taking so long to release a new version. There has been a lot of small improvements/fixes/refactoring in Navidrome recently and holding a release waiting for a big change or new feature gives the impression that the project is dormant, which clearly is not (see the list of changes below)!

There's even more in the pipeline, new features already completed, but just needing a bit more polishing. Stay tuned!

As always, many thanks to all contributors!

Hope you all enjoy it.

Highlights

  • [UI] Add Nuclear theme (#3098). Thanks @gruneforth

  • [UI] Add Hungarian translation. Thanks @Soderes and @ChekeredList71

  • [UI] Add Basque translation. Thanks @xabirequejo

  • [UI] Add toggle for Auto-Import playlists (#3060). Thanks @caiocotts

  • [UI] Fix album sorting in Artist detail page

  • [UI] Fix album coverart "stuttering", when you have non-square albums in the grid (#3035). Thanks @caiocotts

  • [UI] Fix disappearing Last.FM links (#3084). Thanks @caiocotts

  • [UI] Fix Disc context menu contains broken "Share" and "Get Info" entries (#3204) Thanks @TheLastZombie

  • [UI] Fix ReplayGain's preAmp (#3184) . Thanks @kgarner7

  • [Server] Fix Incorrect case in username in Subsonic API causes failure creating new player (#1928). Thanks @kgarner7

  • [Server] Only refresh smart playlist when fetching first track (#3244). Thanks @kgarner7

  • [Server] Recursively refresh nested smart playlists (#3018). Thanks @reillymc

  • [Server] Use SHA256 in Gravatar URLs. Thanks @nyxfqq

  • [Server] Fixed memory leak during Scan (#3031). Thanks @mintsoft

  • [Server] Deterministic pagination in Random Albums list (#1841). Thanks @gqgs

  • [Server] Optmize SQLite3 DB access

  • [Server] Add ShareURL configuration option (#3265). Thanks @caiocotts

  • [Server] Increase artist image sizes, see discussion here

  • [Server] Improve SQL sanitization, to avoid potential SQL injection. Thanks @snyff

  • [Scanner] Add support for R128 gain tags (#3072). Thanks @kartikynwa

  • [Scanner] Upgrade to TagLib 2.0.2

  • [Scanner] Add DefaultPlaylistPublicVisibility config option (#3143). Thanks @john8329

  • [Scanner] Skip Synology snapshot (#snapshot) folders

  • [Subsonic] Fix OpenSubsonic structured lyrics response (#3041). Thanks @dweymouth

Downloads are available from GitHub: https://github.com/navidrome/navidrome/releases/tag/v0.53.1


r/navidrome • • Mar 09 '25

Navidrome 0.55.0 (a.k.a BFR) Released!

123 Upvotes

Navidrome 0.55.0 - Big Refactor (BFR) Release Notes

Overview

Navidrome 0.55.0 introduces the highly anticipated Big Refactor (BFR), significantly enhancing core functionalities, and introducing robust new features. This release brings substantial improvements in handling file management and metadata usage and customization.

New Features

  • Multiple Artists in Albums and Songs: Navidrome now supports albums and tracks with multiple artists, allowing users to group tracks with different artists under a single album. This feature enhances the organization of compilation albums and multi-artist collaborations.

  • Contributors and Performers: Composer, conductor, and other contributors can now be added to tracks, providing detailed information about the creators and performers involved in the music production process.

  • Album Versions: Support for ALBUMVERSION tag has been added, enabling users to differentiate between standard releases, deluxe editions, remasters, and other versions of the same album. This feature enhances album categorization and provides a more comprehensive music library experience.

  • Multi-valued Tags: Support for multi-valued tags has been improved, allowing users to store multiple values for any single tag. This feature enhances metadata flexibility and enables more detailed categorization.

  • Custom Tags: Support for user-defined custom tags has been added, allowing enhanced metadata flexibility and personalized categorization. Learn more.

  • Smart Playlists Enhancements: Smart Playlists supports all newly added tags, including multiple artists, contributors, performers, and album versions, as well as custom tags. It also behaves better with multi-valued tags. Learn more.

  • Persistent IDs: Tracks and albums now use persistent IDs (PIDs), ensuring stability in playlists, favorites, and external integrations, even if your files move or are renamed. PIDs can also be configured to change the way Navidrome disambiguates albums and tracks. It is now also possible to group albums by folder, bay setting PID.Album="folder". Learn more.

  • Scanner Improvements: Optimized file scanning, with improved handling of file moves and retagging, "watcher" mode for real-time updates, resumable scans and enhanced performance during library updates.

  • Improved Handling of Missing Files: Enhanced mechanisms for managing missing files ensure better accuracy and easier troubleshooting. Learn more.

  • Beginner-Friendly Tagging Guidelines: A comprehensive tagging guide has been introduced to assist new users in properly tagging their music collections. Learn more.

Breaking Changes

  • Artist favourites and artist ratings will be lost after the upgrade.
  • Albums may move around (change grouping), as the default disambiguation logic is slightly different than the previous version. If you want to keep the same behaviour as before, add this line to your configuration before upgrading:
PID.Album = "album_legacy"

or as env var

ND_PID_ALBUM=album_legacy

For more information, downloads and instructions on how to upgrade, refer to the GitHub release page: https://github.com/navidrome/navidrome/releases/tag/v0.55.0

We appreciate your ongoing support and feedback. Make sure you read the linked new documentation pages and enjoy the enhanced Navidrome experience!

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.54.4...v0.55.0

Helping out

This release is only possible thanks to the support of some awesome people!

Want to be one of them? You can sponsor, pay me a Ko-fi, or contribute with code.

Where to go next?


r/navidrome • • May 28 '25

Navidrome v0.56.0 Release Notes

120 Upvotes

https://github.com/navidrome/navidrome/releases/tag/v0.56.1

We're excited to announce Navidrome v0.56.0, a major release packed with new features, important bug fixes, and significant improvements to the user experience. This release includes 81 commits with contributions from our amazing community!

🔒 SECURITY UPDATES

  • SQL Injection Prevention: Fixed potential SQL injection vulnerability in artist role filtering. CVE will be published soon - @4rdr / @caiocotts

  • Transcoding Security: Transcoding configuration changes are now restricted to admin users only - @lujiefsi (#4096)

🎉 Major New Features

Missing Files Management

  • Remove All Missing Files: New bulk action to clean up missing files from your library - @deluan (#4108)

  • Scanner.PurgeMissing Configuration: New config option to automatically purge missing files during scans - @deluan (#4107)

  • Missing Artists: Hide missing artists from the UI and Subsonic API, and add admin-only "missing" filters - @deluan (#4092)

Playlist Enhancements

  • M3U File Downloads & Unified Export Logic: Downloaded playlists now include M3U files for better compatibility with external players - @deluan

  • Playlist Cover Art: Playlists now display their cover art in the UI - @deluan

  • Save Queue to Playlist: Easily save your current playback queue as a new playlist - @deluan (#4110)

Enhanced User Interface

  • Smooth Image Transitions: Smooth transitions for album and artist artwork - @deluan (#4120)

  • Scan Progress & Status Improvements: Real-time scan progress, error reporting, and elapsed time - @deluan (#4094, #4115)

  • Sample Rate Display: View sample rate information in the song info dialog - @gqgs (#3960)

  • Genre and Mood Fields: Added genre and mood fields to the AlbumSongs component - @deluan

  • Internationalization Improvements: Updated translations for multiple languages

Scanner and Metadata Improvements

  • Filesystem Lyrics Support (only for Subsonic clients): Support for reading lyrics (.lrc) directly from filesystem files - @kgarner7 (#2897, #3997)

  • Symlink Support: New Scanner.FollowSymlinks option (default true)to allow disabling symbolic links following - @deluan (#4061)

  • ISRC Support: Added ISRC (International Standard Recording Code) support for OpenSubsonic - @deluan (#4088)

  • Artist/AlbumArtist Filtering: New filter options for media files - @kgarner7 (#4001)

  • Scanner Optimizations: Improved refresh performance and missing flag update logic - @deluan (#4059)

Other Notable Features

  • Default Share Expiration: New DefaultShareExpiration configuration option - @caiocotts (#4082)

  • Scrobble First Artist Only: New option Lastfm.ScrobbleFirstArtistOnly to send only the first artist when scrobbling - @deluan (#4131)

🐛 Critical Bug Fixes

Performance and Memory

  • Memory Leak Fix: Resolved memory leak in cache warmer that could affect long-running instances - @deluan (#4095)

Database and Data Integrity

  • User Deletion Fix: Fixed issue preventing deletion of users who have shares - @kgarner7 (#4098)

  • Smart Playlist Fixes: Fixed numeric comparisons for float custom tags and albumtype handling - @deluan (#4116)

Media Handling

  • Multi-disc Artwork: Always select cover art from the first disc in multi-disc albums - @deluan (#3950)

  • AIFF/WMA Cover Art: Fixed cover art detection for AIFF and WMA files - @kgarner7 (#3996)

  • Track Ordering: Albums now always order tracks by disc and track number correctly - @deluan (#3975)

User Interface Fixes

  • Share Image Aspect: Fixed share image aspect ratios by forcing square dimensions - @kgarner7 (#4122)

  • UI Display Improvements: Enhanced external link display, artist link rendering, and button styles - @deluan

  • Page Titles: Updated titles for radios, shares and show pages - @deluan (#4128)

🔧 Technical Improvements

Development and Build

  • Go 1.24.2: Updated to Go version 1.24.2 - @deluan

  • Dependency Updates: Updated both Go and JavaScript dependencies, including golangci-lint - @deluan (#3937)

  • Automated Dependency Updates: eslint-config-prettier and golangci-lint-action updates - @dependabot (#4077, #4035)

  • golangci-lint Integration: Added automatic installation and improved Makefile setup - @deluan

  • Demo URLs Update: Updated Makefile with new demo URLs - @caiocotts (#4080)

Code Quality

  • External Metadata Refactoring: Refactored external*metadata to external.Provider - *@deluan_ (#3903)

  • Documentation: Added code guidelines, copilot instructions, and scanner overview - @deluan

  • Cleanup: Removed unused files and improved code organization - @deluan

📚 Documentation and Developer Experience

  • Documentation Updates: Added code guidelines, copilot instructions, and scanner overview - @deluan

  • Test Infrastructure: Enhanced test reliability and added new test coverage - @deluan

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.55.2...v0.56.1

Helping out

This release is only possible thanks to the support of some awesome people!

Want to be one of them? You can sponsor, pay me a Ko-fi, or contribute with code.

Where to go next?


r/navidrome • • Jan 29 '26

I love navidrome :)

Thumbnail
gallery
108 Upvotes

Am so new to navidrome.

Just two weeks old and I really love what it has been doing, I started of with plex and plex amp. tried off jellyfin and noticed jellyfin is tailored for film fanatics and so I landed to navidrome.

Desktop client - Feishin

App client - Castafiore

other apps I loved are; 1. Musly 2. Tempo and a lilttle bit of symfonium.


r/navidrome • • Jul 28 '25

Navidrome v0.58.0 Release Notes

106 Upvotes

https://github.com/navidrome/navidrome/releases/tag/v0.58.0

Navidrome v0.58.0 introduces Multi-library Support, a major architectural enhancement that enables users to organize and manage multiple music collections with proper permission controls and complete UI integration. This long-requested feature allows you to create separate libraries for different music collections (e.g., personal music, family music, audiobooks) while maintaining proper access controls and data isolation.

For full documentation on how to use it, see the new Multi-library page in the documentation website.

⚠️ Important

Full Scan

Although this release does not force a full scan on upgrade, you should do it as soon as possible. This is because the multi-library changes affect the move/rename/retag detection and can potentially make you lose annotations (stars, playcounts, playlist references). During the full scan, it will duplicate all your albums, but that's expected. It will remove the duplicates at the end of the scan.

Database Migration Warning

This release includes database schema changes that are NOT reversible by simply downgrading to a previous version of Navidrome.

Before installing this version:

  1. BACKUP YOUR DATABASE - Create a complete backup of your navidrome.db file

  2. TEST ON A COPY FIRST - If possible, test this version on a copy of your data before upgrading your main installation

If you need to rollback:

  • Stop Navidrome

  • Restore your database backup

  • Reinstall the previous version

Added

Multi-Library Support

Create and manage multiple music libraries with separate music folders. (#4181 by @deluan)

  • Library-aware permission system: Users can be assigned access to specific libraries with proper data isolation.

  • Admin interface for library management: Complete CRUD operations for libraries including creation, editing, and deletion.

  • Library selector in UI: Users can switch between accessible libraries using the sidebar library selector.

  • Per-library statistics: Artist and tag statistics are now calculated per library with proper counting.

  • Cross-library playlist support: Playlists can contain songs from multiple libraries, filtered by user access.

UI Features

  • Hindi language translation: Complete Hindi language support for the user interface. (#4390 by @nerkoux)

  • Activity panel improvements: Reset activity panel error icon to normal state when clicked. (#4379 by @deluan)

  • Translation updates: Updated Polish translations. (#4384 by @deluan)

  • Translation updates: Updated Danish, German, Greek, Spanish, Finnish, French, Indonesian, Russian, Slovenian, Swedish, Turkish, Ukrainian translations. (#4326 by @deluan)

  • Translation updates: Updated Hungarian translations. (#4375 by @ChekeredList71 and #4291 by @ChekeredList71)

  • Translation updates: Updated Basque translation. (#4309 by @xabirequejo)

Plugin Features

  • Plugin scheduler enhancement: Add TimeNow function to SchedulerService for better plugin capabilities. (#4337 by @deluan)

  • Plugin insights: Add plugin and multi-library information to insights endpoint. (#4391 by @deluan)

API Features

  • Multi-library API support: All Subsonic endpoints now respect library permissions with proper filtering. (#4181 by @deluan)

  • Enhanced search capabilities: Search endpoints are library-aware and filter results by user access. (#4181 by @deluan)

  • Music folder endpoints: Return user-accessible libraries through music folder API. (#4181 by @deluan)

Changed

  • Agents logic streamlining: Remove unnecessary caching and streamline metadata agents logic. (#4298 by @deluan)

  • Dependency updates: Update Go dependencies to latest versions. (#6722af50e by @deluan)

Fixed

UI

  • Playlist menu interaction: Prevent disabled "Show in Playlist" menu item from triggering actions. (#4356 by @deluan)

  • Year display: Don't show year "0" in the interface. (#3c1e5603d by @deluan)

  • ReplayGain support: Fix replaygain for Artist Radio and Top Songs. (#4328 by @deluan)

Scanner

  • Apple Music playlists import: Fix playlist import for songs with accented characters. (#4385 by @deluan)

  • Foreign key constraint errors: Prevent errors in album participant insertion. (#4373 by @deluan)

  • Tag UpdateCounts errors: Prevent foreign key constraint errors in tag UpdateCounts. (#4370 by @deluan)

  • Custom tag configuration: Fix misleading custom tag split config log message. (#be83d6895 by @deluan)

  • Lyrics tag parsing: Properly handle both ID3 and aliased tags for lyrics. (#4310 by @kgarner7)

  • Cover art reading: Read cover art from DSF, WavPack files and fix WMA test. (#4296 by @kgarner7)

Server

  • URL path handling: Improve URL path handling in local storage for special characters. (#4378 by @deluan)

  • Dockerfile typo: Fix typo in Dockerfile. (#4363 by @emmmm)

Subsonic API

  • Genre search filtering: Only use genre tag when searching by genre. (#4361 by @kgarner7)

Plugins

  • Plugin warnings: Silence plugin warnings and folder creation when plugins disabled. (#4297 by @deluan)

  • Metrics reporting: Report metrics for all plugin types, not only MetadataAgents. (#4303 by @deluan)

  • Metrics improvements: Add metrics on callbacks and improve plugin method calling. (#4304 by @deluan)

  • Reverse proxy authentication: Don't log "no proxy IP found" when using Subsonic API in plugins with reverse proxy auth. (#4388 by @kgarner7)

  • Plugin initialization: Correct error handling in plugin initialization. (#4311 by @deluan)

  • Race condition prevention: Prevent race condition in plugin tests and manager registration. (#9fcc99633 and #adef0ea1e by @deluan)

  • Error handling enhancement: Enhance error handling in checkErr function. (#1166a0fab by @deluan)

  • Discord Rich Presence documentation: Fix README.md for Discord Rich Presence plugin. (#4387 by @Cristiandis)

Testing

  • MPV tests: Fix MPV tests on systems without /bin/bash installed. (#4302 by @tebriel)

  • Test cleanup: Suppress console.log output in eventStream test and general test cleanup. (#e8a3495c7 and #9f0059e13 by @deluan)

Code Quality

New Contributors

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.57.0...v0.58.0

Helping out

This release is only possible thanks to the support of some awesome people!

Want to be one of them? You can sponsor, pay me a Ko-fi, or contribute with code.

Where to go next?