🎧☁️ Modern Music Server and Streamer compatible with Subsonic/Airsonic
This release is focused on fixing bugs and security issues. Also fixes a bunch of edge cases in Smart Playlists. Thanks to all contributors who helped in this release.
DefaultLanguage
#1561
ND_TRANSCODINGCACHESIZE
#1778
criteria
package//+build
tags, as the code does not compile on older versions of Go anymore/search
subsonic endpoints by parallelizing the queriesinterfacer
linter, as it does not work with Go 1.18 and will not be updated (it is deprecated)context
packageThis bug-fix release includes a fix to a potential SQL injection and a couple of other niceties and fixes.
There are a few nice contributions that needs more testing, and I plan to validate and release them in the next month or so. Stay tuned!
0
(See: https://github.com/navidrome/navidrome/issues/1417#issuecomment-974052454)name
and comment
fields to .NSP filesx-total-count
http header (#1470) (thanks @bricej13)userRating
to Subsonic Album/Artist responses. Fix #148686fe1e3b Bump github.com/ReneKroon/ttlcache/v2 from 2.9.0 to 2.11.0 (#1529)
eed54d7e Bump github.com/lestrrat-go/jwx from 1.2.11 to 1.2.17 (#1574)
ab36344d Bump github.com/microcosm-cc/bluemonday from 1.0.16 to 1.0.17 (#1560)
e5d03a3b Bump github.com/Masterminds/squirrel from 1.5.1 to 1.5.2 (#1501)
30813cd3 Update translations (#1578)
6164f37c Added Bulgarian Translation (#1577)
9e79b5cb Fix potential SQL injection in Smart Playlists
8c707b4e Handle invalid theme in ui state (#1504)
910091f1 Fix playCount
casing
2e1b985d Revert "Direct link to dev build"
100b8052 Update README.md
bde9d5f9 Fix TypeError: Cannot read property 'id' of undefined
69615f1a Trying to fix multiple EventStream connections, one more time
a99b9b4d Direct link to dev build
9892524a Connect eventStream after login
9fe97895 Try to avoid creating multiple eventStreams
5425c1a4 Update translations (#1489)
afe1e4cf Fix lint for public credentials
20cdd38f Better logging for agents configuration
913a4cf5 Bump github.com/onsi/gomega from 1.16.0 to 1.17.0 (#1459)
121ada5a Bump @testing-library/jest-dom from 5.14.1 to 5.15.0 in /ui (#1456)
e59a95c9 Bump github.com/golangci/golangci-lint from 1.42.1 to 1.43.0 (#1460)
d75f286a Update zh-Hans.json (#1478)
30d3f1ed Add userRating to Subsonic Album/Artist responses. Closes #1486
6a1f9678 Bump github.com/ReneKroon/ttlcache/v2 from 2.8.1 to 2.9.0 (#1414)
a0977ce4 Bump github.com/go-chi/chi/v5 from 5.0.4 to 5.0.7 (#1484)
b3d80386 Bump github.com/lestrrat-go/jwx from 1.2.7 to 1.2.11 (#1485)
0714f082 Recover from SIGSEGVs in taglib's code
cbeaadf8 Fix logging smart playlist's song count
3e282df6 Set volume to 100% when web player is in mobile mode.
ce7940bb Allow overriding name
and comment
when importing NSP playlists
92c31c96 Fix values from annotation table cannot be compared to 0
4bf47654 Bot that adds a download link on pull requests
6d947f6f Allowing 3rd party UIs to access x-total-count
http header (#1470)
First implementation of Smart Playlists Smart Playlists can be created as a .NSP file and they will be imported the same way as .M3U files. Some examples are available in the GitHub issue. While I don't write a documentation page for this feature, please check the info in the issue (examples, list of fields and operators). Feel free to open an issue if you are having difficulties to use it.
Lyrics support (thanks @dheerajdlalwani / @chiraglulla) Embedded lyrics are now supported by both the Subsonic API and in the UI. There's a limitation in the UI that it only works with synchronized lyrics for now, but the work with this feature is not complete and there's more things in the pipeline. Expect the following enhancements in future versions: support for external .LRC files, unsynchronized lyrics in the UI, grabbing lyrics from external services.
ListenBrainz scrobbling (thanks @srichter) Same as with Last.fm, the user needs to link ListenBrainz to their account, by going to the Personal menu in the UI and enabling Scrobble to ListenBrainz.
Speaking of external integrations, if you don't want Navidrome to connect to any external service, you can now disable everything with just one config option: EnableExternalServices=false
(default is true
).
Thanks for all contributors who helped in this release.
GetLyrics
endpoint (#1379). Thanks @dheerajdlalwani8c7d95c1 Update Translations (#1471)
d4447e37 Fix sorting albums by year (should use name as secondary sort field).
3bd6f82c Rename ListenBrainz config flag and enable by default (#1443)
da26c5cf Combined multiple appends into a single one (#1464)
023d7bfa Remove link from songs to artist (when artist has no albums)
48a62788 Simplify prototype definition for taglib_read
91b470c9 Show artist link in Songs lists
1c82bf51 Remove non-album artist_ids from the DB
0d9dcebf Fix playlist cannot be empty via Subsonic API
5994c31f Fix migration to support null values
804fb716 Show in the logs how long it took to startup
d3a2f769 Better logging of GetSimilar call
68a84ec8 Smarter cache of external info calls (last.fm / spotify)
9e48d87f Add a new index for album, to optimize the getAlbumList?type=alphabeticalByArtist
Subsonic query
9712a5b1 Fix error codes for required parameters in getAlbumList
9422373b Optimize AlbumRepository.GetAll and add a GetAllWithoutGenres method specifically for Subsonic API, where multiple-genres are not required
bc8132ef Bump @testing-library/user-event from 13.2.1 to 13.5.0 in /ui
82bc8cd0 Bump github.com/go-chi/httprate from 0.5.1 to 0.5.2
1e5ab59d Bump github.com/onsi/ginkgo from 1.16.4 to 1.16.5
28ad91a9 Bump github.com/Masterminds/squirrel from 1.5.0 to 1.5.1
e40e8659 Bump github.com/microcosm-cc/bluemonday from 1.0.15 to 1.0.16
12818fb5 Make song/album/artist endpoints read-only
aaeaa3c5 Fix playlist filter
05390919 More info in scrobbling logs
6a87fc88 Ignores invalid timestamps in requests (use current time)
975986ab Add bulk action to make playlists private/public
778f474d Use new rest
lib (Update receives all columns that need to be updated)
b2acec0a When externals services are disabled, only disable UILoginBackgroundURL if it is not set by the user
e7202339 Ignore empty lines in M3U files
8c2e4da3 Fix dateLoved
in criteria. Now log invalid field names in criteria
a4d3bf42 Remove some duplicated code
765557d7 Remove "Show" button from PlaylistEdit view
86afd16c Allow changing playlist's owner. Relates to #698
133fed34 Add owner_id
to playlist
84bbcdbf Add artist image lightbox
1823159b New config to disable all external integrations. Closes #102
0b5ed9eb Update ListenBrainz Portuguese translations
a56d5bc8 Listenbrainz scrobbling (#1424)
ccc871d1 Only reset player scrobbled state on track change or end (#1432)
d3e14223 Fix TypeError: Cannot read properties of undefined (reading 'length')
a42aeff8 Optimize queries by path, should speed up the scanner a bit
7cdbc04c Update caniuse-lite
f3fae7e2 Optimize basic media_file query, avoiding adding "group by" or joining with genres if not required
074732b1 Filter playlists by names and comments
66a9cbb7 Remove temp folders after tests
fa3471f5 Simplify resources
code, enabling any resource to be overridden (not just translations)
90724128 Fix translations on Windows
cca32360 Use refetch
when changing the playlist (as opposed to a full refresh
)
85d48478 Add .mka
file format. Only works with ffmpeg
extractor
2183eb64 Should not allow changing sort order in Album songs view
ea435d0f Fix error on empty playlists. Simplify code for some operations
f645c476 Fix double escaped lyrics and comments
5e872807 Load playlist track genres
526b6597 Remove duplication for loading tracks
5dce499d Fix/Optimized Playlist tracks deletion
fbd87ba5 Fix console error "Cannot convert undefined or null to object PlaylistsSubMenu"
63b5191e Fix lint
af00503b Optimize playlist updates
85185e3b Misc small changes (#1433)
83eaafcb Add dateLoved
Criteria field
93ce0b56 Fix Genre field and Contains/NotContains/StartsWith/EndsWith in Criteria (Smart Playlists)
47549ecf Increase updatePlaylist chunk to 100 tracks
ed1ca65a Show hotkeys as chips, for easier reading
8d6b5f9d Speed up Subsonic GetPlaylist
(by optimizing loadTracks
)
76fdcd11 Tweak SimilarSongs algorithm to prioritize the requested main artist
18e1c169 Don't read the whole smart playlist file in memory
4bc4daa6 Improve git-vs-tarball detection (#1423)
cc1659aa Better way to match top songs from external sources (Last.fm)
31c598de Fix drag-n-drop from a playlist, also fix useDrag memoization
2e2a647e Make SmartPlaylists read-only
d169f54e Rename hasCoverArt field in criteria
1494be9a Add playCount and playDate columns to album songs list
c73f64ee Removed unused code
806b13cf Update stats of Smart Playlist when it is created
2c860ede Don't import invalid .nsp
files
6a550dab Use new Criteria and remove SmartPlaylist struct
39726165 New Criteria API
d0ce0303 Add PlayCount and PlayDate columns to PlaylistSongs
94735361 Include never played songs in the "not in the last" operator
2b57b98a Fix smart playlist refreshing only after the tracks were loaded
1a96e9fe Import smart playlists (extension .nsp)
21da1df4 Cache smart playlist refreshes for 5 seconds
d21932bd First version of SmartPlaylists being generated on demand
c72add51 Add methods to Playlist model
d200933b Reduce number of queries for some playlists operations.
943082ef Fix time-based tests (again)
c3fb4e12 Fix rules serialization
9c8f779f Fix time-based tests
81562371 Load SmartPlaylists rules from DB
7221b49b More tests
cf8d08ec Initial drafts for Smart Playlists
2a756eab Show external links on all resolutions but mobile
104679ca Guard against record being undefined
. Fix error Cannot read properties of undefined (reading 'id')
5621551d Adds Lyrics Support to Subsonic API (#1379)
3214783c Remove double-retching playlist's tracks
34b01c2c Display lyrics on UI if synced lyrics present in metadata (#1406)
0d2a8f53 Enable new Artist Page by default
b7fedddf Guard against record being undefined
. Fix error Cannot read properties of undefined (reading 'albumId')
1d742cf8 Artist page improvements (#1391)
7505b5c5 Bump GoLang to 1.17.2
174ad9e9 Fix ffmpeg bitrate parsing for flac files
ba0ee6ab Rename manifest.json to manifest.webmanifest (#1399)
6b38acad Update README.md
ee8943f3 Fix semantic classes for currently playing song
86a87b4b Fix default volume (#1395)
Welcome to a new version of Navidrome! The main change in this release is that now playlists are accessible from the sidebar menu, and you can add songs/discs/albums/artists to them via drag'n'drop. If you have issues with this functionality, it can be disabled by setting DevSidebarPlaylists=false
in your config (or setting the env var ND_DEVSIDEBARPLAYLISTS=false
)
Also there's initial work for a new Artist page. It still has some rough edges to fix, so we decided to disable it by default for now, but you can experiment with it by setting DevShowArtistPage=true
in your config. If you do so, please give us feedback.
As part of preparing Navidrome to start using Infinite Scroll, we moved song and album details from the expandable panel to a new Get Info dialog, accessible from the context Menu.
Last but not least, if you want Navidrome to import playlists only from specific folder(s), you can do it now by setting the new PlaylsitsPath
. It can contain a path or a list of paths separated by :
(or ;
in Windows), and it also allows globs (like "playlists/**/**"
)
We have a few other cool features cooking right now, so hopefully the next release won't take as long as this one.
PlaylistsPath
(#1181)taglib
panics (#1343)8bbb878b Add Finnish translation
8591a9ac Update translations (#1383)
b6e30cd0 Return playlists sorted in getPlaylists
Subsonic endpoint
058e7e43 Add logo to README
152836a0 Bump @testing-library/react from 12.1.1 to 12.1.2 in /ui
6139338e Bump react-icons from 4.2.0 to 4.3.1 in /ui
f0c11916 Revert: Small optimization in genre mapping
a6311259 Fix layout error in ArtistShow (#1387)
dbde0ffa Bump github.com/djherbis/atime to v1.1.0
fba73370 Sort songs by artist/album/disc/track_number before adding to playlist
e6733600 Limit number of playlists displayed in the sidebar, to avoid UI freezes
2b105ca7 Enable DevSidebarPlaylists by default.
9c29ee36 Check permissions before adding songs to playlists
6c3e45de Add songs to playlists with drag and drop
2ab46474 Bump golang.org/x/tools from 0.1.6 to 0.1.7 (#1382)
91e36a2c Check goimports in the pipeline (#1381)
0cbba802 Bump react-router-dom from 5.2.0 to 5.3.0 in /ui (#1330)
f9d91047 Bump react-admin to 3.18.3
be3a6dc7 Use local copy of workbox service worker scripts (#1358)
b1e77609 Preload next song
ad45ab4a Fix genre update chunking
24fef584 Bump react-jinke-music-player from 4.24.0 to 4.24.2 (#1378)
e17d4369 Do not attach Genres to the "Various Artists" artist
73659e56 Change "Build" link to point to the latest build artifacts from master
71b1e7f8 Bump github.com/lestrrat-go/jwx from 1.2.6 to 1.2.7
69405601 Bump @testing-library/react from 12.1.0 to 12.1.1 in /ui
4fda895a Bump blueimp-md5 from 2.18.0 to 2.19.0 in /ui
f664af55 Bump react-admin from 3.18.1 to 3.18.2 in /ui
c6868ff8 Don't show Artist Page for "Various Artists"
0b65a4e3 Fix comment word wrapping
24872e6c Fix biography word wrapping and requests for undefined
resource
b4e5c662 Fix JS console warning
6752e0a1 Fix harmless error message in logs when ScanSchedule set was "0"
5680e539 Update genres in chunks. Should fix #1368
482c2dec Artist Detail Page (first cut) (#1287)
210dc6b1 Add x-total-count to Subsonic API getAlbumList (#1360)
73a2271c Small optimization in genre mapping
0c0bd296 Replace expanded with a dialog (#1258)
15ae3d47 Only apply audioStreamRx once
1365adbb Support 7.1 (8) channels
e12a14a8 feat: Adds Audio Channel Metadata - #1036
0079a9b9 Close Sidebar when going to Playlists list
892c2bfd Revert "Disable mini-player (bubble) dragging. Should fix #1217"
5fb73289 Bump golang.org/x/tools from 0.1.5 to 0.1.6
86479a6d More info when recovering from panic
76bd20e8 Recover from any possible taglib panics. Fixes #1343
7a15ed07 Bump prettier from 2.4.0 to 2.4.1 in /ui
d574df5f Bump github.com/go-chi/jwtauth/v5 from 5.0.1 to 5.0.2
a7ace48e Bump github.com/ReneKroon/ttlcache/v2 from 2.8.0 to 2.8.1
84d98010 Bump github.com/spf13/viper from 1.8.1 to 1.9.0
e63804fb Use newer versions of node in the pipeline
a5101fa9 Use npm dependencies cache from setup-node@v2
f2ed3f2d Bump prettier from 2.3.2 to 2.4.0 in /ui (#1341)
b23ab1cc Bump @testing-library/react from 12.0.0 to 12.1.0 in /ui (#1342)
abf6318a Disable mini-player (bubble) dragging. Should fix #1217
b55f3a69 Add paddingBottom to the whole sidebar menu, to avoid playlists to be covered by the player
ab2912b4 Only import playlists from configured paths in option PlaylistsPath
. Closes #1181
9f00aad2 Upgrade to GoLang 1.17.1
79363d6c Move Playlists to the sidebar menu (#1339)
a7017e4b Fix JS console warning
dc0ec32d Fix menu items highlight
06b1a1a2 Album size overflow fixed (#1071)
6ac2fefa Make AppBar stick on scroll
2e921cd7 Fix sidebar scroll height (#1338)
c2251e6d Update GoLang to 1.17 (#1295)
25aab8bc go mod tidy
94083f85 Bump @testing-library/react-hooks version
f0ef5187 Bump react-redux version
79e79b63 Bump github.com/go-chi/chi
a961ffe2 Bump github.com/golangci/golangci-lint
402aaaaf Bump github.com/lestrrat-go/jwx version
5c7784f8 Bump github.com/cespare/reflex version
a4e96d25 Pin Node to 16.8 as a workaround to https://github.com/nodejs/node/issues/40030
8444c28b Upgrade react-admin to 3.18.1
fb110805 Improve performance of placeholder images (#1325)
173b30cd Extract version from directory name if .git dir is missing (#1327)
af7c87dd Give a warning on commands that do not build the frontend.
8df056b7 ru.json update (#1320)
54f98497 Use wchar_t for TagLib filenames on Windows (#1310)
This release fixes the following regressions:
getArtistInfo
Subsonic API returns "Internal Error" (#1293)Also, please read the release notes from 0.45.0 if you haven't already done so.
Downloads are available here: https://github.com/navidrome/navidrome/releases/tag/v0.45.1
c55e6590 Bump github.com/onsi/gomega from 1.15.0 to 1.16.0 (#1300)
d37231f3 Bump github.com/ReneKroon/ttlcache/v2 from 2.7.0 to 2.8.0 (#1298)
47fa32ec Bump github.com/golangci/golangci-lint from 1.41.1 to 1.42.0 (#1299)
cf042ed8 Fix random volume changes
d4818640 Some small refactorings
c2927e10 Fix loadSimilar method, was causing "internal error". Fix #1293
6983390c Setup git hooks when running make setup
143f5ba9 Import song duration with hundredths when using TagLib
Multiple genres is finally here! Navidrome now supports multiple genres for songs and albums (and artists!). It can read multi-valued
tags from ID3v2.4 and Vorbis Comments, and also can split the genres by a configured set of separators
(config option Scanner.GenreSeparators
, default is ;
, /
and ,
). This is now reflected in the UI,
that has new Genres filters and information, and in the Subsonic API.
There were also lots of refactorings and bug fixes in this release.
EnableCoverAnimation=false
now works in mobile view. Thanks @mill1000 (#1268)LastFM.Enabled
is falseffmpeg
extractor by default on Windows platforms05e27095 Fix getTopSongs endpoint
aa72d3d4 Add missing song information to players and apply EnableCoverAnimation to mobile player. (#1268)
a20bd5fe Correct some french translations (#1278)
99aeaabf Update translations (#1285)
0a5f9660 Bump redux from 4.1.0 to 4.1.1 in /ui
53385673 Bump github.com/onsi/gomega from 1.14.0 to 1.15.0
50526024 Bump github.com/lestrrat-go/jwx from 1.2.4 to 1.2.5
db4165f2 Bum react-admin to 3.17.2. Fix SearchInput border
a8cf887e Adjust icon size
63000ab5 Update en.json (POEditor.com)
b44ef81c Allow 0
value to disable ScanSchedule.
e9d0abe0 Support local paths as urls in playlists.
bcafe88e Don't autoplay when reloading play queue from Redux store
1710730b Bump github.com/kr/pretty from 0.2.1 to 0.3.0 (#1267)
aa1571e0 Remove unused AnnotatedModel interface
c831dc4c Use structs
lib to map models to DB. Fix #1266
344d7a43 Inject DB into DataStore, instead of hardcode the dependency
c0fc36da Make album genres clickable
e68b22ea Don't send invalid scrobbles when clearing the player's queue
fb4eefce "Add to Playlist" on AlbumList actions (#1257)
615cac2e Extract ExternalLinks into its own component
72f9e3e8 Bump @testing-library/user-event from 13.2.0 to 13.2.1 in /ui
763bcafd Use Tooltip in links to external sites
5b81f7a7 Fix get song by id
7bd506ac Retrieve all options for Genre filters
b66c3945 Fix build
4ed01bad Use ffmpeg
extractor by default on Windows
d3975d20 Reorganize metadata extractors code
6175629b Build and release Docker image for Linux 32 bits platform (#1260)
6c550819 Use TagLib to detect whether a media file has embedded cover or not
91325071 Change fallback extractor to taglib, the default option
876dda83 Reduce number of calls to lstat
.
86c0b422 Small refactorings
1cef44a5 Show in the logs which mbid will be used if multiple mbids are found for album/artist
4fcb2382 Fix "too many SQL variables" error in GetStarred
endpoint
4f9d546d Abort startup if config file is invalid
eeb14f02 Removed unused function
a89bdfbb Fix build
8afa2cd8 Remove dependency of deprecated ioutil
package
774ad651 Use fs.FS in MergeFS implementation
75408816 Small refactorings
08840f61 Simplify cover detection in roll-up code by left-joining synthesized table
cddd1b3f Simplify genre roll-up code by left-joining synthesized tables
bc6b1754 Make getGenre
Subsonic endpoint returns genres sorted by counts
b6e9ec4d Optimize GetAll genres query
1471e124 Show songs' genres as text instead of Chips
95181d74 Fix rollup of track genres to albums and artists.
254e5673 Fix log message about artist with Various Artists' mbid
00e418cb Fix log message about multiple MBIDs
2742977c Fix multiple id3v2.4 genres appearing as one big concatenated genre
69f71be9 Add more tests
58ee4c60 Add Links to external sites
21cd50d8 Fix aggregated values (count, size, duration) in roll-up queries
054b5eaf Add Genres as "Chips" in Album details and Song details
e2233779 Force full rescan when adding multi-genres
3a356499 Fix lint error
a0cd5854 Fix Count methods
20b7e5c4 Add Genre filters to UI
c56c7c86 Purge unused genres at the end of the scan
b56e034c Add multiple genres to Artists
1d8607ef Remove unnecessary repositories methods
5e549255 Add multiple genres to Albums
39da741a Add multiple genres to MediaFile
7cd3a8ba Add genre tables, read multiple-genres from tags
1f031402 Change initial scan message log level
19c2ef38 Enable buffered scrobbles by default
d886c631 Bump react-image-lightbox from 5.1.1 to 5.1.4 in /ui (#1252)
5b828cd7 Bump @testing-library/user-event from 13.1.9 to 13.2.0 in /ui (#1253)
ef60db3a Bump github.com/lestrrat-go/jwx from 1.2.2 to 1.2.4
882b02c7 Fix forceRescan not re-importing all tracks
44e7502a Log warning when artist has a MBID of Various Artists
e61cf321 Reapply the fix from #1054, but without getting into an infinite look in case of SMB fs errors. See #1164
03ad6e97 Removed unused attributes in Last.fm responses
eb8ffc6f Fix infinite loop when the fs fails. Closes #1164
b0fc684c Fix small lint errors found by gocritic
8d56ec89 Use AlbumArtist tag even for compilations, when it is specified.
5064cb2a Add git version info to release source (#1250)
f7825723 Add option to have different loglevels per source folder/file
1a6a284b Bump github.com/google/uuid from 1.2.0 to 1.3.0 (#1249)
1d948beb Bump github.com/go-chi/httprate from 0.5.0 to 0.5.1 (#1248)
deefd7a2 Bump github.com/lestrrat-go/jwx from 1.2.1 to 1.2.2 (#1247)
97f87416 Bump @testing-library dependencies
5d8b90b1 Bump Go dependencies
8396b51a Upgrade React-Admin to 3.17.0
4a25fa09 Make the default volume 50% (compensate for logarithmic volume).
8e71f308 Bump prettier from 2.3.1 to 2.3.2 in /ui (#1210)
53fe2e98 Remove eject
script, hopefully it will never be used
334068c8 Refactor mime-types configuration
b34d77f8 Don't show "playing/paused" icon on the first song when calling "Play Now"
24d4c81b Change default volume to 50%
189d0c0a Restore volume when playing a song...
1922eaaa Make cover rectangular in player when cover animation is disabled
5d9bea50 Fix Album grid responsiveness on small screens.
69afb699 Fix Disc context menu not visible in mobile
27ba267b Fix play single song action
114fdce0 Fix Last.fm's artist.getInfo
fa8b4d40 Fix arranging songs in PlayQueue
ace5c905 Made the Player behaviour more consistent
26b5e6b1 Better scrobble log message when buffer is disabled
77f6bc83 Update SongList.js (#1219)
94e36d7f Remove old feature flag for cache layout
f4920573 Add feature flag for buffered scrobbling
cfb113bd Disable Last.FM features based on LastFM.Enabled
config option
289da56f Implement Scrobble buffering/retrying
This is an IMPORTANT upgrade, it fixes 3 nasty bugs:
Also, please read the release notes from 0.44.0 if you haven't already done so.
fb183e58 Only encrypts NewPassword if it is not empty, when updating the user details. Fixes #1222 ed286c71 Don't rely on goroutines to send keepalive events 452c8dc4 Fixed the enduring nasty "too many files open" bug!! Fix #446 0c2ca2a5 Assign event ids in the main loop, to avoid out-of-order events 5bd33455 Fix deadlock situation when events are sent too fast to the broker 4ea0f235 Fix scrollbar colour for Dark/ExtraDark theme. Fixes #1216
As promised, more security improvements: Passwords are now encrypted in the DB. The encryption key used can be overridden by the new config option PasswordEncryptionKey
. See more details here: https://www.navidrome.org/docs/usage/security/#encrypted-passwords
ATTENTION: Please backup your DB before upgrading, as passwords will be encrypted when first running 0.44.0, and if you need to downgrade for any reason, old versions of Navidrome won't be able to read the passwords!
Also, you can now use a SSO/OAuth/OIDC proxy (like Authelia or Vouch) in front of Navidrome, to handle authentication. Thanks @ajgon!
And last but not least: Last.fm scrobbling is here! Users can opt-in by going to their Personal menu in the UI, and it can also be disabled for specific players if needed. Thanks @srichter!
Navidrome now uses a shared API-Key for Last.fm, so now Last.fm integrations (including scrobbling) work out of the box, but you can still override the API-Key with your own if you want to.
BREAKING CHANGE: The Native API URLs were changed:
/app/login => /auth/login
/app/createAdmin => /auth/createAdmin
/app/api/* => /api/*
If you use a script that connects directly with Navidrome, please check/change the URLs.
EnableCoverAnimation
(#1185)LastFM.Enabled
(default true
) allows disabling Last.fm integration completely/rest/updatePlaylist
not updating fields comment
and public
./rest/getNowPlaying
endpoint only returning one player/userid
is missing, mimicking Subsonic behaviourb16d473d Update es.json (POEditor.com)
fd82b8f2 Default for EnableCoverAnimation
in dev mode is true
a73f885a Add option to disable album cover animation in the player. Closes #1185
167fe462 Addresses a bug that would prevent users from changing their own passwords, introduced as part of #1187. (#1214)
cb1827cc Update translations (#1134)
25f0e115 Add 'AlbumArtist' column to SongList
292cf99f Add 'Year' column to Album and Playlists song list
d2fcab78 Fix ND_DEVFASTACCESSCOVERART flag not available as env var
94533e58 Add tests to /scrobble
endpoint
6dd38376 Add referential integrity to remove user's props when user is deleted
26bcf0b8 Enable Last.fm scrobbling by default (still requires user's authorization)
92634a74 Only show message after 2 seconds, giving time for the browser to close it first
ee21f395 Pass userId explicitly to UserPropsRepository methods
a1551074 Add a hacky way to style the react-player.
823fef8e Fix JS console error
82105c3a Remove React.Strict mode
b684a47f Show DiscSubtitle even if the album has only one disc.
da2334e1 Remove submenu "Library". Relates to #430
4853760f Suppress logs of successful DB migrations applied when running for the first time
0cbb0aca Skip songs with less than 31 seconds, as per Last.fm specification
5040f6fd Fix label
abe80157 Add option to disable external scrobbling per player
50015182 Move user properties (like session keys) to their own table
265f33ed Remove clearServiceWorkerCache, not needed anymore. (#1205)
99be8444 Disable completely external scrobblers if feature is disabled (DevEnableScrobble
)
f4ddd201 Send the time the track started playing when scrobbling
056f0b94 Refactor: Consolidate scrobbling logic in play_tracker
76acd7da Don't send scrobbles/nowPlaying updates to Last.fm if user has not authorized
8af7dab2 Fix wrong warning about ignored NowPlaying
a7509c9f Send NowPlaying and Scrobbles to Last.fm
d5461d0a Refactor Agents to be singleton
f9fa9667 Show user-friendly message when error occurs in Last.fm callback endpoint
5fbfd9c8 Implement Last.fm account linking UI
8b62a58b Remove limitation of only scrobbling tracks longer than 30 seconds
743e4697 Use singleton in other places as well
1f997357 Expose Last.fm's ApiKey to UI
143cde37 Implement Last.FM Web authentication flow
502a719e Implement Last.FM Desktop Auth flow endpoints
8ee5c1f2 Initial Last.fm UI implementation
0495e421 Fix Last.fm API method signature
ffa76bba Add flag to disable Scrobble config in the UI
a4f91b74 Add Last.FM Authentication methods
73e1a8fa Remove false-positive on new version detection
877f01bd Show notification if server is updated
47bcf719 Fix cookie warning
197d430d Fix lint error
4e1957ca Update Go dependencies
25db2cb0 Add concurrency test for singleton
80b2c2f3 Try to register all playing music in GetNowPlaying
97434c17 Fix GetNowPlaying endpoint showing only the last play
f8ee6db7 New implementation of NowPlaying
0df0ac07 Add logos to badges
c09468e1 Option to allow auto-login during development.
cf553ce8 Don't show "logout" when authenticated by Header
31ea0338 Fix subsonic token when authenticating by Header
66b74c81 Encrypt passwords in DB (#1187)
d42dfafa Add username to request.Context
84413b54 Bump @testing-library/jest-dom from 5.13.0 to 5.14.1 in /ui (#1176)
b590c31e Fix stream
url, after changes to subsonic client api
c4623d7b Don't show "empty" dates
e0fd1c6a Add "Last Played" column to SongList
86271f04 Optimize refresh events for scrobble endpoint
fb7229a5 Refech using getMany, reducing the number of API calls
521d1ff2 Disable realip
middleware when using the reverse proxy authentication feature
d3db41ae Bump github.com/go-chi/httprate
version
8bf0089a Bump github.com/ReneKroon/ttlcache/
and github.com/microcosm-cc/bluemonday
versions
b65e7629 Only send events to clients who need it
5f6f74ff Always use httpClient
to call APIs
8383527a Only refetch changed resources when receive a "refreshResource" event
8a56584a Removed the albumSong
workaround, as React-Admin's cache seems to behave better now
667701be Less warning
messages when first running it.
59b99d22 No need to check for first time when authenticating. One less SQL call per request
d54129ec Rename app
package to nativeapi
03efc481 Refactor routing, changes API URLs (#1171)
bed2f017 Fix index of songs in downloaded playlist
6bd4c0f6 Reverse proxy authentication support (#1152)
b445cdd6 Use a dedicated api-key/secret pair for Last.FM
e31802d2 Only send "refresh" event if SetRating
was successful
cefc9399 Trigger UI refresh on media annotation events: star
, setRating
and scrobble
2afb2db7 Refactor for readability
7f85ecd5 Trigger a UI refresh when the scanner finds changes.
cb6aa494 Bump github.com/lestrrat-go/jwx from 1.2.0 to 1.2.1 (#1167)
b7f47c88 Bump github.com/onsi/ginkgo from 1.16.3 to 1.16.4 (#1163)
adb09c9c Bump @testing-library/jest-dom from 5.12.0 to 5.13.0 in /ui (#1162)
0c9e0ff8 Bump prettier from 2.3.0 to 2.3.1 in /ui (#1161)
f9eec5e4 Refactored agents calling into its own struct
6c1ba8f0 Add tests to core.Share
110e17b0 Make MockRepo names more consistent
779571a0 go mod tidy
af210c89 Add Native Sharing REST API (#1150)
e80cf80d Move all Spotify and LastFM code into only one folder for each
182e3ec7 Update zh-Hans.json (#1160)
65ccd4c9 Parse ParamBool case-insensitively (#1151)
bebfe296 Allow updating only specific columns
9da9d73c Don't panic when taglib returns an error
cd242695 Foundational work to enable multi-valued tags
519c8934 Omit empty fields from Native API responses
336d891e Bump github.com/ReneKroon/ttlcache/v2 from 2.5.0 to 2.6.0
9b4b28f6 Bump ginkgo/gomega versions
39c560a5 Remove unused web-vitals package
c5abdc19 Fix recursive bug in Last.FM calls without mbid
ead2095d Respect EnableLogRedacting config when pretty printing configuration
7b05c492 Add devEnableShare config option (#1141)
327c259a Create share table and repository. (#930)
675cbe11 Fix updatePlaylist
not updating fields comment
and public
.
91a91f7e GetCoverArt returns placeholder if id
is missing
7bbb09e5 Add tests for WeightedRandomChooser
dd56a779 Rename variable with conflicting name
a38e478a Better SimilarSongs algorithm
1940267a Handle functions with params in sort order.
01f3ce02 Add a timeout to background task
48b6fa7f Don't use request's context when refreshing artist info in background
25d62cd7 Set retention time for uploaded artifacts to 7 days
ed01946a Embed Last.FM error responses, making the tests faster
89b12b34 Retry calls to Last.FM without MBIDs when if returns artist invalid (#1138)
4e0177ee Always update artist info, even if info is fresh
b3980532 Include a shared Last.FM api key, providing zero conf ArtistInfo (bio/top songs/similar artists)
db11b6b8 Remove decoration from reflex
output
60d50de8 Refactoring to make common components usage more uniform
0941fbc0 Fix lag on albumList toggling (#1136)
4217c75c Upgrade to Node v16
409020a5 Bump github.com/ReneKroon/ttlcache/v2 from 2.4.0 to 2.5.0
b4832c36 Bump github.com/golangci/golangci-lint from 1.40.0 to 1.40.1
1de7366e Bump @material-ui/lab from 4.0.0-alpha.57 to 4.0.0-alpha.58 in /ui
ab1bc619 Bump @testing-library dependencies
ad4db122 Bump hosted-git-info from 2.8.8 to 2.8.9 in /ui (#1111)
200b815c Bump url-parse from 1.4.7 to 1.5.1 in /ui (#1107)
5631493c Upgrade Web UI to Create-React-App 4 and React 17 (#1105)
This release has a good deal of security improvements, with more to come in the next release. Also some very nice features implemented by our contributors. Thanks to you all!
EnableLogRedacting
to mask sensitive info in logs. Enabled by defaultScanSchedule
that replaces ScanInterval
and allows cron-like schedulesd9f26826 Rename List view mode to Table
88251973 Change back mounting order, for better logs
86d3a219 Show name of router in log
1d0e7515 Update Portuguese translation
107a11b4 Bump React-Admin to 3.15.2
cf8ee251 Option to toggle fields in songs, albums & artists (#923)
6a17717e Update translations (#1130)
b8a274e4 Move Swedish translation to right folder
98008230 Bump react-jinke-music-player from 4.24.0 to 4.24.1 in /ui
02606f43 Add Swedish translation (#1126)
e5293900 Remove md5-hex
wrapper and use blueimp-md5
directly
0ec7a305 Reorder Makefile dev targets
b6cb81c3 Update Portuguese translations
e60f2bfa User management improvements (#1101)
666c0065 Bump lodash from 4.17.19 to 4.17.21 in /ui (#1110)
6ad94548 Add explicit dependency for inflection
fa0e6dda Remove C++11 warning in macOS
e047008f Fix test
3cac00ad Upgrade TagLib to 1.12
39d68e82 Restore pretty formatted config options in debug level
751e2d61 Make ScanInterval=0 disable the periodic scan
74300adb Fix Ligera Error (#1117)
a484adfc Add Slovenian translation. Thanks @jernejml
25bd36db Bump react-admin to 3.15.1
87298f61 Add more explicit npm dependencies
46999023 Remove dependency on lodash.get
978933aa Add explicit npm dependencies
77e736cc Do not use ra-core
directly
a77635e8 Only setup event stream when mounting the app
0c93db81 Fix PWA notification toolbar color (#1083)
c0243580 Integrate goose log with our own log system
22ce5b62 Removed unnecessary code
fa9083dd Upgrade prettier to 2.3.0
da684ff4 Bump github.com/lestrrat-go/jwx from 1.1.6 to 1.2.0
7d96167a Upgrade to go-chi 5
fb584070 Bump github.com/golangci/golangci-lint from 1.39.0 to 1.40.0
089d4aba Replace Feature Policy with Permissions Policy (#1112)
62ccbaad Improve systemd unit security (#677)
8419a2a5 Schedule periodic scan before starting initial scan
71c2ed99 Restart Current Song on previous (#1104)
72ec808a Bump react-jinke-music-player from 4.21.2 to 4.24.0 in /ui
702a6505 Fix redaction for query parameters. Fix #1103
3e8d3e78 Fix Bookmarks Subsonic support (#1099)
47f4e0a4 Refactor to remove some nesting
1f894992 Fix(?) possible TypeError
c92a24b3 Bump github.com/onsi/gomega from 1.11.0 to 1.12.0
cbe0d976 Bump github.com/robfig/cron/v3 from 3.0.0 to 3.0.1 (#1098)
44dd414d Bump github.com/microcosm-cc/bluemonday from 1.0.8 to 1.0.9 (#1056)
d85db8ff Fix Spotify-ish playlist title is cut off (#1094)
c7378c0f Bump @testing-library/user-event from 13.1.5 to 13.1.8 in /ui (#1082)
18696c55 Update Czech translation (#1095)
5a5d763c Bump github.com/onsi/ginkgo from 1.16.1 to 1.16.2 (#1096)
f8dbc41b Breaking change: Add ScanSchedule
, allows interval and cron based configurations.
1d6aa700 Fix possible TypeError
30bb3f7b BPM metadata enhancement (#1087)
fb33aa44 Fix possible TypeError
9e559311 Fix Album Grid flickering
a5fc5f0f Revert "Better way to invoke make single
"
73efbd90 Better way to invoke make single
cbc4cb48 Fix QuickFilter by favourites in Album/All view
98647339 Fix missing translation error in console. Closes #1038
66b31644 Upgrade React-Admin to 3.15.0
b478b0af FIx ffmpeg output regex too rigid
c3316e20 Fix cover art detection with ffmpeg 4.4
874b17b8 Require user to provide current password to be able to change it
5808b9fb Fix Transcodings menu
c33ebabd Fix warning about promise being ignored
7feda4be Add EnableUserEditing
, to control whether a regular user can change their own details (default true
)
2ff1c79b Fix EnableLogRedacting
case
cfbc39fb Add log redacting, controlled by the new EnableLogRedacting
config option (default true
)
2372f1d1 Change visibility of helper function
490a7fcf Add test to Login function
ad153f5f Fix User delete button not showing
b8138eba Fix create first login
e3fe8399 Fix DevAutoCreateAdminPassword
88105d5c Clean-up Makefile, add help
b180386d Simplify build targets
70e7bf6b Clean up some make
targets
d41137ad [Spotify-ish] Login consistent with other themes (#1073)
88f2fc35 Fix regular users not able to edit their info before logging in again
bc62efb0 More auth tests
eaf40efd Never send passwords to the UI
71dc0ddd Show Person icon for non admin users
bcda53f1 Less waiting for cache to be ready
8a07bac2 Fix SIGUSR1 work when ScanInterval=0
a35de2bf Allow regular users to change their info, including password.
22582392 Fix "Failed prop type: Invalid prop variant
" in console
932c108e Fix "SharedArrayBuffer will require cross-origin isolation"
20d2726f Improve scanner (#1054)
771c91d2 [Spotify-ish] Indicate active page number (#1068)
b8173124 Update ja.json (POEditor.com)
d1605dcf Replace godirwalk
with standard Go 1.16 filepath.WalkDir
10cfaad9 Bump react-redux version to 7.2.4
07f6a7cc Bump @testing-library dependencies
6e73c237 Keepalive must return an ID to be used with dataProvider.getOne
862c6d3c Upgrade React-Admin to 3.14.5
69266368 Uses GoLang 1.16.3
0d409e37 Fix aspect ratio of login icon
This fixes a few issues:
ffmpeg
extractor not detecting album covers when used with ffmpeg
4.435027bbe FIx ffmpeg output regex too rigid
3af46773 Fix cover art detection with ffmpeg 4.4
3c30cefc Fix warning about promise being ignored
d0fea6bf Fix SIGUSR1 work when ScanInterval=0
fff71739 Fix "Failed prop type: Invalid prop variant
" in console
90a07392 Fix "SharedArrayBuffer will require cross-origin isolation"
ab685247 [Spotify-ish] Indicate active page number (#1068)
125c4fe5 Keepalive must return an ID to be used with dataProvider.getOne
616a44ba Fix aspect ratio of login icon