Navidrome

Media

A self-hosted music server and streamer compatible with Subsonic clients.

Latest v0.63.2 · by NavidromeWebsitenavidrome/navidrome

Release activity

Release activity — 10 releases across 10 days since Feb 3, 2026. Each cell is one day; darker means more releases that day. Nothing is recorded before Feb 3, 2026. Older weeks are hidden at this screen width.
MayJunJulAug
SundayNo releases on Apr 26, 2026No releases on May 3, 2026No releases on May 10, 2026No releases on May 17, 2026No releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026
MondayNo releases on Apr 27, 2026No releases on May 4, 2026No releases on May 11, 2026No releases on May 18, 2026No releases on May 25, 2026No releases on Jun 1, 20261 release on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026
TuesdayNo releases on Apr 28, 2026No releases on May 5, 2026No releases on May 12, 2026No releases on May 19, 2026No releases on May 26, 2026No releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026
WednesdayNo releases on Apr 29, 2026No releases on May 6, 2026No releases on May 13, 2026No releases on May 20, 2026No releases on May 27, 2026No releases on Jun 3, 2026No releases on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 20261 release on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026
ThursdayNo releases on Apr 30, 2026No releases on May 7, 2026No releases on May 14, 2026No releases on May 21, 2026No releases on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 20261 release on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026
FridayNo releases on May 1, 2026No releases on May 8, 2026No releases on May 15, 2026No releases on May 22, 2026No releases on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026
SaturdayNo releases on May 2, 2026No releases on May 9, 2026No releases on May 16, 2026No releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 20261 release on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026

10 releases since Feb 3, 2026

Changelog

v0.63.2

Fixed 3
  • Surface host service failures when loading plugins
  • Resolve file symlinks with the production local storage FS in scanner
  • Reject NSP mixing top-level 'any' and 'all' in smartplaylist
