RomM
Beautiful, powerful, self-hosted rom manager and player
Alternative to: antstream arcade
4.8.0-beta.1
2026-03-22Highlights
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 https://github.com/rommapp/romm/pull/3082
- Add additional cover styles for boxart to prevent cropping by @Drarox in https://github.com/rommapp/romm/pull/3060
- Fetch games on search view mount and reset search state on input clear by @zurdi15 in https://github.com/rommapp/romm/pull/3080
- Add
video_normalizedmedia type option for ScreenScraper scans by @gantoine in https://github.com/rommapp/romm/pull/3088 - Scrape and store age rating data from ScreenScraper.fr by @gantoine in https://github.com/rommapp/romm/pull/3089
- Make invite token expiration configurable by @gantoine in https://github.com/rommapp/romm/pull/3094
- Click to zoom game cover image by @gantoine in https://github.com/rommapp/romm/pull/3093
- Add more platforms to cover styles by @Drarox in https://github.com/rommapp/romm/pull/3098
- Show filtered ROM count in the gallery AppBar and filter drawer by @gantoine in https://github.com/rommapp/romm/pull/3097
- Show firmware count in scan results to improve BIOS detection discoverability by @gantoine in https://github.com/rommapp/romm/pull/3111
- Per-platform metadata coverage and region breakdown to server stats by @cciollaro in https://github.com/rommapp/romm/pull/3110
- Use PICO-8 built-in cover art from .p8.png cartridge files by @gantoine in https://github.com/rommapp/romm/pull/3119
- Auto-update game status from RetroAchievements award kind during progress sync by @gantoine in https://github.com/rommapp/romm/pull/3118
Fixes
- Fix platform aspect ratio not applying in gallery view by @gantoine in https://github.com/rommapp/romm/pull/3083
- Fix metadata IDs not persisting when handler is disabled or game not found by @gantoine in https://github.com/rommapp/romm/pull/3085
- Hack for natural sorting of ROMs by @gantoine in https://github.com/rommapp/romm/pull/3086
- Always sub dash with colon for launchbox matching by @gantoine in https://github.com/rommapp/romm/pull/3090
- Fix 500 error when loading platforms with ROMs whose filenames start with region tags by @gantoine in https://github.com/rommapp/romm/pull/3091
- Fix M3U generation to exclude raw .bin tracks when .cue files are present by @gantoine in https://github.com/rommapp/romm/pull/3100
- Filesystem watcher and scheduled scan skip when no metadata sources configured by @gantoine in https://github.com/rommapp/romm/pull/3106
- Replace deep watch with computed to reduce reactivity overhead by @cciollaro in https://github.com/rommapp/romm/pull/3104
- Add missing platforms to playable game filter by @Bergbok in https://github.com/rommapp/romm/pull/3121
- Default to querying all roms by @camhorn in https://github.com/rommapp/romm/pull/3122
- Remove cover image card bevel by @gantoine in https://github.com/rommapp/romm/pull/3131
- Auto-select firmware when only one option is available by @gantoine in https://github.com/rommapp/romm/pull/3150
Other changes
- Typed API form fields by @gantoine in https://github.com/rommapp/romm/pull/3036
- Fix OAuth token expiry and implement refresh token rotation by @HydroSulphide in https://github.com/rommapp/romm/pull/3102
- Add property for path_video and refactor places which use similar logic by @JamieeBond in https://github.com/rommapp/romm/pull/3116
- Move “Clean up All” missing ROMs deletion to background task by @gantoine in https://github.com/rommapp/romm/pull/3109
- Allow partial updates to ROM user props via typed payload schema by @gantoine in https://github.com/rommapp/romm/pull/3124
- Switch ACCESS_TOKEN_EXPIRE_MINUTES to SECONDS by @gantoine in https://github.com/rommapp/romm/pull/3096
- Update RAHasher to version 1.8.3 and add Wii platform support by @zurdi15 in https://github.com/rommapp/romm/pull/3145
- Add OIDC_SERVER_METADATA_URL to support providers with non-standard discovery URLs (e.g. Google) by @gantoine in https://github.com/rommapp/romm/pull/3099
- Fix OIDC login role downgrading for users without claims by @pacnpal in https://github.com/rommapp/romm/pull/3103
- Implement OIDC RP-Initiated Logout (end-session endpoint) by @gantoine in https://github.com/rommapp/romm/pull/3107
- Make OAuth token expiry configurable via env vars by @HydroSulphide in https://github.com/rommapp/romm/pull/3126
- Remove Non-Argosy Android app references from README by @milktoastrat in https://github.com/rommapp/romm/pull/3130
- Bump authlib from 1.6.6 to 1.6.7 by @dependabot[bot] in https://github.com/rommapp/romm/pull/3070
- Bump tar from 7.5.9 to 7.5.10 in /frontend by @dependabot[bot] in https://github.com/rommapp/romm/pull/3075
- Bump joserfc from 1.3.5 to 1.6.3 by @dependabot[bot] in https://github.com/rommapp/romm/pull/3064
- Bump tornado from 6.5.1 to 6.5.5 by @dependabot[bot] in https://github.com/rommapp/romm/pull/3123
- chore(deps): bump authlib from 1.6.7 to 1.6.9 by @dependabot[bot] in https://github.com/rommapp/romm/pull/3138
- chore(deps): bump memray from 1.17.2 to 1.19.2 by @dependabot[bot] in https://github.com/rommapp/romm/pull/3141
- chore(deps): bump socket.io-parser from 4.2.5 to 4.2.6 in /frontend by @dependabot[bot] in https://github.com/rommapp/romm/pull/3144
- chore(deps-dev): bump flatted from 3.3.4 to 3.4.2 in /frontend by @dependabot[bot] in https://github.com/rommapp/romm/pull/3146
[!NOTE] API Changes
⚠️ Most API endpoints that accept form input(s) are now fully typed and allow for partial updates. Field names were (mostly) unchanged, so existing API calls should continue to work as expected. Affect endpoints:
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 ScreenshotClient 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)⚠️
RomFileendponts 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
path_videofield andra_hashfields toDetailedRomSchemaandSimpleRomSchema- Added
ra_hashfield toRomFileSchema- Added
firmware_countfield toPlatformSchema- Added
highest_award_kindfield toRAUserGameProgression- Added
refresh_tokenandrefresh_expirestoTokenResponseUPLOAD_TIMEOUThas been removed from the/api/heartbeatresponse
[!NOTE] Environment Variables
UPLOAD_TIMEOUThas been removed in favour of chunked uploadsOAUTH_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 endpointOIDC_RP_INITIATED_LOGOUT: Enable RP-initiated logout flow (defaultfalse)OIDC_END_SESSION_ENDPOINT: OIDC end-session endpoint override URL
New Contributors
- @gravelfreeman made their first contribution in https://github.com/rommapp/romm/pull/2922
- @Drarox made their first contribution in https://github.com/rommapp/romm/pull/3060
- @alanfrigo made their first contribution in https://github.com/rommapp/romm/pull/3076
- @pacnpal made their first contribution in https://github.com/rommapp/romm/pull/3103
- @cciollaro made their first contribution in https://github.com/rommapp/romm/pull/3104
- @HydroSulphide made their first contribution in https://github.com/rommapp/romm/pull/3102
- @Bergbok made their first contribution in https://github.com/rommapp/romm/pull/3121
Full Changelog: https://github.com/rommapp/romm/compare/4.7.0…4.8.0-beta.1