Skip to content

Releases: rommapp/romm

4.5.0

29 Dec 15:42
6bd6264

Choose a tag to compare

Highlights

Netplay

The incredibly smart and beautiful people over at the EmulatorJS project have added Netplay to their client, allowing you to play with your friends on the same instance over the internet! Enable netplay and configure the STUN/TURN servers in your config.yml:

emulatorjs:
  netplay:
    enabled: true
    ice_servers:
      - urls: "stun:stun.relay.metered.ca:80"
      - urls: "turn:global.relay.metered.ca:80"
        username: "<username>"
        credential: "<password>"

To host a game, start it, then hit the 🌐 icon in botton bar. Set your name, create a room (password optional), and other players should be able to see and join your room. All players need access to your RomM server to join a room and play together. #2728

Multiple notes

You've begged for it, and boy did we ever delivered! Write and store multiple notes for each game, with full mark down support; sharable, swapable, and easily identified with the 📝 icon. #2665

Screenshot 2025-12-10 at 3 52 36 PM

Metadata locale selection for IGDB and ScreenScraper

You can now set the order of your preferred locales/regional variants when fetching metadata from IGDB and ScreenScraper. The options below are available and can be set in your config.yml. #2700

scan:
  priority:
    region:
      - "us" # United States (no localization needed)
      - "wor" # World (default)
      - "ss" # Screenscraper (default)
      - "eu" # Europe
      - "jp"  # Japan
      - "kr" # Korea
      - "cn" # China (simplified)
      - "tw" # Taiwan (traditional)
516566290-2c43d67e-f55e-400b-8a89-a23e25d1ef36

Minor changes

  • Query parameter handling for tabs and sub-tabs by @zurdi15 in #2695
  • Redirect related games to RomM entry if exists by @zurdi15 in #2729
  • Make hashing during scan optional with filesystem.skip_hash_calculation in config.yml by @zurdi15 in #2703
  • Console mode locale by @Slabak007 in #2710
  • Add translations for firmware management dialogs by @tvdu29 in #2714
  • Hungarian translation added (finish, 12/12 files done). by @Soderes in #2718
  • Improved save/state layout by @zurdi15 in #2779
  • [ROMM-2697] Use colocated es-de folders to import art not present in gamelist.xml by @gantoine in #2766

Fixes

Behind-the-scenes

New Contributors

Full Changelog: 4.4.1...4.5.0

4.5.0-beta.3

23 Dec 16:55
fb0dc84

Choose a tag to compare

4.5.0-beta.3 Pre-release
Pre-release

What's Changed

  • feat: Add config options to disable batch bootup and auto unload in emujs by @gantoine in #2793
  • feat: Better search for Lauchbox metadata by @victor-rds in #2799
  • feat: Manual Match metada priority by @victor-rds in #2800
  • fix: Hide 0-game platforms from console mode homepage by @gantoine in #2794
  • chore: Add gamelist entries to roms metadata object by @gantoine in #2801

New Contributors

Full Changelog: 4.5.0-beta.2...4.5.0-beta.3

4.5.0-beta.2

21 Dec 17:06
9d1183b

Choose a tag to compare

4.5.0-beta.2 Pre-release
Pre-release

What's Changed

Full Changelog: 4.5.0-beta.1...4.5.0-beta.2

4.5.0-beta.1

19 Dec 15:52
be3615b

Choose a tag to compare

4.5.0-beta.1 Pre-release
Pre-release

Highlights

Netplay

The incredibly smart and beautiful people over at the EmulatorJS project have added Netplay to their client, allowing you to play with your friends on the same instance over the internet! Enable netplay and configure the STUN/TURN servers in your config.yml:

emulatorjs:
  netplay:
    enabled: true
    ice_servers:
      - urls: "stun:stun.relay.metered.ca:80"
      - urls: "turn:global.relay.metered.ca:80"
        username: "<username>"
        credential: "<password>"

To host a game, start it, then hit the 🌐 icon in botton bar. Set your name, create a room (password optional), and other players should be able to see and join your room. All players need access to your RomM server to join a room and play together. #2728

Multiple notes

You've begged for it, and boy did we ever delivered! Write and store multiple notes for each game, with full mark down support; sharable, swapable, and easily identified with the 📝 icon. #2665

