RomM
Beautiful, powerful, self-hosted rom manager and player
Alternative to: antstream arcade
4.2.0-alpha.1
2025-09-04[!WARNING] This release has a bug that can cause the UI to lag and crash, which has been fixed in
4.2.0-alpha.2.
New Features
Console Mode
Look ma’, I’m on TV! The new console interface is designed for big screens and easy navigation with a controller or remote. It features a grid layout, large icons, and a simplified menu structure to enhance your gaming experience from the comfort of your couch. Launch it from the navigation bar or navigate directly to /console.
#2314
| Home |
|---|
| Gallery | Details |
|---|---|
Global EmulatorJS Config
The config.yml file now accepts a new emulatorjs section that allows you to set custom, per-core options and controls. Setting debug: true will print a list of available options for the current emulator core to the browser console, which you can then set in the settings block. The control block allows you to set a custom control mapping for each core. Both settings and control accept a default “core”, who’s value will be applied to all cores.
#2360
[!NOTE] Custom settings and controls are fully optional, and if not set, the emulator will use its own defaults.
# EmulatorJS per-core options
emulatorjs:
debug: true # Available options will be logged to the browser console when the emulator is started
settings:
parallel_n64: # Use the exact core name
vsync: disable
snes9x:
snes9x_region: ntsc
default: # These settings apply to all cores
fps: show
controls: # https://emulatorjs.org/docs4devs/control-mapping/
snes9x:
0: # Player 1
0: # IF USED, A MAPPING FOR EACH BUTTON MUST BE SET!
value: x # Mapping for keyboard
value2: BUTTON_2 # Mapping for connected controller
1:
value: y
value2: BUTTON_4
1: # Player 2
2: # Player 3
3: # Player 4
Incremental RetroAchievements Sync
A new scheduled task has been added to sync RetroAchievements progress for all users on a recurring basis. Enable the task by setting ENABLE_SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC=true in your environment variables. By default the task runs nightly, but you can customize that using the SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC_CRON variable.
[!NOTE] Achievements will only sync for users who have enabled RetroAchievements in their profile settings
#2325
WebP Image Task
Another scheduled task has been added to convert all uploaded images to the modern .webp format. WebP images are 5-10x smaller then JPG/PNG images with no loss of quality, leading to faster load times for cover art in galleries. Enable the task by setting ENABLE_SCHEDULED_CONVERT_IMAGES_TO_WEBP=true in your environment variables. By default the task runs nightly, but you can customize that using the SCHEDULED_CONVERT_IMAGES_TO_WEBP_CRON variable.
#2334
Minor Changes
- Jump to previous/next game by @gantoine in https://github.com/rommapp/romm/pull/2330
- Add scheduled task to sync RetroAchievements progress by @adamantike in https://github.com/rommapp/romm/pull/2352
- Add
COEPandCOOPheaders for EmulatorJS within nginx config by @adamantike in https://github.com/rommapp/romm/pull/2356 - Use dropzone and add button in upload modal by @gantoine in https://github.com/rommapp/romm/pull/2366
- Add options to gunicorn call by @gantoine in https://github.com/rommapp/romm/pull/2322
WEB_SERVER_CONCURRENCY=2:WEB_SERVER_TIMEOUT=300:WEB_SERVER_KEEPALIVE=2:WEB_SERVER_MAX_REQUESTS=1000:WEB_SERVER_MAX_REQUESTS_JITTER=100:WEB_SERVER_WORKER_CONNECTIONS=1000:
Bug Fixes
- Invalidate fixture cache on file change by @adamantike in https://github.com/rommapp/romm/pull/2350
- Replace the default exit emulation button with a custom one by @mazkolain in https://github.com/rommapp/romm/pull/2353
- Fix single roms display on postgres by @gantoine in https://github.com/rommapp/romm/pull/2369
Other
- Create IGDB service adapter by @adamantike in https://github.com/rommapp/romm/pull/2345
- Add PlayBtn component to unify button logic by @adamantike in https://github.com/rommapp/romm/pull/2357
- Run vite dev server with HTTPS enabled by @gantoine in https://github.com/rommapp/romm/pull/2235
- Fix devcontainer launch by @MauGx3 in https://github.com/rommapp/romm/pull/2340
- Avoid loading external plugins for mdeditor by @gantoine in https://github.com/rommapp/romm/pull/2359
- Add prettier plugin to sort imports by @adamantike in https://github.com/rommapp/romm/pull/2358
- Replace usage of localStorage with vuewuse useLocalStorage by @gantoine in https://github.com/rommapp/romm/pull/2362
- Replace activeElement with type exact useActiveElement by @gantoine in https://github.com/rommapp/romm/pull/2365
- Set import order in prettierrc by @gantoine in https://github.com/rommapp/romm/pull/2361
- Replace window scroll listeners with reactive useWindowScroll by @gantoine in https://github.com/rommapp/romm/pull/2367
- Use modern useTemplateRef hook by @gantoine in https://github.com/rommapp/romm/pull/2368
New Contributors
- @kodaxx made their first contribution in https://github.com/rommapp/romm/pull/2314
- @MauGx3 made their first contribution in https://github.com/rommapp/romm/pull/2340
- @mazkolain made their first contribution in https://github.com/rommapp/romm/pull/2353
Full Changelog: https://github.com/rommapp/romm/compare/4.1.6…4.2.0-alpha.1