Releases: rommapp/romm
4.9.0-alpha.4
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
- Compute raw CHD hashes and route disc-data SHA1 to Hasheous by @Spinnich in #3385
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
- Default SYNC_BASE_PATH to /var/lib/romm/sync by @gantoine in #3386
- Exclude the videos directory from scanning for batocera config by @enlewof in #3387
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
- Improve API handling, KO scrape data, and metadata sanitization by @Spinnich in #3384
- Hardlink import/export assets, harden sync init by @gantoine in #3388
- 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
- Bump idna from 3.10 to 3.15 by @dependabot[bot] in #3391
New Contributors
- @TechnicallyComputers made their first contribution in #3233
- @jondycz made their first contribution in https://github....
4.9.0-alpha.3
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
4.9.0-alpha.2
Note
API Changes
New endpoints
POST /api/collection/{id}/roms: Add ROMs (list of IDs) to a collectionDELETE /api/collection/{id}/roms: Remove ROMs (list of IDs) from a collectionPOST /api/export/pegasus: Export ROMs tometadata.pegasus.txtand write to platform folderPOST /api/play-sessions: Inject a list of play sessions (for playtime tracking)GET /api/play-sessions: Get filtered play sessionsDELETE /api/play-sessions/{session_id}: Delete play sessionPOST /api/sync/negotiate: Negotiate sync operations between a client device and serverPOST /api/sync/sessions/{session_id}/complete: Mark a sync session as completeGET /api/sync/sessions: List sync sessionsGET /api/sync/sessions/{session_id}: Get a specific sync sessionPOST /api/sync/devices/{device_id}/push-pull: Manually trigger a push-pull sync for a device
Changed endpoints
/api/gamelist/export*→/api/export/gamelist-xml⚠️ ConfigResponsereturns new fields:DEFAULT_EXCLUDED_DIRS: default list of always-excluded foldersDEFAULT_EXCLUDED_FILES: default list of always-excluded filesDEFAULT_EXCLUDED_EXTENSIONS: default list of always-excluded extensionsGAMELIST_MEDIA_THUMBNAIL: one ofMetadataMediaTypeGAMELIST_MEDIA_IMAGE: of oneMetadataMediaType
HeartbeatResponsenow returnsLIBRETRO_API_ENABLED- Device create and update endpoints now accept
sync_modeandsync_configfields - All datetime fields are now serialized to ensure ensuring UTC timezone is always present
Environment variables
- SYNC_BASE_PATH: (default:
/romm/sync) - ENABLE_SYNC_FOLDER_WATCHER: (default: false)
- SYNC_FOLDER_SCAN_DELAY: (default: 2 minutes)
- ENABLE_SYNC_PUSH_PULL: (default: false)
- SYNC_PUSH_PULL_CRON: (default: every 30 minutes)
- SYNC_SSH_KEYS_PATH: (default:
/romm/sync/keys) - SYNC_SSH_KNOWN_HOSTS_PATH: (default:
/romm/sync/known_hosts)
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
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
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 - 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
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
Full Changelog: 4.8.1...4.9.0-alpha.2
4.9.0-alpha.1
Note
API Changes
New endpoints
POST /api/collection/{id}/roms: Add ROMs (list of IDs) to a collectionDELETE /api/collection/{id}/roms: Remove ROMs (list of IDs) from a collectionPOST /api/export/pegasus: Export ROMs tometadata.pegasus.txtand write to platform folderPOST /api/play-sessions: Inject a list of play sessions (for playtime tracking)GET /api/play-sessions: Get filtered play sessionsDELETE /api/play-sessions/{session_id}: Delete play sessionPOST /api/sync/negotiate: Negotiate sync operations between a client device and serverPOST /api/sync/sessions/{session_id}/complete: Mark a sync session as completeGET /api/sync/sessions: List sync sessionsGET /api/sync/sessions/{session_id}: Get a specific sync sessionPOST /api/sync/devices/{device_id}/push-pull: Manually trigger a push-pull sync for a device
Changed endpoints
/api/gamelist/export* → /api/export/gamelist-xml
ConfigResponsereturns new fields:DEFAULT_EXCLUDED_DIRS: default list of always-excluded foldersDEFAULT_EXCLUDED_FILES: default list of always-excluded filesDEFAULT_EXCLUDED_EXTENSIONS: default list of always-excluded extensionsGAMELIST_MEDIA_THUMBNAIL: one ofMetadataMediaTypeGAMELIST_MEDIA_IMAGE: of oneMetadataMediaType
HeartbeatResponsenow returnsLIBRETRO_API_ENABLED- Device create and update endpoints now accept
sync_modeandsync_configfields - All datetime fields are now serialized to ensure ensuring UTC timezone is always present
Environment variables
- SYNC_BASE_PATH: (default:
/romm/sync) - ENABLE_SYNC_FOLDER_WATCHER: (default: false)
- SYNC_FOLDER_SCAN_DELAY: (default: 2 minutes)
- ENABLE_SYNC_PUSH_PULL: (default: false)
- SYNC_PUSH_PULL_CRON: (default: every 30 minutes)
- SYNC_SSH_KEYS_PATH: (default:
/romm/sync/keys) - SYNC_SSH_KNOWN_HOSTS_PATH: (default:
/romm/sync/known_hosts)
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.
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
- Add play session ingest for game time tracking by @tmgast in #3155
- Send a suggestion to playmatch on manual match when enabled by @DevYukine in #3296
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
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 - 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
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
Full Changelog: 4.8.1...4.9.0-alpha.1
4.8.1
What's Changed
- make loading per-platform stats opt-in so homepage doesn't fetch them by @cciollaro in #3158
- fix: correct ZX Spectrum +3 ROM hashes in known_bios_files.json by @Abdess in #3191
- Return link for romm-mobile app to README.md by @milktoastrat in #3207
- Add outbound HTTP proxy support for backend requests by @dafal in #3189
- chore(deps): bump lodash from 4.17.23 to 4.18.1 in /frontend by @dependabot[bot] in #3212
- 4.8 hotfixes by @gantoine in #3213
- Fix 500 on
/api/tasks/statusaftercleanup_missing_romstask completes by @gantoine in #3214 - Fix registration invite links losing token on external redirect by @gantoine in #3215
- fix: correctly delete nested (subdirectory) ROMs from filesystem by @gantoine in #3216
- Fix GET /api/tasks/status 500 on expired job TTL (NoSuchJobError) by @gantoine in #3217
New Contributors
Full Changelog: 4.8.0...4.8.1
4.8.0
Highlights
Client API tokens
API tokens are a safer way for apps and devices to connect without sharing user credentials. A new QR-based pairing flow makes setup quick, with support for regeneration and revocation when needed. #3114
Chunked uploads
Goodbye failed uploads and incessant timeouts! ROMs will now upload in smaller chunks, allowing for more reliable transfers even on spotty connections. #3076
Local LaunchBox metadata import
Have a local LaunchBox installation packed with games? You can now import metadata directly from it, including cover art, screenshots and video previews. #2922
Minor changes
- Add config option to use local video paths in gamelist.xml export by @JamieeBond in #3082
- Add additional cover styles for boxart to prevent cropping by @Drarox in #3060
- Fetch games on search view mount and reset search state on input clear by @zurdi15 in #3080
- Add
video_normalizedmedia type option for ScreenScraper scans by @gantoine in #3088 - Scrape and store age rating data from ScreenScraper.fr by @gantoine in #3089
- Make invite token expiration configurable by @gantoine in #3094
- Click to zoom game cover image by @gantoine in #3093
- Add more platforms to cover styles by @Drarox in #3098
- Show filtered ROM count in the gallery AppBar and filter drawer by @gantoine in #3097
- Show firmware count in scan results to improve BIOS detection discoverability by @gantoine in #3111
- Per-platform metadata coverage and region breakdown to server stats by @cciollaro in #3110
- Use PICO-8 built-in cover art from .p8.png cartridge files by @gantoine in #3119
- Auto-update game status from RetroAchievements award kind during progress sync by @gantoine in #3118
- Add Bulgarian (bg_BG) translation by @DenislavDenev in #3159
Fixes
- Fix platform aspect ratio not applying in gallery view by @gantoine in #3083
- Fix metadata IDs not persisting when handler is disabled or game not found by @gantoine in #3085
- Hack for natural sorting of ROMs by @gantoine in #3086
- Always sub dash with colon for launchbox matching by @gantoine in #3090
- Fix 500 error when loading platforms with ROMs whose filenames start with region tags by @gantoine in #3091
- Fix M3U generation to exclude raw .bin tracks when .cue files are present by @gantoine in #3100
- Filesystem watcher and scheduled scan skip when no metadata sources configured by @gantoine in #3106
- Replace deep watch with computed to reduce reactivity overhead by @cciollaro in #3104
- Add missing platforms to playable game filter by @Bergbok in #3121
- Default to querying all roms by @camhorn in #3122
- Remove cover image card bevel by @gantoine in #3131
- Auto-select firmware when only one option is available by @gantoine in #3150
- Fix IntegrityError when updating favourites after ROM rescan by @Copilot in #3166
- Fix mod_zip UTF-8 filename handling for non-ASCII downloads by @tmgast in #3171
Other changes
- Typed API form fields by @gantoine in #3036
- Fix OAuth token expiry and implement refresh token rotation by @HydroSulphide in #3102
- Add property for path_video and refactor places which use similar logic by @JamieeBond in #3116
- Move "Clean up All" missing ROMs deletion to background task by @gantoine in #3109
- Allow partial updates to ROM user props via typed payload schema by @gantoine in #3124
- Switch ACCESS_TOKEN_EXPIRE_MINUTES to SECONDS by @gantoine in #3096
- Update RAHasher to version 1.8.3 and add Wii platform support by @zurdi15 in #3145
- Add OIDC_SERVER_METADATA_URL to support providers with non-standard discovery URLs (e.g. Google) by @gantoine in #3099
- Fix OIDC login role downgrading for users without claims by @pacnpal in #3103
- Implement OIDC RP-Initiated Logout (end-session endpoint) by @gantoine in #3107
- Make OAuth token expiry configurable via env vars by @HydroSulphide in #3126
- Remove Non-Argosy Android app references from README by @milktoastrat in #3130
- Lockdown package installs by @gantoine in #3203
- Bump authlib from 1.6.6 to 1.6.7 by @dependabot[bot] in #3070
- Bump tar from 7.5.9 to 7.5.10 in /frontend by @dependabot[bot] in #3075
- Bump joserfc from 1.3.5 to 1.6.3 by @dependabot[bot] in #3064
- Bump tornado from 6.5.1 to 6.5.5 by @dependabot[bot] in #3123
- chore(deps): bump authlib from 1.6.7 to 1.6.9 by @dependabot[bot] in #3138
- chore(deps): bump memray from 1.17.2 to 1.19.2 by @dependabot[bot] in #3141
- chore(deps): bump socket.io-parser from 4.2.5 to 4.2.6 in /frontend by @dependabot[bot] in #3144
- chore(deps-dev): bump flatted from 3.3.4 to 3.4.2 in /frontend by @dependabot[bot] in #3146
- chore(deps-dev): bump picomatch from 2.3.1 to 2.3.2 in /frontend by @dependabot[bot] in #3177
- chore(deps): bump requests from 2.32.4 to 2.33.0 by @dependabot[bot] in #3186
- chore(deps-dev): bump handlebars from 4.7.8 to 4.7.9 in /frontend by @dependabot[bot] in #3188
- chore(deps): bump cryptography from 46.0.5 to 46.0.6 by @dependabot[bot] in #3196
- chore(deps): bump pygments from 2.19.2 to 2.20.0 by @dependabot[bot] in #3199
Note
Environment Variables
UPLOAD_TIMEOUT has been removed in favour of chunked uploads
OAUTH_ACCESS_TOKEN_EXPIRE_SECONDS: Access token lifetime (in seconds, default 30 minutes)
OAUTH_REFRESH_TOKEN_EXPIRE_SECONDS: Refresh token lifetime (in seconds, default 7 days)
INVITE_TOKEN_EXPIRY_SECONDS: Invite token lifetime (in seconds, default 10 minutes)
OIDC_SERVER_METADATA_URL: URL to the OIDC provider metadata endpoint
OIDC_RP_INITIATED_LOGOUT: Enable RP-initiated logout flow (default false)
OIDC_END_SESSION_ENDPOINT: OIDC end-session endpoint override URL
New Contributors
- @gravelfreeman made their first contribution in #2922
- @Drarox made their first contribution in #3060
- @alanfrigo made their first contribution in #3076
- @pacnpal made their first contribution in #3103
- @cciollaro made their first contribution in #3104
- @HydroSulphide made their first contribution in #3102
- @Bergbok made their first contribution in #3121
Full Changelog: 4.7.0...4.8.0
4.8.0-beta.1
Highlights
Client API tokens
API tokens are a safer way for apps and devices to connect without sharing user credentials. A new QR-based pairing flow makes setup quick, with support for regeneration and revocation when needed. #3114
Chunked uploads
Goodbye failed uploads and incessant timeouts! ROMs will now upload in smaller chunks, allowing for more reliable transfers even on spotty connections. #3076
Local LaunchBox metadata import
Have a local LaunchBox installation packed with games? You can now import metadata directly from it, including cover art, screenshots and video previews. #2922
Minor changes
- Add config option to use local video paths in gamelist.xml export by @JamieeBond in #3082
- Add additional cover styles for boxart to prevent cropping by @Drarox in #3060
- Fetch games on search view mount and reset search state on input clear by @zurdi15 in #3080
- Add
video_normalizedmedia type option for ScreenScraper scans by @gantoine in #3088 - Scrape and store age rating data from ScreenScraper.fr by @gantoine in #3089
- Make invite token expiration configurable by @gantoine in #3094
- Click to zoom game cover image by @gantoine in #3093
- Add more platforms to cover styles by @Drarox in #3098
- Show filtered ROM count in the gallery AppBar and filter drawer by @gantoine in #3097
- Show firmware count in scan results to improve BIOS detection discoverability by @gantoine in #3111
- Per-platform metadata coverage and region breakdown to server stats by @cciollaro in #3110
- Use PICO-8 built-in cover art from .p8.png cartridge files by @gantoine in #3119
- Auto-update game status from RetroAchievements award kind during progress sync by @gantoine in #3118
Fixes
- Fix platform aspect ratio not applying in gallery view by @gantoine in #3083
- Fix metadata IDs not persisting when handler is disabled or game not found by @gantoine in #3085
- Hack for natural sorting of ROMs by @gantoine in #3086
- Always sub dash with colon for launchbox matching by @gantoine in #3090
- Fix 500 error when loading platforms with ROMs whose filenames start with region tags by @gantoine in #3091
- Fix M3U generation to exclude raw .bin tracks when .cue files are present by @gantoine in #3100
- Filesystem watcher and scheduled scan skip when no metadata sources configured by @gantoine in #3106
- Replace deep watch with computed to reduce reactivity overhead by @cciollaro in #3104
- Add missing platforms to playable game filter by @Bergbok in #3121
- Default to querying all roms by @camhorn in #3122
- Remove cover image card bevel by @gantoine in #3131
- Auto-select firmware when only one option is available by @gantoine in #3150
Other changes
- Typed API form fields by @gantoine in #3036
- Fix OAuth token expiry and implement refresh token rotation by @HydroSulphide in #3102
- Add property for path_video and refactor places which use similar logic by @JamieeBond in #3116
- Move "Clean up All" missing ROMs deletion to background task by @gantoine in #3109
- Allow partial updates to ROM user props via typed payload schema by @gantoine in #3124
- Switch ACCESS_TOKEN_EXPIRE_MINUTES to SECONDS by @gantoine in #3096
- Update RAHasher to version 1.8.3 and add Wii platform support by @zurdi15 in #3145
- Add OIDC_SERVER_METADATA_URL to support providers with non-standard discovery URLs (e.g. Google) by @gantoine in #3099
- Fix OIDC login role downgrading for users without claims by @pacnpal in #3103
- Implement OIDC RP-Initiated Logout (end-session endpoint) by @gantoine in #3107
- Make OAuth token expiry configurable via env vars by @HydroSulphide in #3126
- Remove Non-Argosy Android app references from README by @milktoastrat in #3130
- Bump authlib from 1.6.6 to 1.6.7 by @dependabot[bot] in #3070
- Bump tar from 7.5.9 to 7.5.10 in /frontend by @dependabot[bot] in #3075
- Bump joserfc from 1.3.5 to 1.6.3 by @dependabot[bot] in #3064
- Bump tornado from 6.5.1 to 6.5.5 by @dependabot[bot] in #3123
- chore(deps): bump authlib from 1.6.7 to 1.6.9 by @dependabot[bot] in #3138
- chore(deps): bump memray from 1.17.2 to 1.19.2 by @dependabot[bot] in #3141
- chore(deps): bump socket.io-parser from 4.2.5 to 4.2.6 in /frontend by @dependabot[bot] in #3144
- chore(deps-dev): bump flatted from 3.3.4 to 3.4.2 in /frontend by @dependabot[bot] in #3146
Note
API Changes
PUT /api/roms: Update RomPOST /api/collections: Create CollectionPUT /api/collections: Update CollectionPOST /api/collections/smart: Create SmartCollectionPUT /api/collections/smart: Update SmartCollectionPOST /api/saves: Upload SavePUT /api/saves: Update SavePOST /api/states: Upload StatePUT /api/states: Update StatePOST /api/screenshots: Upload Screenshot
Client tokens expose a new batch of endpoints:
POST /api/client-tokens: Create client tokenGET /api/client-tokens: List client tokensDELETE /api/client-tokens/{token_id}: Revoke client tokenPOST /api/client-tokens/regenerate: Regenerate client token secretPOST /api/client-tokens/pair: Pair client token via QR codeGET /api/client-tokens/pair/{code}/status: Check QR pairing statusPOST /api/client-tokens/exchange: Exchange pairing code for client tokenGET /api/client-tokens/all: Get all client tokens (admin only)DELETE /api/client-tokens/{token_id}/admin: Revoke any client token (admin only)
RomFile endponts have been moved:
GET /api/roms/files/{rom_id}->POST /api/roms/{rom_id}/filesGET /api/roms/files/{rom_id}/content->/{id}/files/content/{file_name}
Other changes:
GET /api/statsendpoint now includes additional metadata coverage and region breakdowns- Added
METADATA_COVERAGEandREGION_BREAKDOWNfields toStatsReturn
- Added
- Added
path_videofield andra_hashfields toDetailedRomSchemaandSimpleRomSchema - Added
ra_hashfield toRomFileSchema - Added
firmware_countfield toPlatformSchema - Added
highest_award_kindfield toRAUserGameProgression - Added
refresh_tokenandrefresh_expirestoTokenResponse UPLOAD_TIMEOUThas been removed from the/api/heartbeatresponse
Note
Environment Variables
UPLOAD_TIMEOUT has been removed in favour of chunked uploads
OAUTH_ACCESS_TOKEN_EXPIRE_SECONDS: Access token lifetime (in seconds, default 30 minutes)
OAUTH_REFRESH_TOKEN_EXPIRE_SECONDS: Refresh token lifetime (in seconds, default 7 days)
INVITE_TOKEN_EXPIRY_SECONDS: Invite token lifetime (in seconds, default 10 minutes)
OIDC_SERVER_METADATA_URL: URL to the OIDC provider metadata endpoint
OIDC_RP_INITIATED_LOGOUT: Enable RP-initiated logout flow (default false)
OIDC_END_SESSION_ENDPOINT: OIDC end-session endpoint override URL
New Contributors
- @gravelfreeman made their first contribution in #2922
- @Drarox made their first contribution in #3060
- @alanfrigo made their first contribution in #3076
- @pacnpal made their first contribution in #3103
- @cciollaro made their first contribution in #3104
- @HydroSulphide made their f...
4.8.0-alpha.1
Note
API Changes
PUT /api/roms: Update RomPOST /api/collections: Create CollectionPUT /api/collections: Update CollectionPOST /api/collections/smart: Create SmartCollectionPUT /api/collections/smart: Update SmartCollectionPOST /api/saves: Upload SavePUT /api/saves: Update SavePOST /api/states: Upload StatePUT /api/states: Update StatePOST /api/screenshots: Upload Screenshot
Client tokens expose a new batch of endpoints:
POST /api/client-tokens: Create client tokenGET /api/client-tokens: List client tokensDELETE /api/client-tokens/{token_id}: Revoke client tokenPOST /api/client-tokens/regenerate: Regenerate client token secretPOST /api/client-tokens/pair: Pair client token via QR codeGET /api/client-tokens/pair/{code}/status: Check QR pairing statusPOST /api/client-tokens/exchange: Exchange pairing code for client tokenGET /api/client-tokens/all: Get all client tokens (admin only)DELETE /api/client-tokens/{token_id}/admin: Revoke any client token (admin only)
RomFile endponts have been moved:
GET /api/roms/files/{rom_id}->POST /api/roms/{rom_id}/filesGET /api/roms/files/{rom_id}/content->/{id}/files/content/{file_name}
Other changes:
GET /api/statsendpoint now includes additional metadata coverage and region breakdowns- Added
METADATA_COVERAGEandREGION_BREAKDOWNfields toStatsReturn
- Added
- Added
path_videofield andra_hashfields toDetailedRomSchemaandSimpleRomSchema - Added
ra_hashfield toRomFileSchema - Added
firmware_countfield toPlatformSchema - Added
highest_award_kindfield toRAUserGameProgression - Added
refresh_tokenandrefresh_expirestoTokenResponse UPLOAD_TIMEOUThas been removed from the/api/heartbeatresponse
Note
Environment Variables
UPLOAD_TIMEOUT has been removed in favour of chunked uploads
OAUTH_ACCESS_TOKEN_EXPIRE_SECONDS: Access token lifetime (in seconds, default 30 minutes)
OAUTH_REFRESH_TOKEN_EXPIRE_SECONDS: Refresh token lifetime (in seconds, default 7 days)
INVITE_TOKEN_EXPIRY_SECONDS: Invite token lifetime (in seconds, default 10 minutes)
OIDC_SERVER_METADATA_URL: URL to the OIDC provider metadata endpoint
OIDC_RP_INITIATED_LOGOUT: Enable RP-initiated logout flow (default false)
OIDC_END_SESSION_ENDPOINT: OIDC end-session endpoint override URL
Highlights
Client API tokens
API tokens are a safer way for apps and devices to connect without sharing user credentials. A new QR-based pairing flow makes setup quick, with support for regeneration and revocation when needed. #3114
Chunked uploads
Goodbye failed uploads and incessant timeouts! ROMs will now upload in smaller chunks, allowing for more reliable transfers even on spotty connections. #3076
Local LaunchBox metadata import
Have a local LaunchBox installation packed with games? You can now import metadata directly from it, including cover art, screenshots and video previews. #2922
Minor changes
- Add config option to use local video paths in gamelist.xml export by @JamieeBond in #3082
- Add additional cover styles for boxart to prevent cropping by @Drarox in #3060
- Fetch games on search view mount and reset search state on input clear by @zurdi15 in #3080
- Add
video_normalizedmedia type option for ScreenScraper scans by @gantoine in #3088 - Scrape and store age rating data from ScreenScraper.fr by @gantoine in #3089
- Make invite token expiration configurable by @gantoine in #3094
- Click to zoom game cover image by @gantoine in #3093
- Add more platforms to cover styles by @Drarox in #3098
- Show filtered ROM count in the gallery AppBar and filter drawer by @gantoine in #3097
- Show firmware count in scan results to improve BIOS detection discoverability by @gantoine in #3111
- Per-platform metadata coverage and region breakdown to server stats by @cciollaro in #3110
- Use PICO-8 built-in cover art from .p8.png cartridge files by @gantoine in #3119
- Auto-update game status from RetroAchievements award kind during progress sync by @gantoine in #3118
Fixes
- Fix platform aspect ratio not applying in gallery view by @gantoine in #3083
- Fix metadata IDs not persisting when handler is disabled or game not found by @gantoine in #3085
- Hack for natural sorting of ROMs by @gantoine in #3086
- Always sub dash with colon for launchbox matching by @gantoine in #3090
- Fix 500 error when loading platforms with ROMs whose filenames start with region tags by @gantoine in #3091
- Fix M3U generation to exclude raw .bin tracks when .cue files are present by @gantoine in #3100
- Filesystem watcher and scheduled scan skip when no metadata sources configured by @gantoine in #3106
- Replace deep watch with computed to reduce reactivity overhead by @cciollaro in #3104
- Add missing platforms to playable game filter by @Bergbok in #3121
- Default to querying all roms by @camhorn in #3122
- Remove cover image card bevel by @gantoine in #3131
Other changes
- Typed API form fields by @gantoine in #3036
- Fix OAuth token expiry and implement refresh token rotation by @HydroSulphide in #3102
- Add property for path_video and refactor places which use similar logic by @JamieeBond in #3116
- Move "Clean up All" missing ROMs deletion to background task by @gantoine in #3109
- Allow partial updates to ROM user props via typed payload schema by @gantoine in #3124
- Switch ACCESS_TOKEN_EXPIRE_MINUTES to SECONDS by @gantoine in #3096
- Add OIDC_SERVER_METADATA_URL to support providers with non-standard discovery URLs (e.g. Google) by @gantoine in #3099
- Fix OIDC login role downgrading for users without claims by @pacnpal in #3103
- Implement OIDC RP-Initiated Logout (end-session endpoint) by @gantoine in #3107
- Make OAuth token expiry configurable via env vars by @HydroSulphide in #3126
- Remove Non-Argosy Android app references from README by @milktoastrat in #3130
- Bump authlib from 1.6.6 to 1.6.7 by @dependabot[bot] in #3070
- Bump tar from 7.5.9 to 7.5.10 in /frontend by @dependabot[bot] in #3075
- Bump joserfc from 1.3.5 to 1.6.3 by @dependabot[bot] in #3064
- Bump tornado from 6.5.1 to 6.5.5 by @dependabot[bot] in #3123
New Contributors
- @gravelfreeman made their first contribution in #2922
- @Drarox made their first contribution in #3060
- @alanfrigo made their first contribution in #3076
- @pacnpal made their first contribution in #3103
- @cciollaro made their first contribution in #3104
- @HydroSulphide made their first contribution in #3102
- @Bergbok made their first contribution in #3121
Full Changelog: 4.7.0...4.8.0-alpha.1
4.7.0
Highlights
Auto-export gamelist.xml
Automatically generate an ES-DE compatible gamelist.xml file during scans by enabling the option in your config.yml. This will place the new gamelist.xml file within the platform folder for selected/discovered platforms.
scan:
export_gamelist: trueDevice-based save synchronization
Thanks to @tmgast, we've laid the ground work for device-based save synchronization to enable multi-device save management, as defined in RFC-0001. Devices (handhelds, PCs, etc.) can register with the server and track which saves they've synced, enabling conflict detection when a device tries to upload stale data.
Note that this is purely foundational work to set up an initial structure and API implementation and in intended for third-party developers. #2917
Minor changes
- Add support for ScummVM shortnames by @gantoine in #2957
- Add
OIDC_AUTOLOGIN=trueenv var to automatically login using OIDC by @pR0Ps in #2969 - Enable keyboard lock in emulatorjs by @matthewturk in #3043
- Group games with same name (but different tags) as versions/siblings by @zeroSteiner in #2984
- Search by mutliple keywords with
|by @gantoine in #2996zelda|mario|sonicwould show all games withzelda,marioORsonicin the name
- New
PKGJfeed endpoints in.tsvformat by @gantoine in #2986- PSP games:
GET /api/feeds/pkgj/psp/games - PSP DLC files:
GET /api/feeds/pkgj/psp/dlc - PS Vita games:
GET /api/feeds/pkgj/psvita/games - PS Vita DLC files:
GET /api/feeds/pkgj/psvita/dlc - PSX games:
GET /api/feeds/pkgj/psx/games
- PSP games:
Fixes
- [HOTFIX] Fix all roms displayed in all platforms by @gantoine in #2948
- [ROMM-2956] Fix refresh on card edit by @gantoine in #2962
- Invalid category values fix by @LoneAngelFayt in #2979
- Filter keys now plural by @camhorn in #2982
- [ROMM-2991] Allow set completion to 0 by @gantoine in #2995
- [ROMM-2997] Fix HLTB search term fetching by @gantoine in #2998
- [ROMM-2983] Fix negative filter by verified by @gantoine in #3000
- [ROMM-2976] Fix no games displayed for status filter by @gantoine in #3001
- [ROMM-2974] Stop displaying public collections in "add to collection" dialog the user doesn't own by @gantoine in #3002
- [ROMM-2972] Fix /props returning stale data by @gantoine in #3003
- [ROMM-2965] Check file count for file select menu emulatorjs by @gantoine in #3005
- [ROMM-2943] Match scanned platform based on fs_slug by @gantoine in #3008
- [ROMM-3020] Fix split collection custom artowrk by @gantoine in #3028
- [ROMM-3025] Fix collections with custom art failing by @gantoine in #3027
- [ROMM-3026] Region/language shortcodes should be case sensitive by @gantoine in #3035
- [ROMM-3031] Fix screenshot property on save/state by @gantoine in #3037
- Remove ICE server list from config response when unauthenticated by @gantoine in #3054
Other changes
- New endpoints to fetch all IDs by @gantoine in #2921
- Example config ES-DE update/fix by @ricardovdheijden in #2963
- Use vite copy plugin to load rom-patcher by @gantoine in #2964
- Skip opentelemetry-instrument when OTEL is disabled by @Wadenschwinger in #2968
- Update uses of roms to ROMs by @gantoine in #3009
- [ROMM-2927] Add default folders to config manager by @gantoine in #3007
- [AIKIDO-13126609] Raise HTTP exception if device not found by @gantoine in #3030
- [AIKIDO-13126604] Stream file when building file hash by @gantoine in #3029
- Ugprade some docker base images by @gantoine in #3032
- Run formatter on alembic files by @gantoine in #3034
- Add Rom.ra_hash and RomFile.ra_hash fields to API by @gantoine in #3019
- Add platforms icons for neogeox, neogeoaes, appleii-gs and vsmile by @gantoine in #3017
- Fix Grout author and add GH profile links by @BrandonKowalski in #3046
- Bump tar from 7.5.6 to 7.5.9 in /frontend by @dependabot[bot] in #2954 and #3039
- Bump protobuf from 6.31.1 to 6.33.5 by @dependabot[bot] in #2981
- Bump cryptography from 45.0.5 to 46.0.5 by @dependabot[bot] in #3013
- Bump axios from 1.12.1 to 1.13.5 in /frontend by @dependabot[bot] in #3010
- Bump pillow from 10.4.0 to 12.1.1 by @dependabot[bot] in #3015
- Bump markdown-it from 14.1.0 to 14.1.1 in /frontend by @dependabot[bot] in #3022
- Bump rollup in /frontend by @dependabot[bot] in #3049
- Bump minimatch in /frontend by @dependabot[bot] in #3050
New Contributors
- @ricardovdheijden made their first contribution in #2963
- @Wadenschwinger made their first contribution in #2968
- @pR0Ps made their first contribution in #2969
- @LoneAngelFayt made their first contribution in #2979
- @camhorn made their first contribution in #2982
- @tmgast made their first contribution in #2917
- @zeroSteiner made their first contribution in #2984
- @ItzCobaltboy made their first contribution in #2987
- @matthewturk made their first contribution in #3043
Full Changelog: 4.6.1...4.7.0
4.7.0-beta.2
Highlights
Auto-export gamelist.xml
Automatically generate an ES-DE compatible gamelist.xml file during scans by enabling the option in your config.yml. This will place the new gamelist.xml file within the platform folder for selected/discovered platforms.
scan:
export_gamelist: trueDevice-based save synchronization
Thanks to @tmgast, we've laid the ground work for device-based save synchronization to enable multi-device save management, as defined in RFC-0001. Devices (handhelds, PCs, etc.) can register with the server and track which saves they've synced, enabling conflict detection when a device tries to upload stale data.
Note that this is purely foundational work to set up an initial structure and API implementation and in intended for third-party developers. #2917
Minor changes
- Add support for ScummVM shortnames by @gantoine in #2957
- Add
OIDC_AUTOLOGIN=trueenv var to automatically login using OIDC by @pR0Ps in #2969 - Group games with same name (but different tags) as versions/siblings by @zeroSteiner in #2984
- Search by mutliple keywords with
|by @gantoine in #2996zelda|mario|sonicwould show all games withzelda,marioORsonicin the name
- New
PKGJfeed endpoints in.tsvformat by @gantoine in #2986- PSP games:
GET /api/feeds/pkgj/psp/games - PSP DLC files:
GET /api/feeds/pkgj/psp/dlc - PS Vita games:
GET /api/feeds/pkgj/psvita/games - PS Vita DLC files:
GET /api/feeds/pkgj/psvita/dlc - PSX games:
GET /api/feeds/pkgj/psx/games
- PSP games:
Fixes
- [HOTFIX] Fix all roms displayed in all platforms by @gantoine in #2948
- [ROMM-2956] Fix refresh on card edit by @gantoine in #2962
- Invalid category values fix by @LoneAngelFayt in #2979
- Filter keys now plural by @camhorn in #2982
- [ROMM-2991] Allow set completion to 0 by @gantoine in #2995
- [ROMM-2997] Fix HLTB search term fetching by @gantoine in #2998
- [ROMM-2983] Fix negative filter by verified by @gantoine in #3000
- [ROMM-2976] Fix no games displayed for status filter by @gantoine in #3001
- [ROMM-2974] Stop displaying public collections in "add to collection" dialog the user doesn't own by @gantoine in #3002
- [ROMM-2972] Fix /props returning stale data by @gantoine in #3003
- [ROMM-2965] Check file count for file select menu emulatorjs by @gantoine in #3005
- [ROMM-2943] Match scanned platform based on fs_slug by @gantoine in #3008
- [ROMM-3020] Fix split collection custom artowrk by @gantoine in #3028
- [ROMM-3025] Fix collections with custom art failing by @gantoine in #3027
- [ROMM-3026] Region/language shortcodes should be case sensitive by @gantoine in #3035
- [ROMM-3031] Fix screenshot property on save/state by @gantoine in #3037
Other changes
- New endpoints to fetch all IDs by @gantoine in #2921
- Example config ES-DE update/fix by @ricardovdheijden in #2963
- Use vite copy plugin to load rom-patcher by @gantoine in #2964
- Skip opentelemetry-instrument when OTEL is disabled by @Wadenschwinger in #2968
- Update uses of roms to ROMs by @gantoine in #3009
- [ROMM-2927] Add default folders to config manager by @gantoine in #3007
- [AIKIDO-13126609] Raise HTTP exception if device not found by @gantoine in #3030
- [AIKIDO-13126604] Stream file when building file hash by @gantoine in #3029
- Ugprade some docker base images by @gantoine in #3032
- Run formatter on alembic files by @gantoine in #3034
- Add Rom.ra_hash and RomFile.ra_hash fields to API by @gantoine in #3019
- Add platforms icons for neogeox, neogeoaes, appleii-gs and vsmile by @gantoine in #3017
- Bump tar from 7.5.6 to 7.5.9 in /frontend by @dependabot[bot] in #2954 and #3039
- Bump protobuf from 6.31.1 to 6.33.5 by @dependabot[bot] in #2981
- Bump cryptography from 45.0.5 to 46.0.5 by @dependabot[bot] in #3013
- Bump axios from 1.12.1 to 1.13.5 in /frontend by @dependabot[bot] in #3010
- Bump pillow from 10.4.0 to 12.1.1 by @dependabot[bot] in #3015
- Bump markdown-it from 14.1.0 to 14.1.1 in /frontend by @dependabot[bot] in #3022
New Contributors
- @ricardovdheijden made their first contribution in #2963
- @Wadenschwinger made their first contribution in #2968
- @pR0Ps made their first contribution in #2969
- @LoneAngelFayt made their first contribution in #2979
- @camhorn made their first contribution in #2982
- @tmgast made their first contribution in #2917
- @zeroSteiner made their first contribution in #2984
- @ItzCobaltboy made their first contribution in #2987
Full Changelog: 4.6.1...4.7.0-beta.2