4000 Commits

Author SHA1 Message Date
Deluan Quintão
cb65d3f73e
fix(ui): update translations from POEditor (#3568)
Co-authored-by: navidrome-bot <navidrome-bot@navidrome.org>
2026-01-02 20:43:18 +00:00
Deluan Quintão
60a777808b
feat(ci): add updated language names to the POEditor PR title (#3566)
* refactor(ci): add updated languages to the POEditor PR title

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(ci): add an author to the PR

Signed-off-by: Deluan <deluan@navidrome.org>

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:43:18 +00:00
Deluan
19ca4d0e98
fix(server): reduce album placeholder image size by converting it to webp
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:43:18 +00:00
Deluan
4197da3613
fix(insights): check if running in a container
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:43:18 +00:00
Deluan
e970b3670c
fix(insights): better status
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:43:18 +00:00
Deluan
88e03b13cf
fix(ui): show last.fm api-key missing in a FormHelperText
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:43:18 +00:00
Dany Marcoux
c838eac6d7
docs: set org.opencontainers.image.source label in Dockerfile (#3564)
As documented in the OCI Image Format,
org.opencontainers.image.source[1] identifies an image's source
repository. This is purely for documentation purposes. It does however
help tools such as Renovate[2] to find the changelogs when a new
Navidrome version is released. The changelogs would then be included in
the PR Renovate creates.

[1]: 5325ec4885/annotations.md (L24)
[2]: https://docs.renovatebot.com/modules/datasource/docker/#description

Signed-off-by: Dany Marcoux <git@dmarcoux.com>
2026-01-02 20:43:18 +00:00
Deluan Quintão
4d1ed54ca9
fix(ui): don't hide Last.fm scrobble switch (#3561)
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:43:18 +00:00
Deluan Quintão
06a61c261f
fix(insights): fix issues and improve reports (#3558)
* fix(insights): show error whn reading library counts

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): wait 30 mins before send first report

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): send number of active players, grouped by client type

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): disable reports when running in dev mode

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): add Dockerfile to the docker build, to avoid `vcs.modified=true`

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): add more linux fs types

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): need admin permissions to retrieve library counts

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): dev flag to disable player insights

Signed-off-by: Deluan <deluan@navidrome.org>

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:43:18 +00:00
Caio Cotts
4592fd98a2
fix(ui): fix play queue for play button and context menus (#3559) 2026-01-02 20:43:18 +00:00
York
37464be5d7
fix(ui): completed the translation of zh-Hant and zh-Hans (#3450)
* Completed the translation of zh-Hant and zh-Hans

* Update translation terms in zh-Hans and zh-Hant files

---------

Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:43:18 +00:00
Deluan Quintão
04cda742f3
fix(ui): update Turkish, Galician and Polish translations from POEditor (#3426)
Co-authored-by: deluan <331353+deluan@users.noreply.github.com>
2026-01-02 20:43:17 +00:00
qx100
36aee5b066
fix(ui): Update Chinese (simplified) Translation (#3490) 2026-01-02 20:43:17 +00:00
Xabi
506264155a
fix(ui): update Basque (#3542)
* fix(ui): update eu.json

Added:
- lastAccessAt

Updated:
- lastLoginAt

* fix(ui): update eu.json

Updated:
- logout
2026-01-02 20:43:17 +00:00
Deluan
accc5b6d6d
chore(deps): bump Go dependencies
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:43:15 +00:00
Deluan Quintão
ebde3d1655
feat(Insights): add anonymous usage data collection (#3543)
* feat(insights): initial code (WIP)

* feat(insights): add more info

* feat(insights): add fs info

* feat(insights): export insights.Data

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): more config info

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(insights): move data struct to its own package

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(insights): omit some attrs if empty

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): send insights to server, add option to disable

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): remove info about anonymous login

Signed-off-by: Deluan <deluan@navidrome.org>

* chore(insights): fix lint

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): disable collector if EnableExternalServices is false

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): fix type casting for 32bit platforms

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): remove EnableExternalServices from the collection (as it will always be false)

Signed-off-by: Deluan <deluan@navidrome.org>

* chore(insights): fix lint

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(insights): rename function for consistency

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): log the data sent to the collector server

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): add last collection timestamp to the "about" dialog.

Also add opt-out info to the SignUp form

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): only sends the initial data collection after an admin user is created

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): remove dangling comment

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): Translate insights messages

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): reporting empty library

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor: move URL to consts.js

