chore(deps): update ghcr.io/rommapp/romm docker tag to v5 #91

Open
renovate-bot wants to merge 1 commit from renovate/ghcr.io-rommapp-romm-5.x into main
Member

This PR contains the following updates:

Package Update Change
ghcr.io/rommapp/romm major 4.4.15.0.0

Release Notes

rommapp/romm (ghcr.io/rommapp/romm)

v5.0.0

Compare Source

romm-5 0-banner

Highlights

UI overhaul

A ground-up redesign of the UI, with a new design system, fresh visual language, and a universal input model that feels at home with mouse, touch, keyboard and gamepad alike. With a stronger emphasis on performance, responsiveness, ease-of-use and accessibility, the new UI should be a joy on any device. #​3436

Screenshot 2026-07-11 at 2 02 26 PM
Screenshot 2026-07-11 at 2 01 49 PM
Screenshot 2026-07-11 at 3 06 19 PM
Shared savestates

Share your game saves and savestates with other users; useful for speedrunning, special unlocks, new game +, or just showing off your progress. #​3569

Screenshot 2026-07-12 at 2 43 57 PM
Interactive 3D boxart

Boxart go weeeeeeeeeeeeeeeeeeeeeeeeeeeee! #​3580

Jul-11-2026 14-55-17
CRT mode

Take me back to the 90s with a CRT shader that simulates the look of those old displays we love dearly. #​3552

Screenshot 2026-07-12 at 2 47 24 PM
Server-side ROM patching

We've unlocked the full power of ROM patching by moving it to the server. Simply apply patches to your ROMs, now with the option to use stored or uploaded patch files. #​3225

Screenshot 2026-07-12 at 2 50 04 PM
QR code pairing

Quickly pair your PC, TV or handheld device with your server by scanning a QR code (currently available on Argosy Launcher and Playnite). #​3308

Screenshot 2026-07-13 at 8 26 06 AM
Real-time logs

Tired of SSHing into your server to tail the logs when something breaks? Now you can view the backend logs in real-time directly from the web UI. #​3557

Screenshot 2026-07-12 at 2 42 01 PM
Controller debug view

Test your controller inputs and mappings in real-time with a new debug view. #​3581

Screenshot 2026-07-13 at 8 23 47 AM
Changelog preview

A quick peak at the changes in the current version, with links to the full changelog. #​3560

Screenshot 2026-07-12 at 2 48 01 PM
Granular permission system

Tweak access to your library with per-user and per-group permissions, with one configurable default group for new users. Tri-state grant/revoke on top of the group, and per-entity overrides, allow for fine-grained control over who can see what. #​3605

Screenshot 2026-07-13 at 8 22 43 AM
Music player

Music files stored within a ROMs' soundtrack folder can now be played directly from details page (#​3610), and queried directly from the API (#​3640). This opens the door to future features like background music playback and soundtrack playlists.

Screenshot 2026-07-13 at 6 56 42 AM

Minor changes

Fixes

Other changes

New Contributors

Full Changelog: https://github.com/rommapp/romm/compare/4.9.2...5.0.0

v4.9.2

Compare Source

What's Changed

Full Changelog: https://github.com/rommapp/romm/compare/4.9.1...4.9.2

v4.9.1

Compare Source

What's Changed

Full Changelog: https://github.com/rommapp/romm/compare/4.9.0...4.9.1

v4.9.0

Compare Source