Screenshot 2025-12-10 at 3 52 36 PM

Metadata locale selection for IGDB and ScreenScraper

You can now set the order of your preferred locales/regional variants when fetching metadata from IGDB and ScreenScraper. The options below are available and can be set in your config.yml. #2700

scan:
  priority:
    region:
      - "us" # United States (no localization needed)
      - "wor" # World (default)
      - "ss" # Screenscraper (default)
      - "eu" # Europe
      - "jp"  # Japan
      - "kr" # Korea
      - "cn" # China (simplified)
      - "tw" # Taiwan (traditional)
516566290-2c43d67e-f55e-400b-8a89-a23e25d1ef36

Minor changes

  • Query parameter handling for tabs and sub-tabs by @zurdi15 in #2695
  • Redirect related games to RomM entry if exists by @zurdi15 in #2729
  • Make hashing during scan optional with filesystem.skip_hash_calculation in config.yml by @zurdi15 in #2703
  • Console mode locale by @Slabak007 in #2710
  • Add translations for firmware management dialogs by @tvdu29 in #2714
  • Hungarian translation added (finish, 12/12 files done). by @Soderes in #2718
  • Improved save/state layout by @zurdi15 in #2779
  • [ROMM-2697] Use colocated es-de folders to import art not present in gamelist.xml by @gantoine in #2766

Fixes

Behind-the-scenes

New Contributors

Full Changelog: 4.4.1...4.5.0-beta.1

4.5.0-alpha.2

16 Dec 17:17
76c59fc

Choose a tag to compare

4.5.0-alpha.2 Pre-release
Pre-release

What's Changed

  • Add OpenBOR metadata entry for screenscraper by @ronzano in #2760
  • [HOTFIX] Fetch security token for HLTB by @gantoine in #2772
  • [ROMM-2697] Use colocated es-de folders to import art not present in gamelist.xml by @gantoine in #2766
  • [ROMM-2763] Add MSX2 to ssfr platforms list by @gantoine in #2765
  • [ROMM-2762] Add get_rom_by_hash endpoint by @gantoine in #2764
  • [ROMM-2774] Remove unsupported language tags by @gantoine in #2775

New Contributors

Full Changelog: 4.5.0-alpha.1...4.5.0-alpha.2

4.5.0-alpha.1

10 Dec 20:53
3e26b89

Choose a tag to compare

4.5.0-alpha.1 Pre-release
Pre-release

Highlights

Netplay

The incredibly smart and beautiful people over at the EmulatorJS project have added Netplay to their client, allowing you to play with your friends on the same instance over the internet! Enable netplay and configure the STUN/TURN servers in your config.yml:

emulatorjs:
  netplay:
    enabled: true
    ice_servers:
      - urls: "stun:stun.relay.metered.ca:80"
      - urls: "turn:global.relay.metered.ca:80"
        username: "<username>"
        credential: "<password>"

To host a game, start it, then hit the 🌐 icon in botton bar. Set your name, create a room (password optional), and other players should be able to see and join your room. All players need access to your RomM server to join a room and play together. #2728

Multiple notes

You've begged for it, and boy did we ever delivered! Write and store multiple notes for each game, with full mark down support; sharable, swapable, and easily identified with the 📝 icon. #2665

Screenshot 2025-12-10 at 3 52 36 PM

Metadata locale selection for IGDB and ScreenScraper

You can now set the order of your preferred locales/regional variants when fetching metadata from IGDB and ScreenScraper. The options below are available and can be set in your config.yml. #2700

scan:
  priority:
    region:
      - "us" # United States (no localization needed)
      - "wor" # World (default)
      - "ss" # Screenscraper (default)
      - "eu" # Europe
      - "jp"  # Japan
      - "kr" # Korea
      - "cn" # China (simplified)
      - "tw" # Taiwan (traditional)
516566290-2c43d67e-f55e-400b-8a89-a23e25d1ef36

Minor changes

  • Query parameter handling for tabs and sub-tabs by @zurdi15 in #2695
  • Redirect related games to RomM entry if exists by @zurdi15 in #2729
  • Make hashing during scan optional with filesystem.skip_hash_calculation in config.yml by @zurdi15 in #2703
  • Console mode locale by @Slabak007 in #2710
  • Add translations for firmware management dialogs by @tvdu29 in #2714
  • Hungarian translation added (finish, 12/12 files done). by @Soderes in #2718