Signed-off-by: Deluan <deluan@navidrome.org>

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:57 +00:00
Deluan
88fa1a13e7
chore(deps): bump prettier
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:57 +00:00
Deluan
5589ecb3cf
chore(deps): bump JS dependencies
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:57 +00:00
Deluan
2fbd52584a
chore(deps): bump Alpine version
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:57 +00:00
Deluan
b7e51a9770
chore(deps): bump Go dependencies
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:57 +00:00
Kendall Garner
34f8d23066
fix(ui): service worker crashing on precacheAndRoute (#3528) 2026-01-02 20:41:57 +00:00
Deluan
1c869102e6
fix(server): don't try to save JWT if it fails to encrypt
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:57 +00:00
Deluan
05521781a8
fix(server): encrypt jwt secret at rest
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:57 +00:00
Deluan
03fa2920a2
fix(server): more race conditions when updating artist/album from external sources
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:57 +00:00
Deluan
cdcfc99db8
fix(server): add disc number to fake path.
Also revert "feat(server): enable "Report Real Path" by default"

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:57 +00:00
Deluan
b7bb44cc7e
fix(server): race condition when updating artist/album from external sources
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:56 +00:00
Deluan
16f2f849e5
feat(server): get artist images from Last.fm
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:56 +00:00
Deluan
df0ba725c1
feat(server): enable "Report Real Path" by default
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:56 +00:00
Deluan Quintão
6959412840
fix(ui): PWA not updating properly in new Vite config (#3493)
* fix: pwa not updating. use the custom code we had before

Signed-off-by: Deluan <deluan@navidrome.org>

* fix: docker build

Signed-off-by: Deluan <deluan@navidrome.org>

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:56 +00:00
Deluan
f6de01f5f1
chore(deps): bump JS dependencies
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:56 +00:00
Deluan
0a03b57d22
chore(deps): bump Go dependencies
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:56 +00:00
Kursat Aktas
89f7429f64
feat: add Navidrome Guru on Gurubase.io (#3491)
Signed-off-by: Kursat Aktas <kursat.ce@gmail.com>
2026-01-02 20:41:56 +00:00
Deluan
361e5736e6
chore: update sanitize with updated diacritics
See https://github.com/navidrome/navidrome/issues/255#issuecomment-2488595427

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:56 +00:00
Deluan
f7a0484874
fix: pre-cache square images, or else they are not useful for the Album Grid
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:56 +00:00
Deluan
0744038ead
refactor: when resizing, don't buffer the original image "just in case"
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:56 +00:00
Deluan
fd85b458ac
refactor: remove unnecessary intermediate buffer for ffmpeg image extraction
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:56 +00:00
Deluan
75263e5b8f
refactor: reduce GC pressure by pre-allocating slices
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:56 +00:00
Deluan
67d4982632
revert: separation of write and read DBs
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:56 +00:00
Deluan
17755b7676
refactor: better implementation of newRefreshQueue.
- use pointer references in channel
 - actually exits when context is canceled

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:55 +00:00
Deluan
4825597116
refactor: change toSQL to use ReplaceAllStringFunc, to cause less static allocations
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:55 +00:00
Deluan
9e94cfcffc
refactor: load translations with sync.OnceValues
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:55 +00:00
Deluan
57854aab13
chore(deps): bump JS dependencies
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:55 +00:00
Deluan
83de77360d
chore(deps): bump Go dependencies
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:53 +00:00
Deluan Quintão
202b64ce9e
feat: cache login background images (#3462)
* feat: use direct links to unsplash for background images

Signed-off-by: Deluan <deluan@navidrome.org>

* feat: cache images from unsplash

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor: use cache.HTTPClient to reduce complexity

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor: remove magic numbers

Signed-off-by: Deluan <deluan@navidrome.org>

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:22 +00:00
Deluan Quintão
54c3b8d14b
fix: forcing transcoding when client does not specify transcoding options (#3455)
* fix: wip

Signed-off-by: Deluan <deluan@navidrome.org>

* fix: revert #3227

It is not respecting the server configured transcoding for the player

Signed-off-by: Deluan <deluan@navidrome.org>

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:22 +00:00
Deluan
53541a6d4a
chore(deps): bump JS dependencies
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:22 +00:00
Deluan
af86a590d8
chore(deps): bump Go dependencies
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:19 +00:00
Deluan
394e07bbd3
chore(deps): bump js dependencies 2026-01-02 20:41:04 +00:00
Deluan
de18d117a9
chore(deps): bump go dependencies 2026-01-02 20:41:04 +00:00
Deluan Quintão
dd94c6689b
fix(server): try to find proper embedded front cover - only for vorbis comments for now (#3348)
* fix(artwork): get the first image from vorbis comments, not the last. fixes #3254

This uses a fork for now.

* fix(artwork): prioritize getting embedded types that are listed as "front" covers

* fix: cleanup
2026-01-02 20:41:04 +00:00