What's Changed
- perf(backend): mirror ROM filter values into a narrow trigger-maintained table by @gantoine in #3885
- perf(backend): materialize virtual collection membership by @gantoine in #3886
- fix(archives): read RAR archives through bsdtar so they can be hashed by @gantoine in #3887
- fix(nginx): cache only fingerprinted assets, revalidate the rest by @Spinnich in #3892
- fix(v2): hide empty platforms in Server Stats breakdown by @Spinnich in #3899
- fix(scan): reconcile rom_files in place instead of purging them by @gantoine in #3900
- fix(scan): emit a client update for ROMs that are no longer missing by @gantoine in #3903
- Fix/server stats duplicate slug key by @Spinnich in #3906
- Add music favorites and playlists API by @tmgast in #3896
- perf(stats): aggregate Server Stats breakdowns from roms_facets by @Spinnich in #3910
- Fix Playmatch health check failing on plain-text response by @gantoine in #3916
- Stop storing fanart and title_screen twice when screenshots are enabled by @gantoine in #3918
- Add scan.priority.region_mode to let config regions drive media selection by @gantoine in #3917
- Default EmulatorJS netplay username to the RomM account by @gantoine in #3919
- fix(v2): restore backdrop-filter blur in production builds by @zurdi15 in #3922
- Keep config.yaml EmulatorJS core settings active after user changes settings by @gantoine in #3920
- Add Scan Settings to the user dropdown menu by @gantoine in #3923
- build(deps-dev): bump fast-uri from 3.1.2 to 3.1.4 in /frontend by @dependabot[bot] in #3927
- build(deps): bump linkify-it from 5.0.1 to 5.0.2 in /frontend by @dependabot[bot] in #3926
- fix(migrations): pin device FK column collations to match devices.id by @gantoine in #3929
Full Changelog: 5.1.0-alpha.2...5.1.0-alpha.3