Highlights
Save sync engine
"Coming soon" no more! Third-party app developers will now be able to rely on RomM to keep save files in sync across devices and platforms. #3137
Devices (apps, handhelds, browsers) can choose to register themselves with the server, which uniquely identifies them with a token. The system tracks which device has the latest version of a save file, flags conflicts when two devices change the same save, and syncs in whichever way fits the device: on demand, via a watched folder, or through a scheduled background sync.
Play session tracking
Another one for the app developers: client devices submit batches of play sessions per device, recording when and how long games were played. Sessions track both the time window (start_time/end_time) and screen-on time (duration_ms), which may differ due to device suspension or back-grounding. #3155
Libretro thumbnails
The libretro thumbnail repository is now available as a first-class artwork source for region-correct box art (PAL/Europe, Japan, etc.). Matching is exact case-insensitive against the directory listing, so a ROM named "(Europe)" lands on the (Europe) artwork. The source is enabled by default, and you can set it's priority in your config.yml via the scan.priority.artwork list. #3252
Pegasus metadata export
You can now auto-export a Pegasus compatible metadata.pegasus.txt file, just like the existing gamelist.xml export. Enable it in your config.yml file by setting scan.export.pegasus to true, and it should appear in each platform folder (alongside your ROMs). #3153
Warning
The structure of scan exports in config.yml has changed! If you're currently exporting gamelist.xml files with scan.export_gamelist, migrate to scan.export.gamelist_xml: true
Notable changes
- Gamelist export improvements by @vargash in #3202
- Send a suggestion to playmatch on manual match when enabled by @DevYukine in #3296
- Add SteamGridDB, ScreenScraper, MobyGames & Launchbox hash support to Playmatch by @DevYukine in #3381
Fixes
- 4.8.1 hotfixes by @gantoine in #3221
- UI settings not woking after switching pages back and forth by @Namaneo in #3317
- MSDOS games fail to launch in console mode ("Error for site owner / Check console") by @gantoine in #3294
- Include
cusregion in default ScreenScraper fallback regions by @gantoine in #3273 - Scan stalls on platforms with 10k+ already-scanned ROMs by @gantoine in #3249
- Respect LOGLEVEL env var across all log output sources by @gantoine in #3243
- Registration links redirect to login for unauthenticated users by @gantoine in #3231
- Address bugs and add test coverage for save-sync by @tmgast in #3135
- Fix age_ratings Pydantic validation error on MySQL/MariaDB for single-element arrays by @gantoine in #3223
- Parse Content-Type essence before validating resource downloads by @TechnicallyComputers in #3233
- [ROMM-3232] Fix content_hash not updated by @gantoine in #3234
- Fix extension exclusion not matching multi-dot filenames by @gantoine in #3326
- Fix chunked uploads writing to RAM/tmpfs and upload speed showing 0 B/s by @gantoine in #3316
- Fix RuffleRS scaling and overflow issues on large and small screens by @jondycz in #3245
- Fix RAHasher prod build by @dangmai in #3282
- Fix download failing when hash has not been computed by @Namaneo in #3264
- Fix race condition in collection and favorite rom membership updates by @Spinnich in #3263
- Fix settings drawer logout button overflowing on mobile by @gantoine in #3248
- [ROMM-3235] Improve light mode text by @gantoine in #3236
- Resolve MariaDB errors in migration downgrades (0068, 0072) by @gantoine in #3246
- Show TheGamesDB link on platform drawer when tgdb_id is set by @gantoine in #3254
- A bunch of minor bug fixes by @Namaneo in #3270
- Re-parse tags from filename when renaming a rom by @zurdi15 in #3295
- Open refresh metadata dialog with scan type and metadata source selection by @gantoine in #3293
- Setup wizard: make platform row click toggle selection checkbox by @gantoine in #3341
- Use static auth background on Firefox by @gantoine in #3352
- Validate uploaded images with libmagic by @gantoine in #3353
- Tolerate forward-compat values and malformed YAML in config loader by @gantoine in #3364
- Apply
DISABLE_EMULATOR_JSto Console mode (disable Play + block direct player route) by @gantoine in #3373 - Fix stale disc file ID in localStorage causing 404 on ROM play after rescan by @gantoine in #3374
- Fix
gamelist.xmlexport to use relative media paths for local exports by @gtronset in #3369 - Include games without achievements in RA hash cache by @gantoine in #3368
- Generate gunicorn logging config to writable /tmp path by @gantoine in #3383
- Avoid Safari/WebKit stalls during chunked ROM uploads by @gantoine in #3382
Other changes
- Safer migrations by @gantoine in #3238
- Skip RAHasher subprocess for archived disc-platform ROMs by @gantoine in #3253
- Add missing index on
rom_files(rom_id)to fix slow game listing on large ROM sets by @gantoine in #3259 - Enforce LF line endings for shell scripts via .gitattributes by @Spinnich in #3266
- Describe architecture by @zurdi15 in #3299
- Replace HIGH_PRIO_STRUCTURE_PATH by @gantoine in #3322
- Replace deprecated
job.get_id()withjob.idfor rq >= 2.7.0 compatibility by @gantoine in #3320 - Update config.batocera-retrobat.yml by @enlewof in #3349
- Prefer ROM's own region tag for ScreenScraper and IGDB artwork by @gantoine in #3367
- Add comma-separated metadata attribute support to gamelist by @EntropyEngineer in #3380
- Bump RAHasher to 1.8.3 in docker/Dockerfile by @gantoine in #3277
- Bump pytest-asyncio for pytest 9 compatibility by @gantoine in #3269
- Bump vite from 6.4.1 to 6.4.2 in /frontend by @dependabot[bot] in #3227
- Bump postcss from 8.5.8 to 8.5.12 in /frontend by @dependabot[bot] in #3321
- Bump axios from 1.13.6 to 1.15.0 in /frontend by @dependabot[bot] in #3240
- Bump python-dotenv from 1.0.1 to 1.2.2 by @dependabot[bot] in #3301
- Bump follow-redirects from 1.15.11 to 1.16.0 in /frontend by @dependabot[bot] in #3267
- Bump pillow from 12.1.1 to 12.2.0 by @dependabot[bot] in #3257
- Bump mako from 1.3.10 to 1.3.11 by @dependabot[bot] in #3304
- Bump pytest from 8.4.1 to 9.0.3 by @dependabot[bot] in #3268
- Bump fast-uri from 3.1.0 to 3.1.2 in /frontend by @dependabot[bot] in #3345
- Bump serialize-javascript and workbox-build in /frontend by @dependabot[bot] in #3346
- Bump cryptography from 46.0.5 to 46.0.7 by @dependabot[bot] in #3351
- Bump @babel/plugin-transform-modules-systemjs from 7.29.0 to 7.29.4 in /frontend by @dependabot[bot] in #3350
- Bump authlib from 1.6.9 to 1.6.12 by @dependabot[bot] in #3370
New Contributors
- @TechnicallyComputers made their first contribution in #3233
- @jondycz made their first contribution in #3245
- @Spinnich made their first contribution in #3263
- @Namaneo made their first contribution in #3264
- @dangmai made their first contribution in #3282
- @enlewof made their first contribution in #3349
- @EntropyEngineer made their first contribution in #3380
- @gtronset made their first contribution in #3369
Full Changelog: 4.8.1...4.9.0-alpha.3