Fixes

Behind-the-scenes

New Contributors

Full Changelog: 4.4.1...4.5.0-alpha.1

4.4.1

19 Nov 18:25
04b2439

Choose a tag to compare

Caution

This release patches two high (CVE-2025-65027 and CVE-2025-65097) and one moderate (CVE-2025-65096) severity vulnerabilities. An attacker who already has an account (with any role) on the instance can, with a special crafted link, gain full administrative control, create a new admin account, or escalate their own privileges. All previous versions are affected, and all server owners should update to this version as soon as possible.

As a precaution, users may be kicked out of their logged-in session when first accessing the app, editing a game or running a scan, which will regenerate session and CSRF cookies. This should only happen once.

Private or single-user instances are not at risk. Server owners should treat any links to RomM from users as suspicious. Further details will be published in 14 days to give server owners time to upgrade.

Minor changes

Fixes

  • remove ge on tinfoil releaseDate and let field_validator fix it by @gantoine in #2630
  • [ROMM-2628] Fix desirialize job func_name by @gantoine in #2637
  • [HOTFIX] Fix importing media from gamelist.xml by @gantoine in #2636
  • [ROMM-2639][ROMM-2627] Stop running scans during migration by @gantoine in #2644
  • [ROMM-2645] Wrap items in feeds with double quotes by @gantoine in #2647
  • [ROMM-2648] Encode filename of download URLs in feeds endpoints by @gantoine in #2649
  • [ROMM-2654] Fix manually uploading manual by @gantoine in #2661
  • [HOTFIX] Set all v-avatar to text to remove flat background color by @gantoine in #2662
  • [ROMM-2657] Safe access env vars with defaults by @gantoine in #2664
  • [HOTFIX] _mask_sensitive_values should check for null values by @gantoine in #2670
  • [ROMM-2669] Reset url_cover and url_manual to rom value if unchanged by @gantoine in #2671
  • [HOTFIX] Fix flashpoint match by UUID by @gantoine in #2681
  • [ROMM-2679] Stop force to string url_manual by @gantoine in #2682
  • Fix multipart strings by @gantoine in #2688
  • Fix CSRF failure on first admin signup by @gantoine in #2691

Other changes

New Contributors

Full Changelog: 4.4.0...4.4.1

4.4.1-beta.2

18 Nov 15:47
3e675f2

Choose a tag to compare

4.4.1-beta.2 Pre-release
Pre-release

Fixes

Other changes

  • Add French translations for Metadata Sources page by @tvdu29 in #2684
  • feat(i18n): Add translations for ROM management dialogs by @tvdu29 in #2686
  • Add github action to update HLTB API url by @gantoine in #2683
  • Implement CSRF middleware directly in repo by @gantoine in #2687

New Contributors

Full Changelog: 4.4.1-beta.1...4.4.1-beta.2

4.4.1-beta.1

16 Nov 15:57
db751d8

Choose a tag to compare

4.4.1-beta.1 Pre-release
Pre-release

Minor changes

Fixes

  • [ROMM-2639][ROMM-2627] Stop running scans during migration by @gantoine in #2644
  • [ROMM-2645] Wrap items in feeds with double quotes by @gantoine in #2647
  • [ROMM-2648] Encode filename of download URLs in feeds endpoints by @gantoine in #2649
  • [ROMM-2628] Fix desirialize job func_name by @gantoine in #2637
  • remove ge on tinfoil releaseDate and let field_validator fix it by @gantoine in #2630
  • [HOTFIX] Fix importing media from gamelist.xml by @gantoine in #2636
  • [ROMM-2654] Fix manually uploading manual by @gantoine in #2661
  • [HOTFIX] Set all v-avatar to text to remove flat background color by @gantoine in #2662
  • [ROMM-2657] Safe access env vars with defaults by @gantoine in #2664
  • [HOTFIX] _mask_sensitive_values should check for null values by @gantoine in #2670
  • [ROMM-2669] Reset url_cover and url_manual to rom value if unchanged by @gantoine in #2671

