RomM
Beautiful, powerful, self-hosted rom manager and player
Alternative to: antstream arcade
4.1.0
2025-08-17[!CAUTION] As of this version, a valid
config.ymlfile is required to run the app, and must be mounted before upgrading to 4.1.0. Please refer to the instructions at the top of this example config.yml file. The file can be used as-is without making any changes.
[!WARNING] This version contains a bug that will cause scans to fail and stop after the first game is matched. We recommend thoroughly reading these release notes, then upgrading directly to the latest patch release.
[!IMPORTANT] Some platform slugs have been updated to fix common setup issues and remove duplicates. If you use any of the following platforms, the system will migrate to the new slugs will happen automatically, and update your
config.ymlfile accordingly. No manual intervention is required.
View changed slugs
{
'cpc': 'acpc',
'apple-i': 'apple',
'apple2': 'appleii',
'apple2gs': 'apple-iigs',
'apple3': 'appleiii',
'mattel-aquarius': 'aquarius',
'atari-2600': 'atari2600',
'atari-5200': 'atari5200',
'atari-7800': 'atari7800',
'atari-8-bit': 'atari8bit',
'bally-astrocade': 'astrocade',
'bbc-micro': 'bbcmicro',
'cd-i': 'philips-cd-i',
'cdtv': 'commodore-cdtv',
'channel-f': 'fairchild-channel-f',
'commodore-16-plus4': 'c-plus-4',
'dragon-3264': 'dragon-32-slash-64',
'dreamcast': 'dc',
'edsac--1': 'edsac',
'electron': 'acorn-electron',
'elektor-tv-games-computer': 'elektor',
'fmtowns': 'fm-towns',
'game-com': 'game-dot-com',
'gameboy': 'gb',
'gameboy-color': 'gbc',
'gameboy-advance': 'gba',
'game-gear': 'gamegear',
'gamecube': 'ngc',
'genesis-slash-megadrive': 'genesis',
'macintosh': 'mac',
'microcomputer--1': 'microcomputer',
'microvision--1': 'microvision',
'neo-geo': 'neogeoaes',
'odyssey--1': 'odyssey',
'nintendo-ds': 'nds',
'palmos': 'palm-os',
'pc88': 'pc-8800-series',
'pc98': 'pc-9800-series',
'pet': 'cpet',
'pdp-7--1': 'pdp-7',
'pdp-8--1': 'pdp-8',
'playstation': 'psx',
'ps': 'psx',
'ps4--1': 'ps4',
'playstation-4': 'ps4',
'playstation-5': 'ps5',
'ps-vita': 'psvita',
'sega-32x': 'sega32',
'sega-cd': 'segacd',
'sega-cd-32x': 'segacd32',
'sega-master-system': 'sms',
'sega-saturn': 'saturn',
'sharp-x1': 'x1',
'sinclair-zx81': 'zx81',
'sg-1000': 'sg1000',
'switch2': 'switch-2',
'thomson-mo': 'thomson-mo5',
'trs-80-coco': 'trs-80-color-computer',
'turbografx-16-slash-pc-engine-cd': 'turbografx-cd',
'turbo-grafx': 'tg16',
'turbografx16--1': 'tg16',
'watara-slash-quickshot-supervision': 'supervision',
'windows': 'win',
'zx-spectrum': 'zxs'
}
New Features
Missing games admin page
To simplify removal of missing games, we’re added a new tab under the Library Management section of the admin panel that displays all ROMs present in the database but missing from the file system. You can choose to delete single games, groups of games using multi-select, or simply purge (cleanup) all missing games from the database with a single click.
Note: removing games will also remove any associated metadata, notes, status info, and will disassociate the game from any uploaded saves and states.
https://github.com/rommapp/romm/pull/2172
Smart collections
Create smart, self-updating collections for a predetermined set of search terms and filters! On the search page, change the search term and/or filters, and a new button will appear in the top bar. The dialog will display which filters will be set and allow you to give this smart collection a name and description.
Note: the list of games will only update when you view the contents of the collection
https://github.com/rommapp/romm/pull/2136
Experimental iOS app
The third-party Android app now has experimental support for iOS devices. You’ll need to build and sign the .ipa file locally with XCode (instructions to come). A full release to the play store and support for loading into alternative app store like AltStore is planned once a certain level of stability and polish has been reached.
Minor Changes
- Unify platform slugs by @gantoine in https://github.com/rommapp/romm/pull/2143
- Display an icon on the card if game has notes by @gantoine in https://github.com/rommapp/romm/pull/2226
- [ROMM-2142] Custom SGDB title match by @gantoine in https://github.com/rommapp/romm/pull/2220
- Use best-match algo for more providers by @gantoine in https://github.com/rommapp/romm/pull/2231
- Add zh_TW translation. by @wctang in https://github.com/rommapp/romm/pull/2188 and https://github.com/rommapp/romm/pull/2194
- Adding Polish translation files by @gutmanovaty in https://github.com/rommapp/romm/pull/2173
- Scroll to window bottom on scan by @gantoine in https://github.com/rommapp/romm/pull/2255
- Normalize result names for better merging of manual search results by @gantoine in https://github.com/rommapp/romm/pull/2267
- Add OpenTelemetry integration for API service and file watcher by @adamantike in https://github.com/rommapp/romm/pull/2251 and https://github.com/rommapp/romm/pull/2252
[!NOTE] The API responses for the following endpoints have changed. Please refer to the swagger docs under
/api/docsfor the updated response types.
/api/firmware/delete,/api/rom/delete,/api/tasks/{task_id},/api/tasks/runand/api/tests/run/{task_name}
Bug Fixes
- [ROMM-2202] Fix rom ID selected refresh metadata by @gantoine in https://github.com/rommapp/romm/pull/2204
- Docker build and init fixes by @adamantike in https://github.com/rommapp/romm/pull/2238
- Make RetroAchievements hash matching case-insensitive by @adamantike in https://github.com/rommapp/romm/pull/2240
- Correctly set up dockerignore file by @adamantike in https://github.com/rommapp/romm/pull/2237
- Run scheduler when only LaunchBox update is enabled by @adamantike in https://github.com/rommapp/romm/pull/2222
- Correctly evaluate enabled metadata sources in scheduled library scan by @adamantike in https://github.com/rommapp/romm/pull/2213
- [ROMM-2186] Allow editing user without password field by @gantoine in https://github.com/rommapp/romm/pull/2193
- [ROMM-2184] Fix selecting dialog buttons on mobile by @gantoine in https://github.com/rommapp/romm/pull/2198
- [ROMM-1868] Fix grouping by metadata rows by @gantoine in https://github.com/rommapp/romm/pull/2203
- [ROMM-1949] Fix multi rom download by @gantoine in https://github.com/rommapp/romm/pull/2206
- [ROMM-2155] Fix char bar jumping to wrong game by @gantoine in https://github.com/rommapp/romm/pull/2208
- [ROMM-2075] Use platform version icon on card by @gantoine in https://github.com/rommapp/romm/pull/2207
- [ROMM-2211] Only show missing platforms on lib manage page by @gantoine in https://github.com/rommapp/romm/pull/2212
- Fire off search if URL state prepopulated by @gantoine in https://github.com/rommapp/romm/pull/2205
- Improve performance on asset screenshot retrieval by @adamantike in https://github.com/rommapp/romm/pull/2248
- Correctly upload manual to resources path by @adamantike in https://github.com/rommapp/romm/pull/2254
- Disable OpenTelemetry integration if not configured by @adamantike in https://github.com/rommapp/romm/pull/2262
- [ROMM-2163] Fix excluding single roms without extensions by @gantoine in https://github.com/rommapp/romm/pull/2256
- [ROMM-2247] Return early if cover write fails by @gantoine in https://github.com/rommapp/romm/pull/2249
- Always hash the largest file in compressed multi file roms by @gantoine in https://github.com/rommapp/romm/pull/2261
Other
- Add support for database query string using
DB_QUERY_JSONvariable by @adamantike in https://github.com/rommapp/romm/pull/2244 - Refactor task execution workers by @zurdi15 in https://github.com/rommapp/romm/pull/2178
- Add IPv6 support by @danielkoster in https://github.com/rommapp/romm/pull/2201
- Separate tests folder from backend code by @adamantike in https://github.com/rommapp/romm/pull/2234
- Move pytest.ini to backend directory by @adamantike in https://github.com/rommapp/romm/pull/2214
- Remove indirect dependency freezegun by @adamantike in https://github.com/rommapp/romm/pull/2233
- Move pytest-cov dependency to test extra by @adamantike in https://github.com/rommapp/romm/pull/2229
- Replace emoji dependency with constants by @adamantike in https://github.com/rommapp/romm/pull/2228
- Add type hints to task classes by @adamantike in https://github.com/rommapp/romm/pull/2221
- Remove uses of Props and Functions comments by @gantoine in https://github.com/rommapp/romm/pull/2187
- Replace MessageResponse with specific responses by @gantoine in https://github.com/rommapp/romm/pull/2185
- Migrate scheduler to native RQ process by @adamantike in https://github.com/rommapp/romm/pull/2224
- Migrate worker to native rq process by @gantoine in https://github.com/rommapp/romm/pull/2227
- Migrate watcher to use watchfiles library by @adamantike in https://github.com/rommapp/romm/pull/2230
- Use native 7z to extract files and calculate hashes by @gantoine in https://github.com/rommapp/romm/pull/2232
- Do not warn when REDIS_HOST is set by @adamantike in https://github.com/rommapp/romm/pull/2243
- Create startup script to run initial tasks before main application by @adamantike in https://github.com/rommapp/romm/pull/2258
- Move cache initialization to startup script by @adamantike in https://github.com/rommapp/romm/pull/2260
- Use column properties to calculate
fs_size_bytesby @gantoine in https://github.com/rommapp/romm/pull/2264 - misc: Upgrade Ruffle to v2025-08-14 by @adamantike in https://github.com/rommapp/romm/pull/2265
- Make default ROMM_AUTH_SECRET_KEY consistent between workers by @gantoine in https://github.com/rommapp/romm/pull/2266
New Contributors
- @gutmanovaty made their first contribution in https://github.com/rommapp/romm/pull/2173
- @wctang made their first contribution in https://github.com/rommapp/romm/pull/2188
- @danielkoster made their first contribution in https://github.com/rommapp/romm/pull/2201
Full Changelog: https://github.com/rommapp/romm/compare/4.0.1…4.1.0