RomM
Beautiful, powerful, self-hosted rom manager and player
Alternative to: antstream arcade
About
Versions (114)
5.2.0
2026-08-20Minor changes
- feat(screenscraper): pace and report scans against the account’s reported limits by @Spinnich in https://github.com/rommapp/romm/pull/3989
- feat: reorderable region and language priority lists in scan settings by @gantoine in https://github.com/rommapp/romm/pull/4015
- feat(frontend): autofocus the search field on the Search view by @gantoine in https://github.com/rommapp/romm/pull/4022
- feat(home): make the random pick widget clickable and denser by @gantoine in https://github.com/rommapp/romm/pull/4056
- feat(rating): show provider ratings by @wadiebs in https://github.com/rommapp/romm/pull/4096
- feat(soundtrack player): improve artwork by @wadiebs in https://github.com/rommapp/romm/pull/4168
- feat(v2): previous / next game buttons on the details page by @gantoine in https://github.com/rommapp/romm/pull/4012
- feat(v2): search platforms by slug, folder, category and family by @Spinnich in https://github.com/rommapp/romm/pull/4136
- feat(hasheous): map famicom to the NES platform by @sdornan in https://github.com/rommapp/romm/pull/4162
- feat(v2): show IGDB ports on the game overview by @sdornan in https://github.com/rommapp/romm/pull/4184
Fixes
- fix(steamgriddb): skip DMCA-locked grids when scraping SteamGridDB by @gantoine in https://github.com/rommapp/romm/pull/4004
- fix(security): close three permission gaps found auditing 5.1.0 by @gantoine in https://github.com/rommapp/romm/pull/3993
- fix(backend): re-run the Hasheous hash lookup on a hashes scan by @gantoine in https://github.com/rommapp/romm/pull/4013
- fix(v2): keep RSelect menus inside the viewport and tidy the selection text by @gantoine in https://github.com/rommapp/romm/pull/4014
- fix(roms): give each FPKGi package a unique name within its rom by @gantoine in https://github.com/rommapp/romm/pull/4021
- fix(backend): scope ScreenScraper French fallback to taxonomy fields by @gantoine in https://github.com/rommapp/romm/pull/4026
- fix(v2): pivot to a filtered search from the overview info grid by @gantoine in https://github.com/rommapp/romm/pull/4023
- fix(backend): tolerate calendar-invalid gamelist dates on PostgreSQL by @gantoine in https://github.com/rommapp/romm/pull/4024
- fix(player): skip the save load a state immediately discards by @gantoine in https://github.com/rommapp/romm/pull/4025
- fix(roms): search the gallery by CRC32, MD5, SHA-1 and RA hash by @Spinnich in https://github.com/rommapp/romm/pull/4032
- fix(docker): always start the RQ scheduler by @XenuIsWatching in https://github.com/rommapp/romm/pull/4033
- fix(backend): scope the kiosk read-only cap to the anonymous visitor by @Spinnich in https://github.com/rommapp/romm/pull/4047
- fix: batch of open bug fixes (#4027, #4034, #4035, #4038, #4040, #4043, #4045) by @gantoine in https://github.com/rommapp/romm/pull/4051
- fix(scan): report only newly discovered firmware by @gantoine in https://github.com/rommapp/romm/pull/4055
- fix(rom-details): render the manual viewer on mobile by @gantoine in https://github.com/rommapp/romm/pull/4058
- fix(hasheous): read the CHD and DOS signature sources by @gantoine in https://github.com/rommapp/romm/pull/4060
- fix(stats): pluralize the platform game count and lift meta legibility by @gantoine in https://github.com/rommapp/romm/pull/4065
- fix(config): map tic80 to the tic-80 platform slug by @XenuIsWatching in https://github.com/rommapp/romm/pull/4090
- fix(docker): keep the Redis password out of the RQ worker command line by @gantoine in https://github.com/rommapp/romm/pull/4093
- fix(v2): make hashes recoverable without HTTPS and show all firmware hashes by @Spinnich in https://github.com/rommapp/romm/pull/4083
- fix(home): stop scanning the library filesystem on every home page load by @Spinnich in https://github.com/rommapp/romm/pull/4069
- fix(auth): accept a stale user-bound CSRF token on anonymous requests by @bikeborb in https://github.com/rommapp/romm/pull/4086
- fix(v2): drop a random pick after leaving the platform by @Spinnich in https://github.com/rommapp/romm/pull/4113
- fix(states): repoint the row when a re-upload changes emulator by @TowyTowy in https://github.com/rommapp/romm/pull/4112
- fix(v2): keep Playmatch selectable when providers are set to All by @sdornan in https://github.com/rommapp/romm/pull/4120
- fix(hashing): extract CHD SHA-1 for folder-based ROMs by @sdornan in https://github.com/rommapp/romm/pull/4129
- fix(v2): compute game-card cover width instead of deriving it by @sdornan in https://github.com/rommapp/romm/pull/4135
- fix(media): stop recording paths for media that never landed by @sdornan in https://github.com/rommapp/romm/pull/4131
- fix(screenscraper): report rejected credentials instead of a bare 403 by @Spinnich in https://github.com/rommapp/romm/pull/4130
- fix(launchbox): match ROMs during a scan the way Match ROM does by @sdornan in https://github.com/rommapp/romm/pull/4121
- fix(hltb): renew rejected HLTB sessions instead of failing the scan by @sdornan in https://github.com/rommapp/romm/pull/4125
- fix(v2): drop a random pick that lands after leaving the gallery by @Spinnich in https://github.com/rommapp/romm/pull/4138
- fix(ss): store the ScreenScraper box-2D front locally by @sdornan in https://github.com/rommapp/romm/pull/4139
- fix(v2): show a running scan on pages loaded mid-scan by @sdornan in https://github.com/rommapp/romm/pull/4142
- fix(resources): fetch each cover once instead of once per size by @Spinnich in https://github.com/rommapp/romm/pull/4143
- fix(metadata): identify archives and folder ROMs by the right file by @Spinnich in https://github.com/rommapp/romm/pull/4146
- fix(match-rom): show the saving overlay above the grid match panel by @sdornan in https://github.com/rommapp/romm/pull/4147
- refactor(i18n): name gallery filters by property instead of “Show X” by @sdornan in https://github.com/rommapp/romm/pull/4149
- fix(v2): bulk favorite no-ops on a fresh instance and reports the wrong direction by @Spinnich in https://github.com/rommapp/romm/pull/4151
- fix: refresh the v2 gallery when a ROM is edited or matched by @sdornan in https://github.com/rommapp/romm/pull/4153
- fix(v2): pin mobile bottom nav with sticky instead of fixed by @nickybmon in https://github.com/rommapp/romm/pull/4155
- fix(export): stop miximage_v2 colliding with miximage, persist gamelist back covers by @sdornan in https://github.com/rommapp/romm/pull/4156
- fix(hashing): surface unreadable zip and tar archives by @sdornan in https://github.com/rommapp/romm/pull/4163
- fix: remove double URL-encoding of MobyGames search terms by @justinjd00 in https://github.com/rommapp/romm/pull/4181
- fix(i18n): correct Breton pt_BR player-count and align ja_JP/tr_TR by @sdornan in https://github.com/rommapp/romm/pull/4183
- fix(i18n): translate pt_BR strings left in English by @sdornan in https://github.com/rommapp/romm/pull/4185
- fix(v2): close open overlays when the route changes by @sdornan in https://github.com/rommapp/romm/pull/4193
- Changed default compose, will explain more in pull by @danblu3 in https://github.com/rommapp/romm/pull/4202
- fix(v2): drop the roms from the gallery when they leave the collection on screen by @sdornan in https://github.com/rommapp/romm/pull/4204
- fix(scan): normalize region and language tags to one canonical spelling by @sdornan in https://github.com/rommapp/romm/pull/4206
- fix: demote uvicorn HTTP access logs to WARNING/DEBUG only by @gantoine with @Copilot in https://github.com/rommapp/romm/pull/4214
- fix: Add
.xdeltasupport to server-side ROM patcher and v2 patcher UI by @gantoine with @Copilot in https://github.com/rommapp/romm/pull/4215 - fix(states): enforce ROM visibility when uploading a state by @gantoine in https://github.com/rommapp/romm/pull/4216
- fix(auth): build invite links from ROMM_BASE_URL by @sdornan in https://github.com/rommapp/romm/pull/4217
- fix(scan): re-read filename tags on a complete rescan by @sdornan in https://github.com/rommapp/romm/pull/4218
- fix(libretro): cache missing thumbnail listings by @sdornan in https://github.com/rommapp/romm/pull/4219
- fix(launchbox): match titles differing only by punctuation by @sdornan in https://github.com/rommapp/romm/pull/4224
- fix(hltb): match titles whose series prefix the catalogue omits by @sdornan in https://github.com/rommapp/romm/pull/4225
- fix(ss): don’t use the Switch icon URL as the manual URL by @TowyTowy in https://github.com/rommapp/romm/pull/4228
- fix(resources): publish downloaded resources atomically by @sdornan in https://github.com/rommapp/romm/pull/4230
- fix(i18n): translate route titles once locale messages are loaded by @sdornan in https://github.com/rommapp/romm/pull/4231
- fix(i18n): add the missing playlists permission entity label by @sdornan in https://github.com/rommapp/romm/pull/4234
- fix(hltb): fetch metadata when a HowLongToBeat ID is set by hand by @sdornan in https://github.com/rommapp/romm/pull/4235
- fix(launchbox): match LaunchBox dumps that separate words with underscores by @sdornan in https://github.com/rommapp/romm/pull/4239
- fix(backend): make filters match against all grouped versions instead of only the main version of each game entry by @darkpaul91 in https://github.com/rommapp/romm/pull/4240
- feat(metadata): warn when ScreenScraper dev credentials are missing by @gantoine in https://github.com/rommapp/romm/pull/4243
- fix(scan): ignore Windows Zone.Identifier files by @Florian-Cullmann in https://github.com/rommapp/romm/pull/4245
Other changes
- perf(roms): stop the Missing tab scanning the whole library by @Spinnich in https://github.com/rommapp/romm/pull/4005
- perf(scan): stop hashing single-file ROMs twice by @XenuIsWatching in https://github.com/rommapp/romm/pull/4017
- perf(collections): serve smart and standard collections from a composed query by @Spinnich in https://github.com/rommapp/romm/pull/4039
- perf(roms): extend the sibling covering index to cover the ROM grouping query by @Spinnich in https://github.com/rommapp/romm/pull/4054
- perf(roms): let a gallery window fetch skip the library count by @Spinnich in https://github.com/rommapp/romm/pull/4062
- perf(roms): pick a random rom without paging to a random offset by @Spinnich in https://github.com/rommapp/romm/pull/4071
- perf(roms): sort metadata fields on the indexed roms column by @Spinnich in https://github.com/rommapp/romm/pull/4078
- perf(gallery): resolve the random rom button in one request by @Spinnich in https://github.com/rommapp/romm/pull/4097
- perf(home): stop counting the whole library for the two home rows by @Spinnich in https://github.com/rommapp/romm/pull/4110
- perf(scan): scope a rom-id scan to the selected roms by @sdornan in https://github.com/rommapp/romm/pull/4188
- perf(scan): cut scan memory and drop a quadratic file listing check by @XenuIsWatching in https://github.com/rommapp/romm/pull/4198
- perf(scan): stop re-hashing unchanged firmware on every scan by @sdornan in https://github.com/rommapp/romm/pull/4211
- test: fix flaky LaunchBox release date property test (DST fold) by @sdornan in https://github.com/rommapp/romm/pull/4242
- chore(deps): bump aiohttp from 3.14.1 to 3.14.3 by @dependabot[bot] in https://github.com/rommapp/romm/pull/4115
- chore(deps-dev): bump fast-uri from 3.1.4 to 3.1.5 in /frontend by @dependabot[bot] in https://github.com/rommapp/romm/pull/4118
- chore(deps): bump socket.io-parser from 4.2.6 to 4.2.7 in /frontend by @dependabot[bot] in https://github.com/rommapp/romm/pull/4119
- chore(deps-dev): bump js-yaml from 4.2.0 to 4.3.1 in /frontend by @dependabot[bot] in https://github.com/rommapp/romm/pull/4189
[!NOTE]
API changes
Change Description GET /roms/randomRetrieve one rom picked at random, or nullwhen the scope holds none. Acceptsplatform_ids,collection_id,virtual_collection_idandsmart_collection_id.GET /romsNow accepts a with_totalparameter (defaulttrue). Set it tofalsewhen the caller already knows the total;totalthen comes backnullunless the rom id index is being built and already carries it.GET /setup/libraryexisting_platformsnow comes back empty once the database holds roms, instead of walking every platform directory.POST /statesNow rejects an upload against a rom the caller cannot see. DELETE /roms/{rom_id}/files/{file_id}Now requires the ROMS/DELETEgrant instead ofROMS/WRITE.GET /feeds/fpkgiPackage names are deduplicated within a rom, so two packages that share a title id no longer overwrite each other on the console. GET /collections/smart/{id}The cached rom_ids,rom_countand covers are now resolved as the collection owner, not the requesting viewer. The live rom listing is still per-requester.CustomLimitOffsetPage[SimpleRomSchema]totalis now nullable.InviteLinkSchemaAdds url, the full registration link built fromROMM_BASE_URL, ornullwhen that points at loopback.MetadataSourcesDictAdds SS_DEV_CREDENTIALS_SET.RomSSMetadataAdds box2d_path.RomGamelistMetadataAdds box2d_back_path,fanart_pathandtitle_screen_path.RomHasheousMetadataAdds mame_redump_match.Streaming endpoints
These moved from
ROMS_READtoROMS_USER_WRITE, which is always-on for authenticated users but absent from the read-only set a kiosk visitor gets.
New Contributors
- @wadiebs made their first contribution in https://github.com/rommapp/romm/pull/4096
- @sdornan made their first contribution in https://github.com/rommapp/romm/pull/4120
- @nickybmon made their first contribution in https://github.com/rommapp/romm/pull/4155
- @justinjd00 made their first contribution in https://github.com/rommapp/romm/pull/4181
- @danblu3 made their first contribution in https://github.com/rommapp/romm/pull/4202
- @darkpaul91 made their first contribution in https://github.com/rommapp/romm/pull/4240
- @Florian-Cullmann made their first contribution in https://github.com/rommapp/romm/pull/4245
Full Changelog: https://github.com/rommapp/romm/compare/5.1.0…5.2.0