Other changes

  • config.example.yml - Corrects the indentation level of the "media" list by @LouiseRipley in #2643
  • Bump fastapi, starlette and fastapi-pagination by @gantoine in #2634
  • Bump js-yaml from 4.1.0 to 4.1.1 in /frontend by @dependabot[bot] in #2659

New Contributors

Full Changelog: 4.4.0...4.4.1-beta.1

4.4.0

10 Nov 00:54
884716b

Choose a tag to compare

Highlights

Warning

  • The Tinfoil feed endpoint has been updated from /tinfoil/feed to /feeds/tinfoil, update your Tinfoil config accordingly.
  • A manual Scheduled LaunchBox metadata update must be run once before Launchbox can be used as a metadata source.

Alternative boxart

Spice up your collection with 3D, physical, and mixed media boxart, courtesy of Screenscraper! Start by configuring which media assets to download in your config.yml file:

scan:
  media:
    - box2d
    - box3d
    - physical
    - miximage
    - screenshot
    - manual
    - bezel

Available media types:

  • box2d - Normal cover art (always enabled)
  • box3d - 3D box art
  • miximage - Mixed image of multiple media
  • physical - Disc, cartridge, etc.
  • screenshot - Screenshot (enabled by default)
  • title_screen - Title screen
  • marquee - Custom marquee
  • logo - Transparent logo
  • fanart - User uploaded artwork
  • bezel - Bezel displayed around the EmulatorJS window
  • manual - Manual in PDF format (enabled by default)
  • video - Gameplay video (warning: large file size)

Restart the container.
Now on the scan page, select Screenscraper as the metadata source, Update metadata as the scan type, and click the Scan button. The media assets will be downloaded and stored alongside existing resources for covers and screenshots. Then under User Interface (/user-interface), change the Boxart style to 3D, Physical, or Mix Image as desired.

2D Box
Screenshot_2025-10-23_at_3 54 58_PM
3D Box
Screenshot_2025-10-23_at_3 55 07_PM
Physical
Screenshot_2025-10-23_at_3 55 16_PM
Mix Image
Screenshot_2025-10-23_at_3 55 25_PM

#2598

ES-DE gamelist.xml

EmulationStation, and it's modern successor ES-DE, use a custom XML format to store game metadata. RomM can parse this format and import the assets as cover art and screenshots. You'll need to store the gamelist.xml file and any related assets under the platform folder, and select ES-DE in the "Metadata sources" dropdown on the scan page:

library/
  └─ roms/
    └─ gba/
      ├─ game_1.gba
      ├─ game_2.gba
      ├─ gamelist.xml
      ├─ 3dboxes/
      │  ├─ game_1.png
      │  └─ game_2.png
      ├─ covers/
      ├─ screenshots/
      └─ etc...

Here's an example of the content in a typical gamelist.xml file, though the parser supports more fields not listed:

<?xml version="1.0"?>
<gameList>
	<game>
		<path>./Advance Wars (J) (Rev 1).zip</path>
		<name>Advance Wars</name>
		<desc>The battle lines have been drawn, and an elite group of sly strategists is massing troops at your borders. You'll have to command ground, air and naval forces if you hope to survive the coming wars, and it won't be easy. With 114 maps to battle on and both the Single-Pak and Multi-Pak link modes, Advance Wars brings turn-based strategy to a depth never before seen on a handheld!</desc>
		<rating>0.8</rating>
		<releasedate>20020111T000000</releasedate>
		<developer>Intelligent Games</developer>
		<publisher>Nintendo</publisher>
		<genre>Strategy</genre>
		<players>1-4</players>
		<video>./videos/Advance Wars (J) (Rev 1).mp4</video>
		<box3d>./3dboxes/Advance Wars (J) (Rev 1).png</box3d>
		<backcover>./backcovers/Advance Wars (J) (Rev 1).png</backcover>
		<cover>./covers/Advance Wars (J) (Rev 1).png</cover>
		<fanart>./fanart/Advance Wars (J) (Rev 1).jpg</fanart>
		<manual>./manuals/Advance Wars (J) (Rev 1).pdf</manual>
		<marquee>./marquees/Advance Wars (J) (Rev 1).png</marquee>
		<miximage>./miximages/Advance Wars (J) (Rev 1).png</miximage>
		<physicalmedia>./physicalmedia/Advance Wars (J) (Rev 1).png</physicalmedia>
		<screenshot>./screenshots/Advance Wars (J) (Rev 1).png</screenshot>
		<title_screen>./titlescreens/Advance Wars (J) (Rev 1).png</title_screen>
		<thumbnail>./covers/Advance Wars (J) (Rev 1).png</thumbnail>
	</game>