Changelog
Bug fixes
  • 205c85da5523338807808202d8877ccaa6e82776: fix(plugins): surface host service failures when loading plugins (#5756) (@deluan)
  • 7fa13761d734159e2f0a502a31affacc88e66d37: fix(scanner): resolve file symlinks with the production local storage FS (#5755) (@deluan)
  • e91687e760a8b4e19dc74b6a9b1ff7f3674565ce: fix(smartplaylist): reject NSP mixing top-level 'any' and 'all' (#5759) (@deluan)
Build process updates
  • be10f89c117925fabf10394b8d2962a370108b97: ci: don't skip release jobs after the DB migration check on tag pushes (#5760) (@deluan)
  • 4381366e663b4647cfec1eb5597c39c3c42e9d7a: ci: validate DB migration order on pull requests (#5750) (@deluan)
Other work
  • 116a4407184b6f21221a6aa7702fb738a3915773: test(scanner): fix flaky Windows search_normalized rescan test (#5758) (@deluan)

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.63.1...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?
View originalPermalink
How v0.63.2 went

v0.63.1

Fixed 4
  • Prevent 32-bit startup crash (segfault/SIGILL) in downloaded binaries
  • Discard buffered scrobbles when a plugin is removed
  • Populate username for buffered plugin scrobbles
  • Rewrite systemd service template for kardianos/service v1.3.0
Changelog
Bug fixes
  • 052f10fd68984a01cc2c87eee9edcc16dbfa6ad5: fix(build): prevent 32-bit startup crash (segfault/SIGILL) in downloads binaries (#5739) (@deluan)
  • f48943c05873dad7cab4e159747453a5d7677f74: fix(plugins): discard buffered scrobbles when a plugin is removed (#5737) (@deluan)
  • 4652b4660205abf38a484a2dc7856b4f6d5c24aa: fix(plugins): populate username for buffered plugin scrobbles (#5736) (@deluan)
  • 42d4363f6135167b7fce5c8fd9070a25fab10172: fix(service): rewrite systemd service template for kardianos/service v1.3.0 (#5743) (@deluan)

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.63.0...v0.63.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?
View originalPermalink
How v0.63.1 went

v0.63.0

Added 4
  • Add structured sidecar lyrics support with OpenSubsonic v2 karaoke cues and agent layers in TTML, ELRC, SRT and YAML formats with word-by-word timing and multi-voice information
  • Add Rosé Pine themes
  • Add Scanner.ArtistSplitExceptions configuration option to protect artist names from being split by tag separators
  • Add Scanner.IgnoreDotFolders configuration option to allow indexing dot-prefixed folders
Changed 7
  • Rank exact matches above prefix matches in search results
  • Enable sharing by default; set EnableSharing to false to restore the previous behavior
  • Update LyricsPriority default to include new sidecar lyrics formats
  • Improve full-library synchronization via search3 to perform at flat time at every offset instead of degrading with depth, achieving roughly 30-50x faster performance at deep offsets and about 20x faster complete sync on ~1M-track libraries
  • Make getRandomSongs approximately 13x faster on large libraries
  • Optimize database queries with annotation-index-friendly smart playlist filters, leaner list-count queries, and new composite indexes for album and artist song sorts
  • Allow lyrics plugins to return lyrics in any supported format, not just LRC
Fixed 9
  • Enforce per-library access on playlist import and sharing paths to prevent users with access to only some libraries from resolving or being served tracks from unauthorized libraries
  • Resolve symlinks to their real target when classifying files during scan to prevent misclassification
  • Fix artists with short or non-ASCII names being unfindable after the FTS5 search migration
  • Fix pagination-integrity issue that eliminated duplicate and short pages that could corrupt library syncs
  • Fix transient jump to a wrong song when switching tracks in the web player
  • Fix profile self-edits not reporting success or failure

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.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?
View originalPermalink
How v0.63.0 went

v0.62.0

Added 10
  • Support for OpenSubsonic sonicSimilarity extension enabling audio-based similarity through plugins with getSonicSimilarTracks and findSonicPath endpoints
  • New OpenSubsonic playbackReport extension for playback reporting in the UI
  • ReplayGain fields in smart playlists
  • New isMissing and isPresent operators for smart playlists
  • Five new UI themes
  • EnforceNonRootUser option to exit early on startup if Navidrome is running as root
Changed 3
  • Redesigned Now Playing experience and playback reporting panel using OpenSubsonic playbackReport extension
  • Renamed EnableTranscodingCancellation to Transcoding.EnableCancellation and moved under Transcoding section
  • Renamed SimilarSongsMatchThreshold to Matcher.FuzzyThreshold and moved under Matcher section
Security 7
  • Enforce per-user ownership on share reads to fix cross-account disclosure of other users' shares and share tokens
  • Enforce ownership atomically on player and share updates to fix cross-tenant player takeover and share-update IDOR
  • Require signed state token on Last.fm link callback to fix unauthenticated scrobble session hijack
  • Validate token expiration and share existence on public share stream endpoints to fix JWT expiration bypass
  • Restrict transcoding configuration reads to admins to fix disclosure of admin-only configuration to non-admin users
  • Require admin access for Subsonic internet radio station management endpoints to fix missing authorization
  • Cap concurrent transcodes to prevent ffmpeg-based denial of service with per-server and per-user limits

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
DeprecatedEnableTranscodingCancellationTranscoding.EnableCancellationRenamed and moved under the new Transcoding section. (#5523)false
DeprecatedSimilarSongsMatchThresholdMatcher.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?
View originalPermalink
How v0.62.0 went

v0.61.2

Added 1
  • Add MaxImageUploadSize configuration option to set maximum allowed size for uploaded cover art images
Changed 9
  • Map ORIGYEAR tag for VorbisComment and MP4 formats to match ID3 behavior
  • Clamp target channels to codec limit when transcoding to fix issues with codecs that do not support high channel counts
  • Play WAV files directly in browsers instead of transcoding
  • Prevent theme CSS filters from affecting disc cover art
  • Refine image filters for playing and paused states in SquiddiesGlass theme
  • Add file path to Scrobbler and Lyrics plugin TrackInfo
Fixed 7
  • Fix issue with empty ID3v2 frames in go-taglib
  • Always emit required created field on AlbumID3 responses
  • Allow shared disc art from unnumbered filenames in single-folder albums
  • Fix race condition between KVStore cleanup goroutine and Close
  • Surface real SQLite error when backup step fails
  • Improve error handling in configuration validation
  • Resolve schema inconsistencies in library_artist and scrobble_buffer tables

Another round of bugfixes. Transcoding now properly clamps target channels to codec limits, WAV files play directly in browsers without unnecessary transcoding, and the scanner picks up ORIGYEAR tags for VorbisComment and MP4 formats. Cover art handling got a few fixes too, including configurable max upload size. Plugin developers now get the file path in TrackInfo for Scrobbler and Lyrics plugins.

Configuration Changes
StatusOptionDescriptionDefault
NewMaxImageUploadSizeMaximum allowed size for uploaded cover art images. Accepts human-readable values like '10MB', '1GB'. (#5335)10MB

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

UI
  • Prevent theme CSS filters from affecting disc cover art. (c91721363 by @deluan)
  • Refine image filters for playing and paused states in SquiddiesGlass theme. (4570dec67 by @deluan)
  • Update Chinese (Simplified) translation. (#5323 by @fxj368)
  • Update Russian translations. (#5329 by @amakeenk)
Scanner
  • Map ORIGYEAR tag for VorbisComment and MP4 formats, bringing them in line with ID3. (#5303 by @obskyr)
  • Fix issue with empty ID3v2 frames in go-taglib. (1de4e43d2 by @deluan)
Subsonic API
  • Always emit required created field on AlbumID3 responses. (#5340 by @deluan)
Artwork
  • Make max image upload size configurable. (#5335 by @m8tec)
  • Allow shared disc art from unnumbered filenames in single-folder albums. (#5344 by @deluan)
Transcoding
  • Clamp target channels to codec limit, fixing issues with codecs that don't support high channel counts. (#5345 by @deluan)
  • Play WAV files directly in browsers instead of transcoding. (#5309 by @deluan)
  • Include ffprobe in MSI installer and fall back gracefully when absent. (#5326 by @deluan)
Plugins
  • Add file path to Scrobbler and Lyrics plugin TrackInfo. (#5339 by @J0R6IT0)
  • Fix race condition between KVStore cleanup goroutine and Close. (478845bc5 by @deluan)
Server
Database
  • Resolve schema inconsistencies in library_artist and scrobble_buffer tables. (#5047 by @bvdwalt)
New Contributors

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.61.1...v0.61.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?
View originalPermalink
How v0.61.2 went

v0.61.1

Added 4
  • Add EnableWebPEncoding config option to opt-in to WebP encoding for resized artwork
  • Add UICoverArtSize config option for configurable UI cover art size (200–1200 pixels, defaulting to 300px)
  • Add sampleRate, codec, and missing fields for smart playlist criteria
  • Add missing viper defaults for MPVPath, ArtistImageFolder, and Plugins.LogLevel so they can be overridden via environment variables and config files
Changed 2
  • Lower DevArtworkMaxRequests default from max(4, NumCPU) to max(2, NumCPU/2) to reduce load on low-power hardware
  • Update go-sqlite3 to v1.14.38 and go-toml to v2.3.0
Fixed 4
  • Address WebP performance regression on low-power hardware by preserving original image format when WebP encoding is disabled
  • Preserve animation for square thumbnails with animated images
  • Strip OpenSubsonic extensions from playlists for legacy clients to improve compatibility
  • Return proper artwork ID format in getInternetRadioStations
Removed 1
  • Remove DevJpegCoverArt config option, replaced by EnableWebPEncoding

This patch release addresses a WebP performance regression on low-power hardware introduced in v0.61.0, adds a new EnableWebPEncoding config option and a configurable UI cover art size, and includes several Subsonic API and translation fixes.

Configuration Changes
StatusOptionDescriptionDefault
NewEnableWebPEncodingOpt-in to WebP encoding for resized artwork. When false (default), Navidrome uses JPEG/PNG (preserving the original source format), avoiding the WebP WASM encoder overhead that caused slow image processing on low-power hardware in v0.61.0. Set to true to re-enable WebP output. Replaces the internal DevJpegCoverArt flag. (#5286)false
NewUICoverArtSizeSize (in pixels, 200–1200) of cover art requested by the web UI. It was increased from 300px to 600px in 0.61.0; now configurable and defaulting to 300px to reduce image encoding load on low-power hardware. Users on capable hardware can raise it for sharper thumbnails. (#5286)300
ChangedDevArtworkMaxRequestsDefault lowered from max(4, NumCPU) to max(2, NumCPU/2) to reduce load on low-power hardware. (#5286). (Note: this is an internal configuration and can be removed in future releases)max(2, NumCPU/2)
RemovedDevJpegCoverArtReplaced by the user-facing EnableWebPEncoding option. (#5286)

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

Server
  • Add missing viper defaults for MPVPath, ArtistImageFolder, and Plugins.LogLevel so they can be overridden via environment variables and config files. (220019a9f by @deluan)
  • Update go-sqlite3 to v1.14.38 and go-toml to v2.3.0. (6109bf519 by @deluan)
Artwork
  • Address WebP performance regression on low-power hardware by preserving original image format when WebP encoding is disabled, and adding encoder/decoder selection logging. (#5286 by @deluan)
  • Preserve animation for square thumbnails with animated images. (4030bfe06 by @deluan)
Smart Playlists
  • Add sampleRate, codec, and missing fields for smart playlist criteria. (80c1e6025 by @deluan)
Subsonic API
  • Strip OpenSubsonic extensions from playlists for legacy clients to improve compatibility. (23f355637 by @deluan)
  • Return proper artwork ID format in getInternetRadioStations. (c60637de2 by @deluan)
Translations

Full Changelog: https://github.com/navidrome/navidrome/compare/v0.61.0...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?
View originalPermalink
How v0.61.1 went

v0.61.0

Added 14
  • Support per-disc cover art with automatic disc-specific image detection for multi-disc albums
  • Enable custom artwork uploads for playlists, artists, and internet radios directly from the UI
  • Preserve animated images in the artwork pipeline
  • Implement WebP encoding for faster image processing
  • Rebuild search engine on SQLite FTS5 with two-phase BM25 ranking for faster and more accurate results
  • Implement OpenSubsonic Transcoding extension with server-managed transcoding that detects client codecs and applies format-aware bitrate defaults
Changed 1
  • Rename CoverJpegQuality configuration option to CoverArtQuality for clarity, with backward compatibility
Fixed 2
  • Add ownership checks to share Delete and Update operations to prevent unauthorized access to other users' shares
  • Clear server-managed fields in savePlaylist to prevent field injection via REST API
Removed 1
  • Remove built-in Spotify integration and Spotify.ID and Spotify.Secret configuration options
Security 1
  • Bump golang.org/x/image to v0.38.0 to address CVE-2026-33809

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)
ChangedCoverJpegQualityCoverArtQualityRenamed 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.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?
View originalPermalink
How v0.61.0 went

v0.60.3

Added 1
  • Add explicit status support in smart playlists
Fixed 8
  • Log warning when metadata extraction fails
  • Pass filename hint to gotaglib's OpenStream for format detection
  • Resolve data race on conf.Server access in getScanner
  • Validate JSONP callback parameter in Subsonic API
  • Add missing keys in Danish translation
  • Linux service should restart when upgrading
  • Prevent data race on conf.Server during cleanup in e2e tests
  • Split reflex -R flags to preserve directory exclusion optimization
Changelog
New Features
  • 34c6f12aeeb11144100d764b06248e0a40ccb126: feat(server): add explicit status support in smart playlists (#5031) (@kgarner7)
Bug fixes
  • 408aa78ed53f0299d35e758cd422fd0b9dfe93a3: fix(scanner): log warning when metadata extraction fails (@deluan)
  • ed79a8897bc16602ebadb4e3a253d87f1599642f: fix(scanner): pass filename hint to gotaglib's OpenStream for format detection (#5012) (@deluan)
  • fd09ca103fd9fd14f5d0ecd3df6efd839a9df560: fix(scanner): resolve data race on conf.Server access in getScanner (@deluan)
  • 0a4722802af833caa8dd794fa8c25f8d0a97dd06: fix(subsonic): validate JSONP callback parameter (@deluan)
  • eb9ebc3fba6545334c2c13d778273c1bd55135ee: fix(ui): add missing keys in Danish translation (#5011) (@denisarissa)
  • 62f9c3a458bd101df1d059eeaf8bce43e7c97c21: fix: linux service should restart when upgrading (#5001) (@mintsoft)
  • e05a7e230f7a72b6c2e7d789006df63b688c30e2: fix: prevent data race on conf.Server during cleanup in e2e tests (@deluan)
  • bee0305831a76c49a46e7a6b0cbe09fd865abebc: fix: split reflex -R flags to preserve directory exclusion optimization (@deluan)
Other work
  • 302d99aa8b17e381cbd5a6c78d58125a9e0d6755: chore(deps): update dependencies in go.mod and go.sum (@deluan)
  • c80ef8ae41d692f971baf2ebab1a710a3182108f: chore: ignore _test.go files in reflex conf (@deluan)
  • 8319905d2c913b817a896a0b79a44b6b1cffe8c9: test(subsonic): add comprehensive e2e test suite for Subsonic API (#5003) (@deluan)

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

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?
View originalPermalink
How v0.60.3 went

v0.60.2

Added 3
  • Add artist URL, top songs, and similar songs support to the ListenBrainz agent
  • Add OpenSubsonic readonly and validUntil properties to playlists
  • Add CallRaw method to SubsonicAPI host function with support for binary responses
Fixed 5
  • Fix Last.fm URL handling and Biographies rendering on artist page
  • Fix Nautiline theme font path
  • Preserve first line in parentheses in lyrics
  • Clean up Last.fm content by removing "Read more" links from descriptions and bios
  • Handle WASM runtime panics in gotaglib openFile function

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?
View originalPermalink
How v0.60.2 went

v0.60.0

Added 9
  • Add WebAssembly-based plugin system with multi-language PDK support for Go, Rust, Python, and JavaScript
  • Add JSONForms-based plugin configuration UI
  • Add similar songs retrieval functions to plugins API
  • Add pure-Go metadata extractor built on go-taglib library
  • Add Instant Mix feature to generate playlists of similar songs based on selected track
  • Add Plugins.Enabled, Plugins.Folder, Plugins.CacheSize, Plugins.AutoReload, and Plugins.LogLevel configuration options
Changed 3
  • Change LastFM.Language and Deezer.Language to support comma-separated list of languages for metadata fallback
  • Change metadata extractor to pure-Go implementation by default, with option to revert to legacy-taglib
  • Rename HTTPSecurityHeaders.CustomFrameOptionsValue to HTTPHeaders.FrameOptions
Security 2
  • Fix potential XSS vulnerability by sanitizing user-supplied data before rendering
  • Fix potential DoS vulnerability in cover art upscaling by clamping requested square size to original dimensions
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
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?
View originalPermalink
How v0.60.0 went
View all

Discussion