New in this release
Jukebox mode
One of the most requested features is finally available: Navidrome's Jukebox feature is a built-in functionality that allows users to play music directly to the server's audio. This essentially turns your server into a jukebox, enabling you to play songs or playlists remotely through a supported Subsonic client. See full documentation here. Can't thank enough @ms140569 for his dedication to this.
Album splitting by Original/Release date
Another big feature is the support for disambiguating album editions by Original/Release Date, contributed by @certuna.
Very Important: This feature is controlled by the Scanner.GroupAlbumReleases config option. The default is false
, meaning split is the default behaviour. This has a side effect that Navidrome will think all albums are new, and they will lose their star/love information, as well as play counts. If you don't want this behaviour, set Scanner.GroupAlbumReleases
to true
before upgrading.
Better networking support
Now Navidrome supports HTTPS out of the box. You need to provide a certificate and key as options (See new ND_TLSCERT
/ND_TLSKEY
config options). One more thing: Now the Address
config option can specify a Unix socket file instead of a IP address. For that set Address
(or ND_ADDRESS
) to unix:/path/to/socket/file
.
A big thanks to @ms140569, @certuna, @kgarner7 and all contributors that participated in this release.
Highlights
- [UI] Don't pump the volume up to 100% if it is not in a mobile device. Fix #2255. Thanks @tessharp
- [UI] Add option to allow shares to be downloaded
- [UI] Make AlbumArtists clickable in AlbumSongs view. Fixes #1627. Thanks @krateng
- [UI] Add Arabic (@zayedalsaidi) and Korean (@bonik21) translations
- [UI] Give page the right lang attribute (#2299). Thanks @subhajit20
- [UI] Upgrade to Node v18
- [UI] Fix external link for artist page (#2533). Thanks @kgarner7
- [Scanner] Ignore Recycle Bins in Windows. Fix #1074
- [Scanner] Make playlist tracks match case-insensitive. Fix #1720
- [Scanner] Better support for ReplayGain tags. Thanks @kgarner7
- [Scanner] Ignore playlists starting with a dot (#2390)
- [Scanner] Add support for lyrics tag
unsynced lyrics
(#2391). Thanks @BenzLeung
- [Scanner] Use file creation date for Date Added/CreatedAt (#2553). Thanks @certuna
- [Server] Jukebox mode (#2289). Thanks @ms140569
- [Server] Implement ArtistArt priority (#2266). Thanks @repomaa
- [Server] Add option to load TLS cert/key, and use HTTPS
- [Server] Add support for listening on Unix socket. See #1477
- [Server] Allow BaseURL to contain full server url, including scheme and host. Fix #2183
- [Server] Sanitize filenames inside zip files. Fixes #1763
- [Server] Allow configuring cache folder (#2357). Thanks @tomleb
- [Server] Fix ListenBrainz submission, includes duration (#2279). Thanks @phw
- [Server] POST endpoint for importing m3u playlists (#2273). Thanks @spwats and @caiocotts
- [Server] Upgrade to Go 1.21
- [Subsonic] Convert all Subsonic API ints to int32 as per specification #2252
- [Subsonic] Fix getSongsByGenre pagination. Fix #1640
- [Subsonic] Add initial support for OpenSubsonic. (#2302)
- [Build] Publish docker images to ghcr.io (#2298). Thanks @onedr0p for the "push" ;)
Changelog
- fee0f40a Bump dependencies
- 9d2aaff8 Bump golang.org/x/tools from 0.13.0 to 0.15.0
- 2ff4023c Bump golang.org/x/image from 0.12.0 to 0.14.0
- 79870b10 Do not empty old artist metadata (#2423)
- 7a858a2d Fix external link for artist page if LastFM is missinb but Musicbrainz is not (#2533)
- 9cefaf66 Bump github.com/onsi/gomega from 1.29.0 to 1.30.0
- 3debd31b Add more replaygain tests, fix wma (#2356)
- 24d9fb5b Update translations (#2409)
- 40841ab9 Small date mapping fix (#2584)
- bae5fc94 Fix hardcoded IPv4 literals (#2602)
- e0558260 Fix devcontainer for Go 1.21
- 54bde266 Bump github.com/mattn/go-sqlite3 from 1.14.16 to 1.14.18
- 3a737690 Bump golang.org/x/sync from 0.3.0 to 0.5.0
- de3d8701 Bump github.com/spf13/cobra from 1.7.0 to 1.8.0
- 03175e1a Use file creation date for Date Added/CreatedAt (#2553)
- 26472f46 POST endpoint for importing m3u playlists - #2078 (#2273)
- 6bca7531 Bump @babel/traverse from 7.19.3 to 7.23.2 in /ui
- 68d1d5c9 Bump github.com/lestrrat-go/jwx/v2 from 2.0.12 to 2.0.16
- db6c4609 Bump github.com/beego/beego/v2 from 2.0.7 to 2.1.3
- 4cd916bb Bump react-router-dom from 5.3.0 to 5.3.4 in /ui
- c40e83ef Bump github.com/go-chi/chi/v5 from 5.0.8 to 5.0.10
- 9094f41f Improve TopSongs findMatchingTrack by de-prioritizing compilations (#2532)
- 9ff95b6c Bump github.com/onsi/gomega from 1.27.10 to 1.29.0
- 77ace857 Coalesce genre to null for smart playlist (#2573)
- 59f0c487 Jukebox cleanup (#2554)
- 2cd43581 Make Jukebox available to Subsonic clients
- 248bf232 Bump github.com/lestrrat-go/jwx/v2 from 2.0.11 to 2.0.12 (#2480)
- b5664ab9 Bump github.com/onsi/ginkgo/v2 from 2.11.0 to 2.12.0 (#2497)
- ac7f94e6 Fix text being unreadable with Ligera theme (#2517)
- d45f9f17 Bump github.com/google/uuid from 1.3.0 to 1.3.1 (#2489)
- 250107d6 Bump golang.org/x/image from 0.9.0 to 0.12.0 (#2507)
- 64b14db5 Add Korean Language (#2463)
- 73d1851c Bump golang.org/x/tools from 0.9.1 to 0.13.0 (#2516)
- 1b16e114 Jukebox mode (#2289)
- f941347c Upgrade to Go 1.21 (#2475)
- 1b5cefda Bump github.com/onsi/gomega from 1.27.8 to 1.27.9 (#2450)
- 4cf25fc6 Bump github.com/microcosm-cc/bluemonday from 1.0.24 to 1.0.25 (#2449)
- 14ba83ea Bump github.com/go-chi/chi/v5 from 5.0.8 to 5.0.10 (#2444)
- 08f3fd13 Bump github.com/pressly/goose/v3 from 3.13.1 to 3.13.4 (#2442)
- 3d66f587 Bump tough-cookie from 4.1.2 to 4.1.3 in /ui (#2441)
- 5b1ba3df Bump word-wrap from 1.2.3 to 1.2.4 in /ui (#2446)
- a0028307 Fix EnableMediaFileCoverArt option default value
- 7b600bed Bump golang.org/x/tools from 0.10.0 to 0.11.0 (#2432)
- 7d0a1916 Bump golang.org/x/image from 0.8.0 to 0.9.0 (#2430)
- c7fe311c Bump github.com/go-chi/jwtauth/v5 from 5.1.0 to 5.1.1 (#2427)
- 4520a346 Bump github.com/pressly/goose/v3 from 3.11.2 to 3.13.1 (#2428)
- 3e14c3c4 Add support for lyrics tag
unsynced lyrics
(#2391)
- 1e891d6b Bump github.com/prometheus/client_golang from 1.15.1 to 1.16.0 (#2408)
- caf9b22d Bump golang.org/x/image from 0.7.0 to 0.8.0 (#2407)
- 4f8742bc Update translations (#2329)
- 26aa0f4f Fix typo
- 4898f31f Add
format
target to Makefile
- 9da013f3 Submit duration to ListenBrainz (#2405)
- 5af67c78 Upgrade Go dependencies
- c8608956 Fix listenbrainz submission and clarify MusicBrainz recording ID field (#2279)
- 36eda871 Fix locale-dependent tests. Closes #2402
- 7c92a732 Ignore playlists starting with a dot - #2367 (#2390)
- f5d97823 Fix original date (TDOR) mapping for ffmpeg extractor
- d6083dab Re-apply "Refactor walkDirTree to use fs.FS" but remove context cancelation logic.
- 6b3b4d83 Revert "Refactor walkDirTree to use fs.FS"
- 3853c331 Refactor walkDirTree to use fs.FS
- 257ccc5f Allow configuring cache folder (#2357)
- cec5fb0d Fix lint errors
- 3fc4313e Move string slice functions to slice package as generic functions
- c4c99b7f Make
GroupAlbumReleases
false by default
- a984bbbc Make SmartPlaylists to always be seen as changed for Subsonic clients.
- ba067667 Fix date formatting to use UTC
- e38a6906 Order albums by full original date (this time is for real). Fixes #1452
- 7d0656f4 Order albums by full original date. Fixes #1452
- 11f33ff8 Update dependencies
- 611363fc Add missing translation
- 85d43d23 Add tests to date roll-ups
- 8faaa3cf Use table specs in getDate tests
- 20462c52 Restore album "year" translation string
- 52b77e41 Support for Original Date, Release Date & splitting/grouping of album editions (#2162)
- 010ba0d1 Use table specs in ReplayGain tests.
- 9b7fac51 Update default transcoding commands (#2325)
- be12c12b Remove unused Badge component from ActivityPanel icon
- a19a643c Manually add replaygain tags for m4a (#2346)
- f9b060af Removed onBackdropClick deprecated property
- a3d78e95 Fix Monokai theme. Closes #2353
- d85b0633 Fix build
- bfa10cab Upgrade to Node v18
- 08fcb430 Upgrade React-Admin to 3.19.12
- 5d02df62 Fix eslint error
- c3a2e084 Update caniuse-lite
- 4296741e Simplify EventStream handling
- 6bee4ed1 Sanitize filenames inside zip files. Fixes #1763
- e62c3edc Revert: Change fix formatting command
- 0a08d0af Change fix formatting command
- ad513354 Disable POEditor import job in forks
- a70b81f9 Bump github.com/onsi/ginkgo/v2 from 2.9.4 to 2.9.5 (#2352)
- 0d920c78 Bump github.com/prometheus/client_golang from 1.14.0 to 1.15.1 (#2342)
- 957a73e0 Bump github.com/mileusna/useragent from 1.2.1 to 1.3.2 (#2319)
- abc418ea Bump github.com/onsi/ginkgo/v2 from 2.9.2 to 2.9.4 (#2343)
- 11283220 Bump golang.org/x/tools from 0.8.0 to 0.9.1 (#2350)
- 2e479def Bump github.com/go-chi/httprate from 0.7.1 to 0.7.4 (#2320)
- 8311a7f2 Bump golang.org/x/sync from 0.1.0 to 0.2.0 (#2344)
- 6ec8f780 Bump github.com/pressly/goose/v3 from 3.10.0 to 3.11.2 (#2341)
- 3e879d2a Add K8s manifest (#2330)
- 6d3d005f Allow the setrlimit syscall - #1961 (#2333)
- c12510d6 Update README
- 0bd73bd3 Better GH Action names
- 8c120ee3 Better GH Action names
- 9590b3c2 Use the highest resolution artist image from Spotify
- 4887c330 Bump golang.org/x packages
- da21acba Give page the right lang attribute (#2299)
- 9154e44e Add initial support for OpenSubsonic. (#2302)
- 2e010634 Update translations (#2198)
- 597e5abe Fix push develop to Docker Hub
- 92994efe Publish docker images to ghcr.io (#2298)
- 9628b138 Add help msg for JS formatting errors
- 34742400 Show Player name, not client, in mobile view. Fix #1659.
- ecac74c2 Fix getSongsByGenre pagination. Fix #1640
- ddfde7bf Run lint on latest Go 1.20.x
- 96c50d36 Upgrade to Go 1.20.3 and GoRelease 1.16.1
- 310c816c Use Go 1.20 for local cross-compilation
- bd402fb2 Fix IntelliJ warning
- 8bb141b7 Bump github.com/spf13/cobra from 1.6.1 to 1.7.0 (#2293)
- f25b91b4 Remove any previous UNIX socket file
- f959701d Bump github.com/onsi/gomega from 1.27.5 to 1.27.6 (#2292)
- 61dd8d55 Fix data race in scanner
- bbb94610 Increase max Server-Sent Events' ID
- 95016f68 Fix SQL migrations
- c3cc7dee Enable SQL migrations
- 7847f19c Upgrade goose
- 7a0df442 Bump github.com/onsi/gomega from 1.27.5 to 1.27.6 (#2288)
- 6a8d2dc8 Only use valid images for artist.* artwork
- de816e8e Fix lint error
- b22d0366 Use channels for EventStream instead of diodes
- fea2de8f Add Galician translation.
- d6dd0aaa Close SSE connection on write error
- 458017b1 Update Chinese translations (#2260)
- e6bfa2bb Convert our usage of go-diodes into a simplified, generic version
- 1c7fb74a Fix writeEvents race condition.
- 83ae2ba3 Fix race condition
- 2ccc5bc9 Implement artist art priority (#2266)
- 406554f1 Remove some tools from dependencies, reducing the modules dependencies
- e89cdf61 Fix flaky tests
- cf804a52 Add support for listening on Unix socket.
- 628fd69d Fix race condition
- 1d00d1e9 Fix
writeEvent
function.
- 607c4067 Show translation changes on pipeline
- e3079d81 More tests
- 3bedd89c Bump dependencies
- 57829bfa Bump github.com/lestrrat-go/jwx/v2 from 2.0.8 to 2.0.9 (#2282)
- b998c05c Some refactorings
- 05d381c2 Add more middleware tests
- 59a9c056 Add Arabic translation (#2277)
- 0de81b83 Bump caniuse-lite
- 91785ecf Add tests for core.Archiver
- 65eeb5ec Add tests for serverAddressMiddleware
- 17e0cd55 Shuffle the tests, just in case (#2272)
- 3a6d2dcd More log redaction
- 183b462f Fix zip comments in Share downloads.
- 16fc4eb7 Fix missing extensions in Share downloads.
- 6fee744d Bump github.com/onsi/gomega from 1.27.3 to 1.27.4 (#2268)
- 74d5c7bc Bump github.com/golangci/golangci-lint from 1.51.2 to 1.52.0 (#2270)
- 880fc9e1 Bump github.com/Masterminds/squirrel from 1.5.3 to 1.5.4 (#2269)
- 1430aa10 Update play_date on scrobble only when newer - #2262 (#2263)
- 673880d6 Add option to load TLS cert/key, and use HTTPS
- 7ea11132 Don't pump the volume up to 100% if it is not in a mobile device. Fix #2255
- 377e7ebd Disable share downloading when
EnableDownloads
is false.
- 23c483da Only freezes issues/prs after 120 days
- c3801396 Fix lint
- 63fbccf5 Enable memory profiling
- 1f6ec1d9 Add pprof endpoint, disabled by default
- cad81563 Bump webpack from 5.74.0 to 5.76.1 in /ui (#2256)
- f7d4fcdc Convert all Subsonic API ints to int32 as per specification (#2252)
- 002cb4ed Update README.md
- e13eaebb Update README.md
- 539c0fae Bump github.com/onsi/ginkgo/v2 from 2.9.0 to 2.9.1 (#2251)
- 4ccb6ccb Update Chinese translations (#2250)
- ec0eb286 Hide Love button on Artist Page when EnableFavourites=false. Fix #2245
- b520d882 Add download button in the SharePlayer
- a7d3e6e1 Add option to allow share to be downloaded
- a22eef39 Add share download endpoint
- 50d98386 Add docker compose examples, with traefik or caddy and without, fixes #476 (#2240)
- 016454c2 Bump golangci-lint version
- 41a5db72 Update more dependencies
- 6e6ec584 Update sanitize and golang.org/x dependencies
- c88e1baa Make playlist tracks match case-insensitive. Fix #1720
- e16e3d2e Fix pipeline.
- 339a6239 Ignore Recycle Bins in Windows. Fix #1074
- 47f15ccb Make AlbumArtists clickable in AlbumSongs view. Fixes #1627
- 9667f3cd Add file path to toggleable columns in SongList view. Fix #1719
- 5773fa03 Fix discussions links
- 527c378c Add feature request link to About dialog
- caa07888 Fine tune issue templates
- 40b14e6d Add log-output to lock-threads bot
- becd50eb Remove debug-only option from stale bot
- 15b5aa91 Add stale/lock-threads bot
- 7987d982 Fix pipeline's lint error message
- 1dd074bb Add new issue templates
- 7eac9d2b Bump dependencies
- 362d8c50 Bump github.com/onsi/gomega from 1.26.0 to 1.27.1 (#2204)
- 01c604ba Bump github.com/stretchr/testify from 1.8.1 to 1.8.2 (#2216)
- 2c129a28 Bump golang.org/x/image from 0.0.0-20191009234506-e7c1f5e7dbb8 to 0.5.0 (#2217)
- 5fc4076a Fix translation key
- d303ad26 Bump dependencies
- c4a68c8a Fix build pipeline
- ad9ce98c Use GoLang 1.20.1 in pipeline
- a134b1b6 Use sync/atomic package, now that we are at Go 1.19
- 6dce4b24 Remove custom atomic.Bool, we are now at Go 1.19
- 10108c63 Allow BaseURL to contain full server url, including scheme and host. Fix #2183
- aac6e2cb Add path to cookies. Fix #1580
- 0ffdb2ee Bump minimum Go version to 1.19