[!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

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.

Play session tracking

Another one for the app developers: client devices submit batches of play sessions per device, recording when and how long games were played. Sessions track both the time window (start_time/end_time) and screen-on time (duration_ms), which may differ due to device suspension or back-grounding. #​3155

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

Notable changes

Fixes

Other changes

New Contributors

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

v4.8.1

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/rommapp/romm/compare/4.8.0...4.8.1

v4.8.0

Compare Source

Highlights

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

Screenshot 2026-03-13 at 9 15 48 PM Screenshot 2026-03-13 at 9 25 26 PM
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

Screenshot 2026-03-13 at 9 17 24 PM
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

Screenshot 2026-03-13 at 9 26 29 PM

Minor changes

Fixes

Other changes

[!NOTE]
Environment Variables

UPLOAD_TIMEOUT has been removed in favour of chunked uploads
OAUTH_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 endpoint
OIDC_RP_INITIATED_LOGOUT: Enable RP-initiated logout flow (default false)
OIDC_END_SESSION_ENDPOINT: OIDC end-session endpoint override URL

New Contributors

Full Changelog: https://github.com/rommapp/romm/compare/4.7.0...4.8.0

v4.7.0

Compare Source

Highlights

Auto-export gamelist.xml

Automatically generate an ES-DE compatible gamelist.xml file during scans by enabling the option in your config.yml. This will place the new gamelist.xml file within the platform folder for selected/discovered platforms.

scan:
    export_gamelist: true

@​ItzCobaltboy in #​2987

Device-based save synchronization

Thanks to @​tmgast, we've laid the ground work for device-based save synchronization to enable multi-device save management, as defined in RFC-0001. Devices (handhelds, PCs, etc.) can register with the server and track which saves they've synced, enabling conflict detection when a device tries to upload stale data.

Note that this is purely foundational work to set up an initial structure and API implementation and in intended for third-party developers. #​2917

Minor changes

  • Add support for ScummVM shortnames by @​gantoine in #​2957
  • Add OIDC_AUTOLOGIN=true env var to automatically login using OIDC by @​pR0Ps in #​2969
  • Enable keyboard lock in emulatorjs by @​matthewturk in #​3043
  • Group games with same name (but different tags) as versions/siblings by @​zeroSteiner in #​2984
  • Search by mutliple keywords with | by @​gantoine in #​2996
    • zelda|mario|sonic would show all games with zelda, mario OR sonic in the name
  • New PKGJ feed endpoints in .tsv format by @​gantoine in #​2986
    • PSP games: GET /api/feeds/pkgj/psp/games
    • PSP DLC files: GET /api/feeds/pkgj/psp/dlc
    • PS Vita games: GET /api/feeds/pkgj/psvita/games
    • PS Vita DLC files: GET /api/feeds/pkgj/psvita/dlc
    • PSX games: GET /api/feeds/pkgj/psx/games

Fixes

Other changes

New Contributors

Full Changelog: https://github.com/rommapp/romm/compare/4.6.1...4.7.0

v4.6.1

Compare Source

What's Changed

Full Changelog: https://github.com/rommapp/romm/compare/4.6.0...4.6.1

v4.6.0

Compare Source

Highlights

Additional metadata

The edit dialog now allows you to manually set metadata properties that would otherwise only be aggregated from metadata sources, if those metadata sources don't support/populate certain fields. #​2848

Screenshot 2026-01-12 at 1 16 34 PM
Enhance folder structure config

We've improved the web interface that lets you configure platform bindings and versions, and excluded files and folders. This change should simplify the process of configuring how library folders are interpreted and what content is ignored during scanning. #​2809

Screenshot 2026-01-12 at 12 25 11 PM Screenshot 2026-01-12 at 12 25 23 PM
Patcher.js
  • We're introducing a new ROM patching feature to the app that enables your admins and editors to apply various types of patches to ROM files. At this time both ROM and patch files must be downloaded locally and re-uploaded via the patcher, with future work planned to patch ROMs directly from your library. #​2787
Screenshot 2026-01-12 at 12 25 37 PM
UI settings sync

UI settings are now synced between devices for every user! These settings do not affect third-party apps, and any setting must be changed at least once for this sync to take effect. #​2777

BIOS file defaults

A default BIOS file can now be specified per emulator core directly in your config.yml:

emulatorjs:
  settings:
    mgba:
      bios_file: gba_bios.bin

#​2873

Minor changes

Fixes

Other changes

New Contributors

Full Changelog: https://github.com/rommapp/romm/compare/4.5.0...4.6.0

v4.5.0

Compare Source

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

Fixes

Behind-the-scenes

New Contributors

Full Changelog: https://github.com/rommapp/romm/compare/4.4.1...4.5.0


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.

This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/rommapp/romm](https://github.com/rommapp/romm) | major | `4.4.1` → `5.0.0` | --- ### Release Notes <details> <summary>rommapp/romm (ghcr.io/rommapp/romm)</summary> ### [`v5.0.0`](https://github.com/rommapp/romm/releases/tag/5.0.0) [Compare Source](https://github.com/rommapp/romm/compare/4.9.2...5.0.0) <div align="center"> <img width="465" height="144" alt="romm-5 0-banner" src="https://github.com/user-attachments/assets/daba6e6c-5df3-4e5b-b7a1-c737ca265f0e" /> </div> #### Highlights ##### UI overhaul A ground-up redesign of the UI, with a new design system, fresh visual language, and a universal input model that feels at home with mouse, touch, keyboard and gamepad alike. With a stronger emphasis on performance, responsiveness, ease-of-use and accessibility, the new UI should be a joy on any device. [#&#8203;3436](https://github.com/rommapp/romm/issues/3436) <img width="1000" height="619" alt="Screenshot 2026-07-11 at 2 02 26 PM" src="https://github.com/user-attachments/assets/c1ad3c67-3ac5-48c6-a4e7-86b5b90a0e3d" /> <br /> <img width="1000" height="591" alt="Screenshot 2026-07-11 at 2 01 49 PM" src="https://github.com/user-attachments/assets/675bb1ea-8793-4b59-9a36-c3ac6b5de2f1" /> <br /> <img width="1000" height="677" alt="Screenshot 2026-07-11 at 3 06 19 PM" src="https://github.com/user-attachments/assets/017526a3-c70a-4bcd-9677-d838d286f833" /> ##### Shared savestates Share your game saves and savestates with other users; useful for speedrunning, special unlocks, new game +, or just showing off your progress. [#&#8203;3569](https://github.com/rommapp/romm/issues/3569) <img width="907" height="136" alt="Screenshot 2026-07-12 at 2 43 57 PM" src="https://github.com/user-attachments/assets/73596f33-3608-48c6-80ae-9e240b1219a1" /> ##### Interactive 3D boxart Boxart go weeeeeeeeeeeeeeeeeeeeeeeeeeeee! [#&#8203;3580](https://github.com/rommapp/romm/issues/3580) <img width="296" height="336" alt="Jul-11-2026 14-55-17" src="https://github.com/user-attachments/assets/85ea6e87-9387-409c-a3c5-f1101643be6e" /> ##### CRT mode Take me back to the 90s with a CRT shader that simulates the look of those old displays we love dearly. [#&#8203;3552](https://github.com/rommapp/romm/issues/3552) <img width="1000" height="529" alt="Screenshot 2026-07-12 at 2 47 24 PM" src="https://github.com/user-attachments/assets/d59dce11-9db4-4095-86e0-5d1a296756fa" /> ##### Server-side ROM patching We've unlocked the full power of ROM patching by moving it to the server. Simply apply patches to your ROMs, now with the option to use stored or uploaded patch files. [#&#8203;3225](https://github.com/rommapp/romm/issues/3225) <img width="1000" height="512" alt="Screenshot 2026-07-12 at 2 50 04 PM" src="https://github.com/user-attachments/assets/3370cd58-19db-46b8-8c17-838d1c2ac1eb" /> ##### QR code pairing Quickly pair your PC, TV or handheld device with your server by scanning a QR code (currently available on Argosy Launcher and Playnite). [#&#8203;3308](https://github.com/rommapp/romm/issues/3308) <img width="291" height="292" alt="Screenshot 2026-07-13 at 8 26 06 AM" src="https://github.com/user-attachments/assets/a6d1c186-05f3-4bb2-b2c0-de9d7a4fbade" /> ##### Real-time logs Tired of SSHing into your server to tail the logs when something breaks? Now you can view the backend logs in real-time directly from the web UI. [#&#8203;3557](https://github.com/rommapp/romm/issues/3557) <img width="1000" height="430" alt="Screenshot 2026-07-12 at 2 42 01 PM" src="https://github.com/user-attachments/assets/28354e7f-6256-4ee2-ace0-36557453fe81" /> ##### Controller debug view Test your controller inputs and mappings in real-time with a new debug view. [#&#8203;3581](https://github.com/rommapp/romm/issues/3581) <img width="577" height="420" alt="Screenshot 2026-07-13 at 8 23 47 AM" src="https://github.com/user-attachments/assets/2a48756e-2df0-4ed2-8fcd-565dbad8c67d" /> ##### Changelog preview A quick peak at the changes in the current version, with links to the full changelog. [#&#8203;3560](https://github.com/rommapp/romm/issues/3560) <img width="500" height="451" alt="Screenshot 2026-07-12 at 2 48 01 PM" src="https://github.com/user-attachments/assets/ab523b84-945d-4021-95c2-b88b92b24e3b" /> ##### Granular permission system Tweak access to your library with per-user and per-group permissions, with one configurable default group for new users. Tri-state grant/revoke on top of the group, and per-entity overrides, allow for fine-grained control over who can see what. [#&#8203;3605](https://github.com/rommapp/romm/issues/3605) <img width="548" height="628" alt="Screenshot 2026-07-13 at 8 22 43 AM" src="https://github.com/user-attachments/assets/2af6df22-e2b8-412c-b566-d332f8d62bdb" /> ##### Music player Music files stored within a ROMs' `soundtrack` folder can now be played directly from details page ([#&#8203;3610](https://github.com/rommapp/romm/issues/3610)), and queried directly from the API ([#&#8203;3640](https://github.com/rommapp/romm/issues/3640)). This opens the door to future features like background music playback and soundtrack playlists. <img width="906" height="664" alt="Screenshot 2026-07-13 at 6 56 42 AM" src="https://github.com/user-attachments/assets/2b6c5a02-a9ed-4fe4-b85e-43c29100a928" /> #### Minor changes * Add ES-DE `<sortname>` import and edit support for ROM ordering by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3460 * fix(ra): hash PSP compressed-ISO containers natively (#&#8203;3600) by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3609 * feat(roms): filter games by matched metadata provider by @&#8203;Spinnich in https://github.com/rommapp/romm/pull/3615 * feat(roms): filter games by custom tags by @&#8203;Spinnich in https://github.com/rommapp/romm/pull/3629 * Add ROM revision field to game details overview by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3631 * Add Artwork subtab to Media tab with scraped art gallery by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3634 and https://github.com/rommapp/romm/pull/3700 * Add filters for has save/state by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3642 * Support markdown manuals and enforce allowed file types by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3683 * feat(player): remember emulator core per-game by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3701 * feat: Add debug overlay by @&#8203;zurdi15 in https://github.com/rommapp/romm/pull/3554 #### Fixes * fix: Refresh platforms on scan by @&#8203;zurdi15 in https://github.com/rommapp/romm/pull/3555 * Handle missing ROM files during delete-from-filesystem requests by @&#8203;zurdi15 in https://github.com/rommapp/romm/pull/3562 * fix: guard SiblingBadge against missing sibling_roms (scan crash with Group ROMs) by @&#8203;androosio in https://github.com/rommapp/romm/pull/3568 * Permission fix for exported game lists and Pegasus platform slugs mapping by @&#8203;ametis70 in https://github.com/rommapp/romm/pull/3587 * fix(platform): accept embedded custom_name body on platform update by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3597 * fix(webp): backfill cover conversion on startup when enabled by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3602 * fix(scan): prevent duplicate ROM entries from racing scans by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3606 * fix(scan): make scan tracker totals reflect platforms actually scanned by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3607 * Fix state/save injection timing and corruption in EmulatorJS by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3624 * fix(scan): Normalize Sony serial codes to uppercase before cache lookup by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3622 * Fix ROM name handling in UNMATCHED scans to replace placeholders by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3623 * fix(backend): load platform_id on siblings to avoid DetachedInstanceError by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3635 * Fix ROM upload temp directory to use RESOURCES_BASE_PATH by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3632 * fix(roms): namespace filter-values cache by schema version by @&#8203;Spinnich in https://github.com/rommapp/romm/pull/3638 * fix(retroachievements): match MSX2 against RetroAchievements (#&#8203;3644) by @&#8203;Spinnich in https://github.com/rommapp/romm/pull/3645 * fix(retroachievements): match Famicom Disk System (FDS) against RetroAchievements by @&#8203;Spinnich in https://github.com/rommapp/romm/pull/3647 * fix(retroachievements): match SuperGrafx against RetroAchievements by @&#8203;Spinnich in https://github.com/rommapp/romm/pull/3652 * Fix typo in core mapping from 'zsx' to 'zxs' by @&#8203;sildur in https://github.com/rommapp/romm/pull/3656 * Refine filename version-tag parsing to avoid swallowing generic `v*` tags by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3658 * fix: make 1.8 migration re-entrant so fresh installs stop crash-looping on MariaDB by @&#8203;mvanhorn in https://github.com/rommapp/romm/pull/3669 * fix(retroachievements): hash GameCube and Wii RVZ/WIA images natively by @&#8203;Spinnich in https://github.com/rommapp/romm/pull/3657 * fix(collections): download whole collections as a single zip by @&#8203;Spinnich in https://github.com/rommapp/romm/pull/3661 * fix: display selected firmware in player by @&#8203;chiyi-creator in https://github.com/rommapp/romm/pull/3673 * fix: stop mapping Public Domain ROMs to Poland by @&#8203;chiyi-creator in https://github.com/rommapp/romm/pull/3671 * fix: allow NAT64-wrapped public IPs through SSRF filter by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3675 * Use parsed filename for unmatched ROM titles instead of raw filename by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3681 * fix(scan): fall back to other providers when ScreenScraper quota is exhausted by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3686 * fix(launchbox): import local media when matching via update_rom by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3687 * feat: default UI language to browser language when available by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3690 * fix(platforms): stop platform variants from renaming the parent platform by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3693 * fix: generate virtual collections from all metadata sources by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3694 * fix(sockets): require TASKS_RUN scope for scan and scan:stop by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3698 * fix(roms): enforce parent ROM visibility on direct file endpoints by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3703 * fix(backend): correct M4A embedded cover extraction and validation by @&#8203;VoidHandler in https://github.com/rommapp/romm/pull/3705 * fix(launchbox): match remote cover art region to ROM region by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3709 * fix(backend): serve PDF/Markdown manuals inline so the viewer can render them by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3714 * fix: surface config.yml parse errors instead of silently using defaults by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3713 * fix(frontend): restore manual display and extract ManualSubtab by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3717 * Fixed the translation of "player-count" by @&#8203;wolfg1969 in https://github.com/rommapp/romm/pull/3719 * fix(scan): make Hasheous and SteamGridDB scan lookups fault-tolerant in the metadata handlers by @&#8203;TowyTowy in https://github.com/rommapp/romm/pull/3716 * fix(backend): discard ScreenScraper chroma-key green placeholder art by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3724 * fix(frontend): restore manual display and extract ManualSubtab by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3717 * Fixed the translation of "player-count" by @&#8203;wolfg1969 in https://github.com/rommapp/romm/pull/3719 * fix(scan): make Hasheous and SteamGridDB scan lookups fault-tolerant in the metadata handlers by @&#8203;TowyTowy in https://github.com/rommapp/romm/pull/3716 * fix(backend): discard ScreenScraper chroma-key green placeholder art by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3724 * fix(ui): remove cover-art attribution link on details pages by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3737 fix(scan): strip leading dot from dot-separated version tags by @&#8203;TowyTowy in https://github.com/rommapp/romm/pull/3751 #### Other changes * fix(search): full-text indexes+caching by @&#8203;bonofiglio in https://github.com/rommapp/romm/pull/3540 * Integrate Hypothesis property-based testing for the backend by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3403 * feat: backend connection status notice + offline-aware boot by @&#8203;zurdi15 in https://github.com/rommapp/romm/pull/3550 * Run backend tests in parallel with pytest-xdist by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3559 * feat(auth): add OIDC_ALLOW_REGISTRATION toggle to gate OIDC auto-registration by @&#8203;Spinnich in https://github.com/rommapp/romm/pull/3577 * docs: split frontend constitution into focused agent skills, make CLAUDE.md holistic by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3581 * Exclude served resources from Vite dev watcher by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3586 * Add test data generator script by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3585 * Test Build GitHub Action improvements by @&#8203;ametis70 in https://github.com/rommapp/romm/pull/3588 * fix(deps): bump dependencies to patch reported vulnerabilities by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3592 * Turkish language support tr_TR by @&#8203;y1lm-z in https://github.com/rommapp/romm/pull/3593 * perf(roms): speed up the gallery/search list endpoint on large libraries by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3595 * Stop spamming PRs with coverage reports by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3625 * Squash legacy migrations by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3670 * docs(claude): add PR linking and template conventions by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3682 * i18n: rename "Duplicates" filter to "Versions" in the UI by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3688 * test: add axe accessibility gate + keyboard nav tests to Storybook by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3691 * docs(sync): clarify slot pairing behavior in negotiate OpenAPI spec by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3699 * feat(playmatch): move integration to API v2 by @&#8203;DevYukine in https://github.com/rommapp/romm/pull/3689 * ci: fail PRs that modify the frozen frontend v1 UI by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3723 * Hotfix upload buttons in media tabs by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3732 * ci: fail PRs that modify the frozen frontend v1 UI by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3723 * Add Freegosy to community tab in README by @&#8203;abduznik in https://github.com/rommapp/romm/pull/3729 * Update README featured projects by @&#8203;QuaiGoner in https://github.com/rommapp/romm/pull/3738 * feat: inject ScreenScraper dev credentials at build time by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3740 * build(deps): bump python-engineio from 4.12.2 to 4.13.2 by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3626 * build(deps): bump joserfc from 1.6.3 to 1.6.7 by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3627 * build(deps): bump python-socketio from 5.14.0 to 5.16.2 by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3628 * chore(deps): bump joserfc from 1.6.7 to 1.6.8 by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3672 #### New Contributors * @&#8203;bonofiglio made their first contribution in https://github.com/rommapp/romm/pull/3540 * @&#8203;androosio made their first contribution in https://github.com/rommapp/romm/pull/3568 * @&#8203;ametis70 made their first contribution in https://github.com/rommapp/romm/pull/3587 * @&#8203;y1lm-z made their first contribution in https://github.com/rommapp/romm/pull/3593 * @&#8203;sildur made their first contribution in https://github.com/rommapp/romm/pull/3656 * @&#8203;mvanhorn made their first contribution in https://github.com/rommapp/romm/pull/3669 * @&#8203;chiyi-creator made their first contribution in https://github.com/rommapp/romm/pull/3673 * @&#8203;VoidHandler made their first contribution in https://github.com/rommapp/romm/pull/3705 * @&#8203;wolfg1969 made their first contribution in https://github.com/rommapp/romm/pull/3719 * @&#8203;TowyTowy made their first contribution in https://github.com/rommapp/romm/pull/3716 **Full Changelog**: <https://github.com/rommapp/romm/compare/4.9.2...5.0.0> ### [`v4.9.2`](https://github.com/rommapp/romm/releases/tag/4.9.2) [Compare Source](https://github.com/rommapp/romm/compare/4.9.1...4.9.2) #### What's Changed - fix: Crash on startup when no library by [@&#8203;zurdi15](https://github.com/zurdi15) in [#&#8203;3544](https://github.com/rommapp/romm/pull/3544) - build(deps-dev): bump js-yaml from 4.1.1 to 4.2.0 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3525](https://github.com/rommapp/romm/pull/3525) - build(deps): bump tornado from 6.5.6 to 6.5.7 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3528](https://github.com/rommapp/romm/pull/3528) - build(deps): bump python-multipart from 0.0.22 to 0.0.31 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3527](https://github.com/rommapp/romm/pull/3527) - build(deps): bump aiohttp from 3.13.4 to 3.14.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3530](https://github.com/rommapp/romm/pull/3530) - build(deps): bump markdown-it from 14.1.1 to 14.2.0 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3533](https://github.com/rommapp/romm/pull/3533) - build(deps): bump ws and engine.io-client in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3532](https://github.com/rommapp/romm/pull/3532) **Full Changelog**: <https://github.com/rommapp/romm/compare/4.9.1...4.9.2> ### [`v4.9.1`](https://github.com/rommapp/romm/releases/tag/4.9.1) [Compare Source](https://github.com/rommapp/romm/compare/4.9.0...4.9.1) #### What's Changed - fix: Structure A always takes priority over Structure B in library detection by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3508](https://github.com/rommapp/romm/pull/3508) - build(deps): bump tornado from 6.5.5 to 6.5.6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3513](https://github.com/rommapp/romm/pull/3513) - build(deps): bump esbuild, vite, [@&#8203;tailwindcss/vite](https://github.com/tailwindcss/vite), [@&#8203;vitejs/plugin-vue](https://github.com/vitejs/plugin-vue), vite-plugin-pwa and vite-plugin-static-copy in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3514](https://github.com/rommapp/romm/pull/3514) - Fix config.yml serialization breaking folder-to-platform mappings by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3516](https://github.com/rommapp/romm/pull/3516) - Override rolldown version by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3524](https://github.com/rommapp/romm/pull/3524) - Fix bypass\_autologin overwritten by 403 interceptor during app initialization by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3523](https://github.com/rommapp/romm/pull/3523) **Full Changelog**: <https://github.com/rommapp/romm/compare/4.9.0...4.9.1> ### [`v4.9.0`](https://github.com/rommapp/romm/releases/tag/4.9.0) [Compare Source](https://github.com/rommapp/romm/compare/4.8.1...4.9.0) > \[!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` #### 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. [#&#8203;3137](https://github.com/rommapp/romm/issues/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. ##### Play session tracking Another one for the app developers: client devices submit batches of play sessions per device, recording when and how long games were played. Sessions track both the time window (start\_time/end\_time) and screen-on time (duration\_ms), which may differ due to device suspension or back-grounding. [#&#8203;3155](https://github.com/rommapp/romm/issues/3155) ##### Libretro thumbnails The [libretro thumbnail repository](https://thumbnails.libretro.com/) 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. [#&#8203;3252](https://github.com/rommapp/romm/issues/3252) ##### Pegasus metadata export You can now auto-export a [Pegasus](https://pegasus-frontend.org/) 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). [#&#8203;3153](https://github.com/rommapp/romm/issues/3153) #### Notable changes - Gamelist export improvements by [@&#8203;vargash](https://github.com/vargash) in [#&#8203;3202](https://github.com/rommapp/romm/pull/3202) - Send a suggestion to playmatch on manual match when enabled by [@&#8203;DevYukine](https://github.com/DevYukine) in [#&#8203;3296](https://github.com/rommapp/romm/pull/3296) - Add SteamGridDB, ScreenScraper, MobyGames & Launchbox hash support to Playmatch by [@&#8203;DevYukine](https://github.com/DevYukine) in [#&#8203;3381](https://github.com/rommapp/romm/pull/3381) - Compute raw CHD hashes and route disc-data SHA1 to Hasheous by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3385](https://github.com/rommapp/romm/pull/3385) - Add Playmatch as explicit metadata source by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3407](https://github.com/rommapp/romm/pull/3407) - Add genesis\_plus\_gx\_wide, bsnes, freeintv, azahar EJS cores to nightly by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3454](https://github.com/rommapp/romm/pull/3454) - Expose per-device save sync attribution and origin device by [@&#8203;tmgast](https://github.com/tmgast) in [#&#8203;3479](https://github.com/rommapp/romm/issues/3479) - Add rate limiting to metadata service API requests by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3482](https://github.com/rommapp/romm/issues/3482) and [#&#8203;3485](https://github.com/rommapp/romm/issues/3485) #### Fixes - 4.8.1 hotfixes by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3221](https://github.com/rommapp/romm/pull/3221) - UI settings not woking after switching pages back and forth by [@&#8203;Namaneo](https://github.com/Namaneo) in [#&#8203;3317](https://github.com/rommapp/romm/pull/3317) - MSDOS games fail to launch in console mode ("Error for site owner / Check console") by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3294](https://github.com/rommapp/romm/pull/3294) - Include `cus` region in default ScreenScraper fallback regions by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3273](https://github.com/rommapp/romm/pull/3273) - Scan stalls on platforms with 10k+ already-scanned ROMs by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3249](https://github.com/rommapp/romm/pull/3249) - Respect LOGLEVEL env var across all log output sources by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3243](https://github.com/rommapp/romm/pull/3243) - Registration links redirect to login for unauthenticated users by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3231](https://github.com/rommapp/romm/pull/3231) - Address bugs and add test coverage for save-sync by [@&#8203;tmgast](https://github.com/tmgast) in [#&#8203;3135](https://github.com/rommapp/romm/pull/3135) - Fix age\_ratings Pydantic validation error on MySQL/MariaDB for single-element arrays by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3223](https://github.com/rommapp/romm/pull/3223) - Parse Content-Type essence before validating resource downloads by [@&#8203;TechnicallyComputers](https://github.com/TechnicallyComputers) in [#&#8203;3233](https://github.com/rommapp/romm/pull/3233) - Fix content\_hash not updated by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3234](https://github.com/rommapp/romm/pull/3234) - Fix extension exclusion not matching multi-dot filenames by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3326](https://github.com/rommapp/romm/pull/3326) - Fix chunked uploads writing to RAM/tmpfs and upload speed showing 0 B/s by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3316](https://github.com/rommapp/romm/pull/3316) - Fix RuffleRS scaling and overflow issues on large and small screens by [@&#8203;jondycz](https://github.com/jondycz) in [#&#8203;3245](https://github.com/rommapp/romm/pull/3245) - Fix RAHasher prod build by [@&#8203;dangmai](https://github.com/dangmai) in [#&#8203;3282](https://github.com/rommapp/romm/pull/3282) - Fix download failing when hash has not been computed by [@&#8203;Namaneo](https://github.com/Namaneo) in [#&#8203;3264](https://github.com/rommapp/romm/pull/3264) - Fix race condition in collection and favorite rom membership updates by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3263](https://github.com/rommapp/romm/pull/3263) - Fix settings drawer logout button overflowing on mobile by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3248](https://github.com/rommapp/romm/pull/3248) - Improve light mode text by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3236](https://github.com/rommapp/romm/pull/3236) - Resolve MariaDB errors in migration downgrades (0068, 0072) by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3246](https://github.com/rommapp/romm/pull/3246) - Show TheGamesDB link on platform drawer when tgdb\_id is set by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3254](https://github.com/rommapp/romm/pull/3254) - A bunch of minor bug fixes by [@&#8203;Namaneo](https://github.com/Namaneo) in [#&#8203;3270](https://github.com/rommapp/romm/pull/3270) - Re-parse tags from filename when renaming a rom by [@&#8203;zurdi15](https://github.com/zurdi15) in [#&#8203;3295](https://github.com/rommapp/romm/pull/3295) - Open refresh metadata dialog with scan type and metadata source selection by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3293](https://github.com/rommapp/romm/pull/3293) - Setup wizard: make platform row click toggle selection checkbox by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3341](https://github.com/rommapp/romm/pull/3341) - Use static auth background on Firefox by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3352](https://github.com/rommapp/romm/pull/3352) - Validate uploaded images with libmagic by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3353](https://github.com/rommapp/romm/pull/3353) - Tolerate forward-compat values and malformed YAML in config loader by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3364](https://github.com/rommapp/romm/pull/3364) - Apply `DISABLE_EMULATOR_JS` to Console mode (disable Play + block direct player route) by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3373](https://github.com/rommapp/romm/pull/3373) - Fix stale disc file ID in localStorage causing 404 on ROM play after rescan by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3374](https://github.com/rommapp/romm/pull/3374) - Fix `gamelist.xml` export to use relative media paths for local exports by [@&#8203;gtronset](https://github.com/gtronset) in [#&#8203;3369](https://github.com/rommapp/romm/pull/3369) - Include games without achievements in RA hash cache by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3368](https://github.com/rommapp/romm/pull/3368) - Generate gunicorn logging config to writable /tmp path by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3383](https://github.com/rommapp/romm/pull/3383) - Avoid Safari/WebKit stalls during chunked ROM uploads by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3382](https://github.com/rommapp/romm/pull/3382) - Default SYNC\_BASE\_PATH to /var/lib/romm/sync by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3386](https://github.com/rommapp/romm/pull/3386) - Exclude the videos directory from scanning for batocera config by [@&#8203;enlewof](https://github.com/enlewof) in [#&#8203;3387](https://github.com/rommapp/romm/pull/3387) - Treat Libretro-only ROM matches as identified during scan by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3394](https://github.com/rommapp/romm/pull/3394) - Fix Complete Rescan not clearing unselected metadata sources by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3395](https://github.com/rommapp/romm/pull/3395) - Respect region priority for multi-region ROMs by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3396](https://github.com/rommapp/romm/pull/3396) - Tolerate launchbox basepath by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3397](https://github.com/rommapp/romm/pull/3397) - Harden multi-ROM folder exclusion matching for ES-DE media directories by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3399](https://github.com/rommapp/romm/pull/3399) - Fix: UNMATCHED scan ignores manually-set metadata IDs when metadata is absent by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3401](https://github.com/rommapp/romm/pull/3401) - Fix IGDB/SGDB matching wrong game for standalone expansions (e.g. Ecco: The Tides of Time) by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3400](https://github.com/rommapp/romm/pull/3400) - fix: wipe downloaded resources on COMPLETE rescan by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3406](https://github.com/rommapp/romm/pull/3406) - fix(screenscraper): re-add user credentials to media file downloads by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3414](https://github.com/rommapp/romm/pull/3414) - fix(screenscraper): skip name search after notgame hash lookup by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3417](https://github.com/rommapp/romm/pull/3417) - Handle malformed ES-DE `<alternativeEmulator>` tags during gamelist.xml import by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3421](https://github.com/rommapp/romm/pull/3421) - Support `<folder>` entries in gamelist.xml metadata import by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3422](https://github.com/rommapp/romm/pull/3422) - fix(nginx): use Buffer for binary-safe base64 decode in m3u endpoint by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3428](https://github.com/rommapp/romm/pull/3428) - Add iOS pseudo-fullscreen shim for EmulatorJS player by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3431](https://github.com/rommapp/romm/pull/3431) - perf(roms): avoid hydrating full Rom rows for siblings on list endpoint by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3432](https://github.com/rommapp/romm/pull/3432) - fix(screenscraper): inject user credentials for all standard media downloads by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3438](https://github.com/rommapp/romm/pull/3438) - Use region-prioritized release dates from ScreenScraper by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3434](https://github.com/rommapp/romm/pull/3434) - chore: remove obsolete 'version' attribute by [@&#8203;VewDev](https://github.com/VewDev) in [#&#8203;3443](https://github.com/rommapp/romm/pull/3443) - feat: add `miximage_v2` media type to explicitly select SS.fr mixrbv2 by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3446](https://github.com/rommapp/romm/pull/3446) - Fix HTTP 500 on ROM list when platform has ROMs with NULL names by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3450](https://github.com/rommapp/romm/pull/3450) - Fix save-sync hash drift, archival save leak, and dedupe scoping by [@&#8203;tmgast](https://github.com/tmgast) in [#&#8203;3448](https://github.com/rommapp/romm/pull/3448) - Composite hashing for compressed archives by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3412](https://github.com/rommapp/romm/pull/3412) - fix(screenscraper): use internal filename as romnom for single-file archive games by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3451](https://github.com/rommapp/romm/pull/3451) - Fix save-sync negotiate thrash and unblock content\_hash recompute by [@&#8203;tmgast](https://github.com/tmgast) in [#&#8203;3453](https://github.com/rommapp/romm/pull/3453) - fix(hashing): compute RA hash for archive ROMs on cartridge platforms by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3455](https://github.com/rommapp/romm/pull/3455) - fix(igdb): match ROMs by localized/alternative titles in scan by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3461](https://github.com/rommapp/romm/pull/3461) - Match IGDB regional-twin platforms in scans ([#&#8203;3462](https://github.com/rommapp/romm/issues/3462)) by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3463](https://github.com/rommapp/romm/pull/3463) - fix(roms): repair multi-file ROM downloads broken by deferred file stats by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3466](https://github.com/rommapp/romm/pull/3466) - fix(ss): map New Nintendo 3DS to ScreenScraper system 17 by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3465](https://github.com/rommapp/romm/pull/3465) - Fix double URL-encoding of ScreenScraper name-search term by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3468](https://github.com/rommapp/romm/pull/3468) - test(roms): cover region-tag re-parse on rename ([#&#8203;3471](https://github.com/rommapp/romm/issues/3471)) by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3472](https://github.com/rommapp/romm/pull/3472) - Invalidate EmulatorJS ROM cache when a ROM filename changes by [@&#8203;Copilot](https://github.com/Copilot) in [#&#8203;3476](https://github.com/rommapp/romm/pull/3476) - fix(roms): return 404 when content file\_ids match no files by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3473](https://github.com/rommapp/romm/pull/3473) - fix(screenscraper): utilize ss.fr jeuinfos.php endpoint for non-hashable platforms by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3475](https://github.com/rommapp/romm/pull/3475) - Handle missing console bezel assets without rendering Safari broken-image overlay by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3494](https://github.com/rommapp/romm/issues/3494) - Fix smart collection status filter normalization for multi-value legacy payloads by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3495](https://github.com/rommapp/romm/issues/3495) - Send all top-level file hashes to Hasheous lookup by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3498](https://github.com/rommapp/romm/issues/3498) - fix(ra): hash folder-based disc ROMs (.cue + .bin) for RetroAchievements by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3500](https://github.com/rommapp/romm/issues/3500) #### Other changes - Safer migrations by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3238](https://github.com/rommapp/romm/pull/3238) - Skip RAHasher subprocess for archived disc-platform ROMs by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3253](https://github.com/rommapp/romm/pull/3253) - Add missing index on `rom_files(rom_id)` to fix slow game listing on large ROM sets by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3259](https://github.com/rommapp/romm/pull/3259) - Enforce LF line endings for shell scripts via .gitattributes by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3266](https://github.com/rommapp/romm/pull/3266) - Describe architecture by [@&#8203;zurdi15](https://github.com/zurdi15) in [#&#8203;3299](https://github.com/rommapp/romm/pull/3299) - Replace HIGH\_PRIO\_STRUCTURE\_PATH by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3322](https://github.com/rommapp/romm/pull/3322) - Replace deprecated `job.get_id()` with `job.id` for rq >= 2.7.0 compatibility by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3320](https://github.com/rommapp/romm/pull/3320) - Update config.batocera-retrobat.yml by [@&#8203;enlewof](https://github.com/enlewof) in [#&#8203;3349](https://github.com/rommapp/romm/pull/3349) - Prefer ROM's own region tag for ScreenScraper and IGDB artwork by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3367](https://github.com/rommapp/romm/pull/3367) - Add comma-separated metadata attribute support to gamelist by [@&#8203;EntropyEngineer](https://github.com/EntropyEngineer) in [#&#8203;3380](https://github.com/rommapp/romm/pull/3380) - Improve API handling, KO scrape data, and metadata sanitization by [@&#8203;Spinnich](https://github.com/Spinnich) in [#&#8203;3384](https://github.com/rommapp/romm/pull/3384) - Hardlink import/export assets, harden sync init by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3388](https://github.com/rommapp/romm/pull/3388) - Guard init startup against OpenTelemetry boot-loop conditions by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3423](https://github.com/rommapp/romm/pull/3423) - Refresh CSRF cookie on OIDC session authentication changes by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3424](https://github.com/rommapp/romm/pull/3424) - Defer optional handler initialization with lazy factories by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3426](https://github.com/rommapp/romm/pull/3426) - Denormalize ROM file stats for efficient gallery rendering by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3425](https://github.com/rommapp/romm/pull/3425) - Add DNS resolution check to URL validation by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3441](https://github.com/rommapp/romm/pull/3441) - Add tgcd and supergrafx to emulatorjs platform list by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3459](https://github.com/rommapp/romm/pull/3459) - Stop serving private user assets via unauthenticated nginx static route by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3480](https://github.com/rommapp/romm/issues/3480) - Fix Docker volume mounts to enable hardlink optimization by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3484](https://github.com/rommapp/romm/issues/3484) - Add opt-in files/siblings expansion to GET /api/roms by [@&#8203;tmgast](https://github.com/tmgast) in [#&#8203;3490](https://github.com/rommapp/romm/issues/3490) - Bump RAHasher to 1.8.3 in docker/Dockerfile by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3277](https://github.com/rommapp/romm/pull/3277) - Bump pytest-asyncio for pytest 9 compatibility by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3269](https://github.com/rommapp/romm/pull/3269) - Bump vite from 6.4.1 to 6.4.2 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3227](https://github.com/rommapp/romm/pull/3227) - Bump postcss from 8.5.8 to 8.5.12 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3321](https://github.com/rommapp/romm/pull/3321) - Bump axios from 1.13.6 to 1.15.0 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3240](https://github.com/rommapp/romm/pull/3240) - Bump python-dotenv from 1.0.1 to 1.2.2 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3301](https://github.com/rommapp/romm/pull/3301) - Bump follow-redirects from 1.15.11 to 1.16.0 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3267](https://github.com/rommapp/romm/pull/3267) - Bump pillow from 12.1.1 to 12.2.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3257](https://github.com/rommapp/romm/pull/3257) - Bump mako from 1.3.10 to 1.3.11 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3304](https://github.com/rommapp/romm/pull/3304) - Bump pytest from 8.4.1 to 9.0.3 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3268](https://github.com/rommapp/romm/pull/3268) - Bump fast-uri from 3.1.0 to 3.1.2 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3345](https://github.com/rommapp/romm/pull/3345) - Bump serialize-javascript and workbox-build in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3346](https://github.com/rommapp/romm/pull/3346) - Bump cryptography from 46.0.5 to 46.0.7 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3351](https://github.com/rommapp/romm/pull/3351) - Bump [@&#8203;babel/plugin-transform-modules-systemjs](https://github.com/babel/plugin-transform-modules-systemjs) from 7.29.0 to 7.29.4 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3350](https://github.com/rommapp/romm/pull/3350) - Bump authlib from 1.6.9 to 1.6.12 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3370](https://github.com/rommapp/romm/pull/3370) - Bump idna from 3.10 to 3.15 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3391](https://github.com/rommapp/romm/pull/3391) - Bump js-cookie from 3.0.5 to 3.0.7 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3404](https://github.com/rommapp/romm/pull/3404) - Bump asyncssh from 2.22.0 to 2.23.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3442](https://github.com/rommapp/romm/pull/3442) - Upgrade FastAPI to 0.134.0 and Starlette to 1.0.1 by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3437](https://github.com/rommapp/romm/pull/3437) #### New Contributors - [@&#8203;TechnicallyComputers](https://github.com/TechnicallyComputers) made their first contribution in [#&#8203;3233](https://github.com/rommapp/romm/pull/3233) - [@&#8203;jondycz](https://github.com/jondycz) made their first contribution in [#&#8203;3245](https://github.com/rommapp/romm/pull/3245) - [@&#8203;Spinnich](https://github.com/Spinnich) made their first contribution in [#&#8203;3263](https://github.com/rommapp/romm/pull/3263) - [@&#8203;Namaneo](https://github.com/Namaneo) made their first contribution in [#&#8203;3264](https://github.com/rommapp/romm/pull/3264) - [@&#8203;dangmai](https://github.com/dangmai) made their first contribution in [#&#8203;3282](https://github.com/rommapp/romm/pull/3282) - [@&#8203;enlewof](https://github.com/enlewof) made their first contribution in [#&#8203;3349](https://github.com/rommapp/romm/pull/3349) - [@&#8203;EntropyEngineer](https://github.com/EntropyEngineer) made their first contribution in [#&#8203;3380](https://github.com/rommapp/romm/pull/3380) - [@&#8203;gtronset](https://github.com/gtronset) made their first contribution in [#&#8203;3369](https://github.com/rommapp/romm/pull/3369) - [@&#8203;VewDev](https://github.com/VewDev) made their first contribution in [#&#8203;3443](https://github.com/rommapp/romm/pull/3443) **Full Changelog**: <https://github.com/rommapp/romm/compare/4.8.1...4.9.0-beta.1> ### [`v4.8.1`](https://github.com/rommapp/romm/releases/tag/4.8.1) [Compare Source](https://github.com/rommapp/romm/compare/4.8.0...4.8.1) #### What's Changed - make loading per-platform stats opt-in so homepage doesn't fetch them by [@&#8203;cciollaro](https://github.com/cciollaro) in [#&#8203;3158](https://github.com/rommapp/romm/pull/3158) - fix: correct ZX Spectrum +3 ROM hashes in known\_bios\_files.json by [@&#8203;Abdess](https://github.com/Abdess) in [#&#8203;3191](https://github.com/rommapp/romm/pull/3191) - Return link for romm-mobile app to README.md by [@&#8203;milktoastrat](https://github.com/milktoastrat) in [#&#8203;3207](https://github.com/rommapp/romm/pull/3207) - Add outbound HTTP proxy support for backend requests by [@&#8203;dafal](https://github.com/dafal) in [#&#8203;3189](https://github.com/rommapp/romm/pull/3189) - chore(deps): bump lodash from 4.17.23 to 4.18.1 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3212](https://github.com/rommapp/romm/pull/3212) - 4.8 hotfixes by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3213](https://github.com/rommapp/romm/pull/3213) - Fix 500 on `/api/tasks/status` after `cleanup_missing_roms` task completes by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3214](https://github.com/rommapp/romm/pull/3214) - Fix registration invite links losing token on external redirect by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3215](https://github.com/rommapp/romm/pull/3215) - fix: correctly delete nested (subdirectory) ROMs from filesystem by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3216](https://github.com/rommapp/romm/pull/3216) - Fix GET /api/tasks/status 500 on expired job TTL (NoSuchJobError) by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3217](https://github.com/rommapp/romm/pull/3217) #### New Contributors - [@&#8203;Abdess](https://github.com/Abdess) made their first contribution in [#&#8203;3191](https://github.com/rommapp/romm/pull/3191) - [@&#8203;dafal](https://github.com/dafal) made their first contribution in [#&#8203;3189](https://github.com/rommapp/romm/pull/3189) **Full Changelog**: <https://github.com/rommapp/romm/compare/4.8.0...4.8.1> ### [`v4.8.0`](https://github.com/rommapp/romm/releases/tag/4.8.0) [Compare Source](https://github.com/rommapp/romm/compare/4.7.0...4.8.0) #### Highlights ##### 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. [#&#8203;3114](https://github.com/rommapp/romm/issues/3114) | <img width="1049" height="683" alt="Screenshot 2026-03-13 at 9 15 48 PM" src="https://github.com/user-attachments/assets/809264d6-04b0-4ecb-8d12-0f72edc9d8c8" /> | <img width="577" height="451" alt="Screenshot 2026-03-13 at 9 25 26 PM" src="https://github.com/user-attachments/assets/8477ab18-79cf-448c-a28e-6c18508319e3" /> | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ##### Chunked uploads Goodbye failed uploads and incessant timeouts! ROMs will now upload in smaller chunks, allowing for more reliable transfers even on spotty connections. [#&#8203;3076](https://github.com/rommapp/romm/issues/3076) <img width="363" height="118" alt="Screenshot 2026-03-13 at 9 17 24 PM" src="https://github.com/user-attachments/assets/be622a83-cfcd-4368-8ab9-7cdbb25c5ca5" /> ##### 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. [#&#8203;2922](https://github.com/rommapp/romm/issues/2922) <img width="822" height="374" alt="Screenshot 2026-03-13 at 9 26 29 PM" src="https://github.com/user-attachments/assets/738c22af-9502-4a42-b7e0-d5b676bd0bfb" /> #### Minor changes * Add config option to use local video paths in gamelist.xml export by @&#8203;JamieeBond in https://github.com/rommapp/romm/pull/3082 * Add additional cover styles for boxart to prevent cropping by @&#8203;Drarox in https://github.com/rommapp/romm/pull/3060 * Fetch games on search view mount and reset search state on input clear by @&#8203;zurdi15 in https://github.com/rommapp/romm/pull/3080 * Add `video_normalized` media type option for ScreenScraper scans by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3088 * Scrape and store age rating data from ScreenScraper.fr by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3089 * Make invite token expiration configurable by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3094 * Click to zoom game cover image by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3093 * Add more platforms to cover styles by @&#8203;Drarox in https://github.com/rommapp/romm/pull/3098 * Show filtered ROM count in the gallery AppBar and filter drawer by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3097 * Show firmware count in scan results to improve BIOS detection discoverability by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3111 * Per-platform metadata coverage and region breakdown to server stats by @&#8203;cciollaro in https://github.com/rommapp/romm/pull/3110 * Use PICO-8 built-in cover art from .p8.png cartridge files by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3119 * Auto-update game status from RetroAchievements award kind during progress sync by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3118 * Add Bulgarian (bg_BG) translation by @&#8203;DenislavDenev in https://github.com/rommapp/romm/pull/3159 #### Fixes * Fix platform aspect ratio not applying in gallery view by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3083 * Fix metadata IDs not persisting when handler is disabled or game not found by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3085 * Hack for natural sorting of ROMs by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3086 * Always sub dash with colon for launchbox matching by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3090 * Fix 500 error when loading platforms with ROMs whose filenames start with region tags by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3091 * Fix M3U generation to exclude raw .bin tracks when .cue files are present by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3100 * Filesystem watcher and scheduled scan skip when no metadata sources configured by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3106 * Replace deep watch with computed to reduce reactivity overhead by @&#8203;cciollaro in https://github.com/rommapp/romm/pull/3104 * Add missing platforms to playable game filter by @&#8203;Bergbok in https://github.com/rommapp/romm/pull/3121 * Default to querying all roms by @&#8203;camhorn in https://github.com/rommapp/romm/pull/3122 * Remove cover image card bevel by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3131 * Auto-select firmware when only one option is available by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3150 * Fix IntegrityError when updating favourites after ROM rescan by @&#8203;Copilot in https://github.com/rommapp/romm/pull/3166 * Fix mod_zip UTF-8 filename handling for non-ASCII downloads by @&#8203;tmgast in https://github.com/rommapp/romm/pull/3171 #### Other changes * Typed API form fields by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3036 * Fix OAuth token expiry and implement refresh token rotation by @&#8203;HydroSulphide in https://github.com/rommapp/romm/pull/3102 * Add property for path_video and refactor places which use similar logic by @&#8203;JamieeBond in https://github.com/rommapp/romm/pull/3116 * Move "Clean up All" missing ROMs deletion to background task by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3109 * Allow partial updates to ROM user props via typed payload schema by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3124 * Switch ACCESS_TOKEN_EXPIRE_MINUTES to SECONDS by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3096 * Update RAHasher to version 1.8.3 and add Wii platform support by @&#8203;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 @&#8203;gantoine in https://github.com/rommapp/romm/pull/3099 * Fix OIDC login role downgrading for users without claims by @&#8203;pacnpal in https://github.com/rommapp/romm/pull/3103 * Implement OIDC RP-Initiated Logout (end-session endpoint) by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3107 * Make OAuth token expiry configurable via env vars by @&#8203;HydroSulphide in https://github.com/rommapp/romm/pull/3126 * Remove Non-Argosy Android app references from README by @&#8203;milktoastrat in https://github.com/rommapp/romm/pull/3130 * Lockdown package installs by @&#8203;gantoine in https://github.com/rommapp/romm/pull/3203 * Bump authlib from 1.6.6 to 1.6.7 by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3070 * Bump tar from 7.5.9 to 7.5.10 in /frontend by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3075 * Bump joserfc from 1.3.5 to 1.6.3 by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3064 * Bump tornado from 6.5.1 to 6.5.5 by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3123 * chore(deps): bump authlib from 1.6.7 to 1.6.9 by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3138 * chore(deps): bump memray from 1.17.2 to 1.19.2 by @&#8203;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 @&#8203;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 @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3146 * chore(deps-dev): bump picomatch from 2.3.1 to 2.3.2 in /frontend by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3177 * chore(deps): bump requests from 2.32.4 to 2.33.0 by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3186 * chore(deps-dev): bump handlebars from 4.7.8 to 4.7.9 in /frontend by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3188 * chore(deps): bump cryptography from 46.0.5 to 46.0.6 by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3196 * chore(deps): bump pygments from 2.19.2 to 2.20.0 by @&#8203;dependabot[bot] in https://github.com/rommapp/romm/pull/3199 > \[!NOTE] > **Environment Variables** > > `UPLOAD_TIMEOUT` has been removed in favour of chunked uploads > `OAUTH_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 endpoint > `OIDC_RP_INITIATED_LOGOUT`: Enable RP-initiated logout flow (default `false`) > `OIDC_END_SESSION_ENDPOINT`: OIDC end-session endpoint override URL #### New Contributors - [@&#8203;gravelfreeman](https://github.com/gravelfreeman) made their first contribution in [#&#8203;2922](https://github.com/rommapp/romm/pull/2922) - [@&#8203;Drarox](https://github.com/Drarox) made their first contribution in [#&#8203;3060](https://github.com/rommapp/romm/pull/3060) - [@&#8203;alanfrigo](https://github.com/alanfrigo) made their first contribution in [#&#8203;3076](https://github.com/rommapp/romm/pull/3076) - [@&#8203;pacnpal](https://github.com/pacnpal) made their first contribution in [#&#8203;3103](https://github.com/rommapp/romm/pull/3103) - [@&#8203;cciollaro](https://github.com/cciollaro) made their first contribution in [#&#8203;3104](https://github.com/rommapp/romm/pull/3104) - [@&#8203;HydroSulphide](https://github.com/HydroSulphide) made their first contribution in [#&#8203;3102](https://github.com/rommapp/romm/pull/3102) - [@&#8203;Bergbok](https://github.com/Bergbok) made their first contribution in [#&#8203;3121](https://github.com/rommapp/romm/pull/3121) **Full Changelog**: <https://github.com/rommapp/romm/compare/4.7.0...4.8.0> ### [`v4.7.0`](https://github.com/rommapp/romm/releases/tag/4.7.0) [Compare Source](https://github.com/rommapp/romm/compare/4.6.1...4.7.0) #### Highlights ##### Auto-export `gamelist.xml` Automatically generate an ES-DE compatible `gamelist.xml` file during scans by enabling the option in your `config.yml`. This will place the new `gamelist.xml` file within the platform folder for selected/discovered platforms. ```yaml scan: export_gamelist: true ``` [@&#8203;ItzCobaltboy](https://github.com/ItzCobaltboy) in [#&#8203;2987](https://github.com/rommapp/romm/issues/2987) ##### Device-based save synchronization Thanks to [@&#8203;tmgast](https://github.com/tmgast), we've laid the ground work for device-based save synchronization to enable multi-device save management, as defined in [RFC-0001](https://github.com/rommapp/romm/discussions/2199#discussioncomment-14450967). Devices (handhelds, PCs, etc.) can register with the server and track which saves they've synced, enabling conflict detection when a device tries to upload stale data. Note that this is **purely foundational work** to set up an initial structure and API implementation and in intended for third-party developers. [#&#8203;2917](https://github.com/rommapp/romm/issues/2917) #### Minor changes - Add support for [ScummVM shortnames](https://scummvm.org/compatibility/2.9.1/) by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2957](https://github.com/rommapp/romm/pull/2957) - Add `OIDC_AUTOLOGIN=true` env var to automatically login using OIDC by [@&#8203;pR0Ps](https://github.com/pR0Ps) in [#&#8203;2969](https://github.com/rommapp/romm/pull/2969) - Enable keyboard lock in emulatorjs by [@&#8203;matthewturk](https://github.com/matthewturk) in [#&#8203;3043](https://github.com/rommapp/romm/pull/3043) - Group games with same name (but different tags) as versions/siblings by [@&#8203;zeroSteiner](https://github.com/zeroSteiner) in [#&#8203;2984](https://github.com/rommapp/romm/pull/2984) - Search by mutliple keywords with `|` by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2996](https://github.com/rommapp/romm/pull/2996) - `zelda|mario|sonic` would show all games with `zelda`, `mario` OR `sonic` in the name - New `PKGJ` feed endpoints in `.tsv` format by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2986](https://github.com/rommapp/romm/pull/2986) - PSP games: `GET /api/feeds/pkgj/psp/games` - PSP DLC files: `GET /api/feeds/pkgj/psp/dlc` - PS Vita games: `GET /api/feeds/pkgj/psvita/games` - PS Vita DLC files: `GET /api/feeds/pkgj/psvita/dlc` - PSX games: `GET /api/feeds/pkgj/psx/games` #### Fixes - \[HOTFIX] Fix all roms displayed in all platforms by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2948](https://github.com/rommapp/romm/pull/2948) - \[ROMM-2956] Fix refresh on card edit by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2962](https://github.com/rommapp/romm/pull/2962) - Invalid category values fix by [@&#8203;LoneAngelFayt](https://github.com/LoneAngelFayt) in [#&#8203;2979](https://github.com/rommapp/romm/pull/2979) - Filter keys now plural by [@&#8203;camhorn](https://github.com/camhorn) in [#&#8203;2982](https://github.com/rommapp/romm/pull/2982) - \[ROMM-2991] Allow set completion to 0 by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2995](https://github.com/rommapp/romm/pull/2995) - \[ROMM-2997] Fix HLTB search term fetching by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2998](https://github.com/rommapp/romm/pull/2998) - \[ROMM-2983] Fix negative filter by verified by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3000](https://github.com/rommapp/romm/pull/3000) - \[ROMM-2976] Fix no games displayed for status filter by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3001](https://github.com/rommapp/romm/pull/3001) - \[ROMM-2974] Stop displaying public collections in "add to collection" dialog the user doesn't own by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3002](https://github.com/rommapp/romm/pull/3002) - \[ROMM-2972] Fix /props returning stale data by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3003](https://github.com/rommapp/romm/pull/3003) - \[ROMM-2965] Check file count for file select menu emulatorjs by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3005](https://github.com/rommapp/romm/pull/3005) - \[ROMM-2943] Match scanned platform based on fs\_slug by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3008](https://github.com/rommapp/romm/pull/3008) - \[ROMM-3020] Fix split collection custom artowrk by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3028](https://github.com/rommapp/romm/pull/3028) - \[ROMM-3025] Fix collections with custom art failing by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3027](https://github.com/rommapp/romm/pull/3027) - \[ROMM-3026] Region/language shortcodes should be case sensitive by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3035](https://github.com/rommapp/romm/pull/3035) - \[ROMM-3031] Fix screenshot property on save/state by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3037](https://github.com/rommapp/romm/pull/3037) - Remove ICE server list from config response when unauthenticated by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3054](https://github.com/rommapp/romm/pull/3054) #### Other changes - New endpoints to fetch all IDs by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2921](https://github.com/rommapp/romm/pull/2921) - Example config ES-DE update/fix by [@&#8203;ricardovdheijden](https://github.com/ricardovdheijden) in [#&#8203;2963](https://github.com/rommapp/romm/pull/2963) - Use vite copy plugin to load rom-patcher by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2964](https://github.com/rommapp/romm/pull/2964) - Skip opentelemetry-instrument when OTEL is disabled by [@&#8203;Wadenschwinger](https://github.com/Wadenschwinger) in [#&#8203;2968](https://github.com/rommapp/romm/pull/2968) - Update uses of roms to ROMs by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3009](https://github.com/rommapp/romm/pull/3009) - \[ROMM-2927] Add default folders to config manager by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3007](https://github.com/rommapp/romm/pull/3007) - \[AIKIDO-13126609] Raise HTTP exception if device not found by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3030](https://github.com/rommapp/romm/pull/3030) - \[AIKIDO-13126604] Stream file when building file hash by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3029](https://github.com/rommapp/romm/pull/3029) - Ugprade some docker base images by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3032](https://github.com/rommapp/romm/pull/3032) - Run formatter on alembic files by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3034](https://github.com/rommapp/romm/pull/3034) - Add Rom.ra\_hash and RomFile.ra\_hash fields to API by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3019](https://github.com/rommapp/romm/pull/3019) - Add platforms icons for neogeox, neogeoaes, appleii-gs and vsmile by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;3017](https://github.com/rommapp/romm/pull/3017) - Fix Grout author and add GH profile links by [@&#8203;BrandonKowalski](https://github.com/BrandonKowalski) in [#&#8203;3046](https://github.com/rommapp/romm/pull/3046) - Bump tar from 7.5.6 to 7.5.9 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2954](https://github.com/rommapp/romm/pull/2954) and [#&#8203;3039](https://github.com/rommapp/romm/pull/3039) - Bump protobuf from 6.31.1 to 6.33.5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2981](https://github.com/rommapp/romm/pull/2981) - Bump cryptography from 45.0.5 to 46.0.5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3013](https://github.com/rommapp/romm/pull/3013) - Bump axios from 1.12.1 to 1.13.5 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3010](https://github.com/rommapp/romm/pull/3010) - Bump pillow from 10.4.0 to 12.1.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3015](https://github.com/rommapp/romm/pull/3015) - Bump markdown-it from 14.1.0 to 14.1.1 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3022](https://github.com/rommapp/romm/pull/3022) - Bump rollup in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3049](https://github.com/rommapp/romm/pull/3049) - Bump minimatch in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3050](https://github.com/rommapp/romm/pull/3050) #### New Contributors - [@&#8203;ricardovdheijden](https://github.com/ricardovdheijden) made their first contribution in [#&#8203;2963](https://github.com/rommapp/romm/pull/2963) - [@&#8203;Wadenschwinger](https://github.com/Wadenschwinger) made their first contribution in [#&#8203;2968](https://github.com/rommapp/romm/pull/2968) - [@&#8203;pR0Ps](https://github.com/pR0Ps) made their first contribution in [#&#8203;2969](https://github.com/rommapp/romm/pull/2969) - [@&#8203;LoneAngelFayt](https://github.com/LoneAngelFayt) made their first contribution in [#&#8203;2979](https://github.com/rommapp/romm/pull/2979) - [@&#8203;camhorn](https://github.com/camhorn) made their first contribution in [#&#8203;2982](https://github.com/rommapp/romm/pull/2982) - [@&#8203;tmgast](https://github.com/tmgast) made their first contribution in [#&#8203;2917](https://github.com/rommapp/romm/pull/2917) - [@&#8203;zeroSteiner](https://github.com/zeroSteiner) made their first contribution in [#&#8203;2984](https://github.com/rommapp/romm/pull/2984) - [@&#8203;ItzCobaltboy](https://github.com/ItzCobaltboy) made their first contribution in [#&#8203;2987](https://github.com/rommapp/romm/pull/2987) - [@&#8203;matthewturk](https://github.com/matthewturk) made their first contribution in [#&#8203;3043](https://github.com/rommapp/romm/pull/3043) **Full Changelog**: <https://github.com/rommapp/romm/compare/4.6.1...4.7.0> ### [`v4.6.1`](https://github.com/rommapp/romm/releases/tag/4.6.1) [Compare Source](https://github.com/rommapp/romm/compare/4.6.0...4.6.1) #### What's Changed - \[HOTFIX] Fix 0063 migration postgres by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2940](https://github.com/rommapp/romm/pull/2940) - Bump python-multipart from 0.0.20 to 0.0.22 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2939](https://github.com/rommapp/romm/pull/2939) - Add workflow to run migrations on PR by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2941](https://github.com/rommapp/romm/pull/2941) - Add match-none-logig entries to locales by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2944](https://github.com/rommapp/romm/pull/2944) **Full Changelog**: <https://github.com/rommapp/romm/compare/4.6.0...4.6.1> ### [`v4.6.0`](https://github.com/rommapp/romm/releases/tag/4.6.0) [Compare Source](https://github.com/rommapp/romm/compare/4.5.0...4.6.0) #### Highlights ##### Additional metadata The edit dialog now allows you to manually set metadata properties that would otherwise only be aggregated from metadata sources, if those metadata sources don't support/populate certain fields. [#&#8203;2848](https://github.com/rommapp/romm/issues/2848) <img width="977" height="489" alt="Screenshot 2026-01-12 at 1 16 34 PM" src="https://github.com/user-attachments/assets/d706a8e8-1e09-403c-ba48-1ca5923476f3" /> ##### Enhance folder structure config We've improved the web interface that lets you configure platform bindings and versions, and excluded files and folders. This change should simplify the process of configuring how library folders are interpreted and what content is ignored during scanning. [#&#8203;2809](https://github.com/rommapp/romm/issues/2809) | <img width="961" height="713" alt="Screenshot 2026-01-12 at 12 25 11 PM" src="https://github.com/user-attachments/assets/00de8734-e2b5-4bca-a450-182ff2229fb7" /> | <img width="964" height="683" alt="Screenshot 2026-01-12 at 12 25 23 PM" src="https://github.com/user-attachments/assets/c1303626-d421-4c8a-939c-825c72db8fe5" /> | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ##### Patcher.js - We're introducing a new ROM patching feature to the app that enables your admins and editors to apply various types of patches to ROM files. At this time both ROM and patch files must be downloaded locally and re-uploaded via the patcher, with future work planned to patch ROMs directly from your library. [#&#8203;2787](https://github.com/rommapp/romm/issues/2787) <img width="926" height="741" alt="Screenshot 2026-01-12 at 12 25 37 PM" src="https://github.com/user-attachments/assets/7e5b231a-4ed3-4736-9f05-6f28f45c1ddb" /> ##### UI settings sync UI settings are now synced between devices for every user! These settings do not affect third-party apps, and *any setting* must be changed *at least once* for this sync to take effect. [#&#8203;2777](https://github.com/rommapp/romm/issues/2777) ##### BIOS file defaults A default BIOS file can now be specified per emulator core directly in your `config.yml`: ```yaml emulatorjs: settings: mgba: bios_file: gba_bios.bin ``` [#&#8203;2873](https://github.com/rommapp/romm/issues/2873) #### Minor changes - Add library structure management on setup wizard by [@&#8203;zurdi15](https://github.com/zurdi15) [#&#8203;2784](https://github.com/rommapp/romm/issues/2784) - Added player count metadata from SS with display and filter by [@&#8203;DevOldSchool](https://github.com/DevOldSchool) in <https://github.com/rommapp/romm/2872> - Add support for version tag from filename by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2820](https://github.com/rommapp/romm/pull/2820) - Support for multi-value filters by [@&#8203;adamantike](https://github.com/adamantike) in [#&#8203;2411](https://github.com/rommapp/romm/pull/2411) - Allow chd lookups in the hasheous database by [@&#8203;josegonzalez](https://github.com/josegonzalez) in [#&#8203;2866](https://github.com/rommapp/romm/pull/2866) - ROMs filter endpoint + refactor by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2904](https://github.com/rommapp/romm/pull/2904) - Add NONE support for filter logic operators by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2933](https://github.com/rommapp/romm/pull/2933) - Update platform display in Scan.vue to use display\_name and enhance item details by [@&#8203;zurdi15](https://github.com/zurdi15) in [#&#8203;2935](https://github.com/rommapp/romm/pull/2935) #### Fixes - Fix YAML indentation in netplay section of config example file by [@&#8203;Zuko](https://github.com/Zuko) in [#&#8203;2812](https://github.com/rommapp/romm/pull/2812) - \[HOTFIX] Fix scrolling load more in gallery views by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2813](https://github.com/rommapp/romm/pull/2813) - \[HOTFIX] Multi roms should only consider top-level files by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2821](https://github.com/rommapp/romm/pull/2821) - Notes flag by [@&#8203;zurdi15](https://github.com/zurdi15) in [#&#8203;2817](https://github.com/rommapp/romm/pull/2817) - \[ROMM-2824] Also replace - with : for edge cases in HLTB and LB handlers by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2827](https://github.com/rommapp/romm/pull/2827) - \[ROMM-2844] Use webp images for game covers in list view by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2845](https://github.com/rommapp/romm/pull/2845) - \[ROMM-2835] Fix appearance of chevron screenshot buttons by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2846](https://github.com/rommapp/romm/pull/2846) - \[ROMM-2833] Fix using default locales in igdb handler by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2847](https://github.com/rommapp/romm/pull/2847) - \[ROMM-2796] Add check to overwrite media assets by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2851](https://github.com/rommapp/romm/pull/2851) - Allow deleting single chip in additional metadata by [@&#8203;SaraVieira](https://github.com/SaraVieira) in [#&#8203;2861](https://github.com/rommapp/romm/pull/2861) - \[ROMM-2853] Update rom\_file.category column enum by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2860](https://github.com/rommapp/romm/pull/2860) - \[HOTFIX] Dont schedule tasks if already queued by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2885](https://github.com/rommapp/romm/pull/2885) - \[ROMM-2808] Stop filtering nsfw games from search results by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2852](https://github.com/rommapp/romm/pull/2852) - \[ROMM-2856] Use platform slug to fetch feed games by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2862](https://github.com/rommapp/romm/pull/2862) - \[HOTFIX] Check if gamelist metadata source selected before populating cache by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2865](https://github.com/rommapp/romm/pull/2865) - \[ROMM-2889] Add media to update\_config\_file by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2897](https://github.com/rommapp/romm/pull/2897) - \[HOTFIX] Rename selected\_statuses to statuses by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2902](https://github.com/rommapp/romm/pull/2902) - \[HOTFIX] Only add ? to qs on download path by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2907](https://github.com/rommapp/romm/pull/2907) - \[ROMM-2874] Feature/updated-after-query-param by [@&#8203;BrandonKowalski](https://github.com/BrandonKowalski) in [#&#8203;2898](https://github.com/rommapp/romm/pull/2898) - \[ROMM-2906] Fix icon color light mode by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2913](https://github.com/rommapp/romm/pull/2913) - \[HOTFIX] Remove `files` from model\_dump in scan by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2914](https://github.com/rommapp/romm/pull/2914) - \[ROMM-2891] Empty String Flashpoint ID by [@&#8203;BrandonKowalski](https://github.com/BrandonKowalski) in [#&#8203;2918](https://github.com/rommapp/romm/pull/2918) #### Other changes - Improve performance of queries on roms table by [@&#8203;MaienM](https://github.com/MaienM) in [#&#8203;2811](https://github.com/rommapp/romm/pull/2811) - Add CPS1-3 and TIC-80 by [@&#8203;SaraVieira](https://github.com/SaraVieira) in [#&#8203;2828](https://github.com/rommapp/romm/pull/2828) - Update docker compose variables by [@&#8203;SaraVieira](https://github.com/SaraVieira) in [#&#8203;2849](https://github.com/rommapp/romm/pull/2849) - Configure and run deptry by [@&#8203;adamantike](https://github.com/adamantike) in [#&#8203;2859](https://github.com/rommapp/romm/pull/2859) - \[HOTFIX] Set metadata fields as nullable by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2864](https://github.com/rommapp/romm/pull/2864) - \[ROMM-2877] Drop index on rom file content by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2878](https://github.com/rommapp/romm/pull/2878) - Add `WEB_SERVER_GUNICORN_WAIT` env var for slow systems by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2887](https://github.com/rommapp/romm/pull/2887) - Collection updated after query param by [@&#8203;BrandonKowalski](https://github.com/BrandonKowalski) in [#&#8203;2915](https://github.com/rommapp/romm/pull/2915) - Decompress 7z archives on the fly rather than extracting to disk by [@&#8203;Delgan](https://github.com/Delgan) in [#&#8203;2931](https://github.com/rommapp/romm/pull/2931) - Add CHEAT to RomFile category types by [@&#8203;gantoine](https://github.com/gantoine) in [#&#8203;2937](https://github.com/rommapp/romm/pull/2937) - Bump tar from 7.4.3 to 7.5.3 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2908](https://github.com/rommapp/romm/pull/2908) - Bump authlib from 1.6.5 to 1.6.6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2909](https://github.com/rommapp/romm/pull/2909) - Bump urllib3 from 2.6.2 to 2.6.3 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2910](https://github.com/rommapp/romm/pull/2910) - Bump aiohttp from 3.12.14 to 3.13.3 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2911](https://github.com/rommapp/romm/pull/2911) - Bump python-socketio from 5.11.1 to 5.14.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2912](https://github.com/rommapp/romm/pull/2912) - Bump tar from 7.5.3 to 7.5.6 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2929](https://github.com/rommapp/romm/pull/2929) - Bump lodash from 4.17.21 to 4.17.23 in /frontend by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2932](https://github.com/rommapp/romm/pull/2932) #### New Contributors - [@&#8203;Zuko](https://github.com/Zuko) made their first contribution in [#&#8203;2812](https://github.com/rommapp/romm/pull/2812) - [@&#8203;josegonzalez](https://github.com/josegonzalez) made their first contribution in [#&#8203;2866](https://github.com/rommapp/romm/pull/2866) - [@&#8203;DevOldSchool](https://github.com/DevOldSchool) made their first contribution in [#&#8203;2872](https://github.com/rommapp/romm/pull/2872) - [@&#8203;BrandonKowalski](https://github.com/BrandonKowalski) made their first contribution in [#&#8203;2898](https://github.com/rommapp/romm/pull/2898) - [@&#8203;Delgan](https://github.com/Delgan) made their first contribution in [#&#8203;2931](https://github.com/rommapp/romm/pull/2931) **Full Changelog**: <https://github.com/rommapp/romm/compare/4.5.0...4.6.0> ### [`v4.5.0`](https://github.com/rommapp/romm/releases/tag/4.5.0) [Compare Source](https://github.com/rommapp/romm/compare/4.4.1...4.5.0) ### Highlights #### Netplay The incredibly smart and beautiful people over at the [EmulatorJS](https://emulatorjs.org/) 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`: ```yaml 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.** [#&#8203;2728](https://github.com/rommapp/romm/issues/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. [#&#8203;2665](https://github.com/rommapp/romm/issues/2665) <img width="1478" height="679" alt="Screenshot 2025-12-10 at 3 52 36 PM" src="https://github.com/user-attachments/assets/ccc5b16e-d845-4b80-8c2a-cc04183d3f01" /> #### 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`. [#&#8203;2700](https://github.com/rommapp/romm/issues/2700) ```yaml 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) ``` <img width="996" height="541" alt="516566290-2c43d67e-f55e-400b-8a89-a23e25d1ef36" src="https://github.com/user-attachments/assets/4b4d97c2-43e3-4c7a-aed0-bd9dfd689cb3" /> #### Minor changes * Query parameter handling for tabs and sub-tabs by @&#8203;zurdi15 in https://github.com/rommapp/romm/pull/2695 * Redirect related games to RomM entry if exists by @&#8203;zurdi15 in https://github.com/rommapp/romm/pull/2729 * Make hashing during scan optional with `filesystem.skip_hash_calculation` in `config.yml` by @&#8203;zurdi15 in https://github.com/rommapp/romm/pull/2703 * Console mode locale by @&#8203;Slabak007 in https://github.com/rommapp/romm/pull/2710 * Add translations for firmware management dialogs by @&#8203;tvdu29 in https://github.com/rommapp/romm/pull/2714 * Hungarian translation added (finish, 12/12 files done). by @&#8203;Soderes in https://github.com/rommapp/romm/pull/2718 * Improved save/state layout by @&#8203;zurdi15 in https://github.com/rommapp/romm/pull/2779 * [ROMM-2697] Use colocated es-de folders to import art not present in gamelist.xml by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2766 #### Fixes * Czech language pluralization by @&#8203;Slabak007 in https://github.com/rommapp/romm/pull/2701 * Fixed link to documentation in filestructure error by @&#8203;Descent098 in https://github.com/rommapp/romm/pull/2713 * Fix French translations and add locale-aware date formatting by @&#8203;tvdu29 in https://github.com/rommapp/romm/pull/2740 * Invalidate invite token before creating user by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2715 * Fix kekatsu tsv format by @&#8203;phramusca in https://github.com/rommapp/romm/pull/2719 * Update /gamelist/export to generate a correct Batocera gamelist.xml by @&#8203;vargash in https://github.com/rommapp/romm/pull/2720 * Migration 0057 fix by @&#8203;Tux00-repo in https://github.com/rommapp/romm/pull/2739 * [ROMM-2746] Drop + from filenames on update by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2752 * [ROMM-2748] Add `OIDC_USERNAME_ATTRIBUTE` by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2755 * [ROMM-2721] Fix saving user without password by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2754 * [ROMM-2722] Fix matching special chars in ssfr by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2753 * Catch RomsNotFoundException in scan file precalculation by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2756 * [ROMM-2685] Fix updating ssfr ID art assets by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2758 * Strip keys from ssfr api query params by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2778 * Change scan type to QUICK for scheduled library scans by @&#8203;zurdi15 in https://github.com/rommapp/romm/pull/2782 * [HOTFIX] Fetch security token for HLTB by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2772 * [ROMM-2774] Remove unsupported language tags by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2775 * [ROMM-2791] Stop filtering out None values in order_by filter by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2804 * [ROMM-2806] Fix arcade ssid in screenscraper by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2807 * Game details view little fixes by @&#8203;zurdi15 in https://github.com/rommapp/romm/pull/2803 #### Behind-the-scenes * Cache parsed gamelist.xml files on each scan by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2699 * Add redis-backed session middleware by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2716 * Fix scan_rom tests by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2731 * Move merged_screenshots and merged_ra_metadata to simple RomSchema by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2744 * [ROMM-2668] Speedup feeds endpoint by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2757 * [ROMM-2762] Add get_rom_by_hash endpoint by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2764 * [ROMM-2763] Add MSX2 to ssfr platforms list by @&#8203;gantoine in https://github.com/rommapp/romm/pull/2765 * Add OpenBOR metadata entry for screenscraper by @&#8203;ronzano in https://github.com/rommapp/romm/pull/2760 #### New Contributors * @&#8203;Descent098 made their first contribution in https://github.com/rommapp/romm/pull/2713 * @&#8203;phramusca made their first contribution in https://github.com/rommapp/romm/pull/2719 * @&#8203;vargash made their first contribution in https://github.com/rommapp/romm/pull/2720 * @&#8203;Soderes made their first contribution in https://github.com/rommapp/romm/pull/2718 * @&#8203;Tux00-repo made their first contribution in https://github.com/rommapp/romm/pull/2739 * @&#8203;ronzano made their first contribution in https://github.com/rommapp/romm/pull/2760 **Full Changelog**: <https://github.com/rommapp/romm/compare/4.4.1...4.5.0> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI1My4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
renovate-bot changed title from Update ghcr.io/rommapp/romm Docker tag to v5 to chore(deps): update ghcr.io/rommapp/romm docker tag to v5 2026-07-17 23:16:01 +00:00
renovate-bot changed title from chore(deps): update ghcr.io/rommapp/romm docker tag to v5 to Update ghcr.io/rommapp/romm Docker tag to v5 2026-07-21 01:12:08 +00:00
renovate-bot changed title from Update ghcr.io/rommapp/romm Docker tag to v5 to chore(deps): update ghcr.io/rommapp/romm docker tag to v5 2026-07-21 02:12:05 +00:00
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/ghcr.io-rommapp-romm-5.x:renovate/ghcr.io-rommapp-romm-5.x
git switch renovate/ghcr.io-rommapp-romm-5.x

Merge

Merge the changes and update on Forgejo.
git switch main
git merge --no-ff renovate/ghcr.io-rommapp-romm-5.x
git switch renovate/ghcr.io-rommapp-romm-5.x
git rebase main
git switch main
git merge --ff-only renovate/ghcr.io-rommapp-romm-5.x
git switch renovate/ghcr.io-rommapp-romm-5.x
git rebase main
git switch main
git merge --no-ff renovate/ghcr.io-rommapp-romm-5.x
git switch main
git merge --squash renovate/ghcr.io-rommapp-romm-5.x
git switch main
git merge --ff-only renovate/ghcr.io-rommapp-romm-5.x
git switch main
git merge renovate/ghcr.io-rommapp-romm-5.x
git push origin main
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ops/homelab!91
No description provided.