</gameList>

#2563

Task status page

We've added a new section on the /administration page for monitoring background tasks. This section displays real-time task status, execution statistics for successful tasks, and error messages for failed tasks. #2502

Screenshot 2025-10-27 at 4 05 56 PM

Multi-threaded library scanning

Multiple games under the same platform can now be scanned in parallel, significantly reducing the time required to scan large libraries. Simply increase the SCAN_WORKERS environment variable to the number of games to scan in parallel. Note that parallel scanning is limited by the power of your CPU and the maximum permitted connections to selected metadata providers. #2566

Screenshot 2025-10-27 at 4 22 23 PM

Manually edit metadata

The game's edit window now allows you to directly edit metadata IDs and JSON values. Changing a metadata ID will prompt the server to refresh metadata from that specific source, using the new ID. The JSON values can also be edited directly, and will be saved as raw metadata; for example, you can update youtube_video_id to use gameplay videos instead of trailers. Note: an UPDATE or COMPLETE scan of a game will override any manual changes made to metadata IDs or JSON values. #2578

Screenshot 2025-10-27 at 4 29 06 PM

PS3/PSVita/PSP PKGi and Kekatsu DS feeds

Added support for PKGi and Kekatsu feed formats, enabling direct integration with popular game download tools:

  • PKGi PS3 (/feeds/pkgi/ps3/{content_type}): Supports games, DLC, demos, updates, patches, mods, translations, and prototypes
    • PKGi PSP (/feeds/pkgi/psp/{content_type}): Supporting the same content types
    • PKGi PS Vita (/feeds/pkgi/psvita/{content_type}): Supporting the same content types
  • Kekatsu DS (/feeds/kekatsu/{platform_slug}): Supporting Nintendo DS, GBA, and other compatible platforms with box art metadata

#2572

ScummVM metadata

Metadata for ScummVM games stored under a scummvm folder can now be fetched exclusively from IGDB, using a special keyword search. #2576

Screenshot 2025-10-27 at 4 27 46 PM

Screenscraper hash matching

The scanner will attempt to match games against Screenscraper's hash database, using the pre-calculated hashes for the largest, top-level ROM file. If no match is found, it will fall back to the existing file name matching logic. #2616

#2616

Minor changes

  • [ROMM-2546] Suborder consoles by generation by @gantoine in #2571
  • [ROMM-2531] Allow scanning without metadata providers by @gantoine in #2573
  • [ROMM-2491] Add shuffle button in navbar by @gantoine in #2574
  • [ROMM-2289] Display smart collection filter rules in sidebar by @gantoine in #2584
  • [ROMM-2159] Remember game sort order on reload by @gantoine in #2585
  • [ROMM-2147] Clarify language around scan types by @gantoine in #2586

Note

New environment variables

  • SCAN_WORKERS: Number of parallel worker processes for scanning games
  • TASK_RESULT_TTL: How long to keep task results in Valkey (in seconds)
  • SEVEN_ZIP_TIMEOUT: imeout for 7-Zip operations (in seconds)

Fixes

  • [ROMM-2555] Validate release date for tinfoil feed by @gantoine in #2557
  • [ROMM-2554] Remove htlb from manual search by @gantoine in #2558
  • [ROMM-2551] Fix error message on rom delete by @gantoine in #2559
  • [ROMM-2552] Rom hashes should only include top-level nested files by @gantoine in #2567
  • [ROMM-2548] Fix text readablility of new version alert by @gantoine in #2568
  • [ROMM-2547] Flashpoint scrape by flashpoint-XXX tag by @gantoine in #2569
  • [ROMM-2338] Consistent pending job fetch in watcher by @gantoine in #2582
  • [ROMM-2146] Open rows in new tab with right click by @gantoine in #2587
  • [HOTFIX] Fix fetching saves/states for rom or platform by @gantoine in #2594
  • Fix type error when role claim is null by @Tarow in #2570
  • Separate checks for readable/writable config.yml by @gantoine in #2588
  • Multi-threaded s...
Read more