RomM logo

RomM

Beautiful, powerful, self-hosted rom manager and player

Alternative to: antstream arcade


About Versions (100)

4.9.0-alpha.1

2026-05-08

[!NOTE]

API Changes

New endpoints

  • POST /api/collection/{id}/roms: Add ROMs (list of IDs) to a collection
  • DELETE /api/collection/{id}/roms: Remove ROMs (list of IDs) from a collection
  • POST /api/export/pegasus: Export ROMs to metadata.pegasus.txt and write to platform folder
  • POST /api/play-sessions: Inject a list of play sessions (for playtime tracking)
  • GET /api/play-sessions: Get filtered play sessions
  • DELETE /api/play-sessions/{session_id}: Delete play session
  • POST /api/sync/negotiate: Negotiate sync operations between a client device and server
  • POST /api/sync/sessions/{session_id}/complete: Mark a sync session as complete
  • GET /api/sync/sessions: List sync sessions
  • GET /api/sync/sessions/{session_id}: Get a specific sync session
  • POST /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

  • ConfigResponse returns new fields:
    • DEFAULT_EXCLUDED_DIRS: default list of always-excluded folders
    • DEFAULT_EXCLUDED_FILES: default list of always-excluded files
    • DEFAULT_EXCLUDED_EXTENSIONS: default list of always-excluded extensions
    • GAMELIST_MEDIA_THUMBNAIL: one of MetadataMediaType
    • GAMELIST_MEDIA_IMAGE: of one MetadataMediaType
  • HeartbeatResponse now returns LIBRETRO_API_ENABLED
  • Device create and update endpoints now accept sync_mode and sync_config fields
  • 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

Fixes

Other changes

New Contributors

Full Changelog: https://github.com/rommapp/romm/compare/4.8.1…4.9.0-alpha.1