Welcome to v3.8.0
! I know it's been a few cold winter months since our last release, but we've been cooking up some sizzling hot features for you to enjoy!
Caution
If you're upgrading from v3.6.x
or earlier, you first need to upgrade to v3.7.3
, run a Quick scan and wait until it completes.
If you're running v.3.7.x
, run a Quick scan and wait until it completes before upgrading.
Failure to do so could leave your instance in a broken state!
Major Changes
Screenscraper.fr integration
We've added support for Screenscraper.fr as a metadata provider, which provides high-quality metadata and artwork for your library. This is a great alternative to MobyGames (which is now a paid service), and can be used in conjunction with IGDB. You can enable SSFR by creating an account and setting SCREENSCRAPER_USER
and SCREENSCRAPER_PASSWORD
in the environment variables. [#1416]
Autogenerated collections
RomM will now autogenerate collections of games based on metadata fields like genre, franchise, developer/company and game mode. These will appear on your homepage and the collections panel, and can be changed or disabled under UI settings. [#1562]

muOS app
This is the first release since we launched the official muOS app, and we're taking this opportunity to mention it here. muOS is an amazing alternative OS for Anbernic devices, and our app lets you connect directly to your RomM server and fetch games.
Kiosk mode
Kiosk mode locks down your RomM server to a read-only mode, perfect for public displays or kiosks. Show off your collection without worrying about accidental changes, or lets others download/play games without creating user accounts. Enable it by setting the environment variables KIOSK_MODE
to true
, as we've done on our demo site. And yes, you can still login to your own account by navigating directly to /login
in the URL bar. [#1586]
EmulatorJS updates
Autosaving of save and state files to the server has been totally rewritten, and is now much more reliable when playing in the browser with EmulatorJS. We've also added support for multi-disk games, so you can now play PS1 games like Final Fantasy VII without running out of memory. [#1497]
File hashing refactor
We've changed the way file hashes are calculated for multi-file games, finally allowing us to match games by hash in future releases using .DAT files (TOSEC, No-Intro). We plan to start work (soon™) on an integration with Hasheous, a public cache and proxy for metadata sources like IGDB that also provides hash-based game matching and lookup. [#1369]
Deeply nested folders
Scans will now pickup files nested deeply within game folders, and handle them correctly on download, and when playing with EmulatorJS. This change also adds explicit support for the following subfolders: dlc
, hack
, manual
, patch
, update
, mod
, demo
, translation
, and prototype
, and any content located in these subfolders will be properly labeled as such in the UI. Check out the updated folder structure example in the README.
UI updates
We've reworked the UI to be more modern, responsive and user-friendly. This includes a new login page, new fallback images for missing cover art, and transition effects when navigating between games. [#1568]
New Features
- Add refresh metadata functionality to rom admin menu by @zurdi15 in #1564
- Update to virtual data tables by @zurdi15 in #1563
- Added remove and add collection to rom admin menu by @zurdi15 in #1578
- PS5 icon by @Casuallynoted in #1581
- Include Roboto font in repo by @gantoine in #1585
- Support multi-disk downloads for muOS by @gantoine in #1602
- Add support for WEB_CONCURRENCY environment variable by @adamantike in #1633
- Use nginx templates to allow for environment variable usage by @adamantike in #1632
- Allow configuring app port using ROMM_PORT environment variable by @adamantike in #1634
- Added Systematic Icon Set by @baxysquare in #1639
- Update Nintendo 64DD slug from nintendo-64dd to 64dd by @gantoine in #1664
- Add logos for more OIDC providers by @adamantike in #1689
- Implement View Transitions for card covers by @gantoine in #1685
Fixes
- Fix playing multi disc games in emujs by @gantoine in #1559
- Fix removing sibling roms from Recently Added. by @ItsKaa in #1561
- Improve error handling for IGDB connection issues by @zurdi15 in #1565
- Case-insensitive username and email check by @adamantike in #1492
- MySQL json_contains Error by Converting Non-String Values to JSON Strings by @jamiecounsell in #1523
- Send platform as int in scan message by @adamantike in #1569
- Adapt new migrations to supported database engines by @adamantike in #1570
- Skip hash calc on file not found/permission erros by @gantoine in #1590
- Simpler rom response object by @gantoine in #1591
- Set prefix and tags to API routers by @adamantike in #1592
- More bios hashes from retrodeck team by @gantoine in #1599
- Update code generated by openapi-typescript-codegen by @adamantike in #1593
- Remove single forward-slash endpoints by @gantoine in #1600
- Refactor collection components and update translations for consistency by @zurdi15 in #1605
- Fix migration 0034 compatibility with MySQL by @adamantike in #1609
- Reset stores on logout + move hash calc out of background on scan by @gantoine in #1610
- Support custom icons for platform versions by @gantoine in #1617
- Fix partial metadata scan by @zurdi15 in #1625
- Fix remove from collection dialog by @zurdi15 in #1627
- Migrate IGDB API fields to new version by @zurdi15 in #1629
- Use FRONTEND_RESOURCES_PATH setting in missing places by @adamantike in #1631
- Fix nginx alias_traversal warning by @adamantike in #1635
- Update config.batocera-retrobat.yml by @grasspuddle in #1640
- Support for assets when using custom ROMM_BASE_PATH by @adamantike in #1636
- Build m3u file if not DEV_MODE by @zurdi15 in #1641
- Fix nginx configuration for library access when ROMM_BASE_PATH is set by @adamantike in #1643
- Make nginx configuration files writable by everyone by @adamantike in #1649
- Strip environment variables related to third-party credentials by @adamantike in #1650
- Calculate gl support once on load by @gantoine in #1651
- Fix download for single-file games in folder by @adamantike in #1652
- Catch JSON parse errors during scan by @gantoine in #1661
- Rename nintendo-64dd.ico to 64dd.ico by @Casuallynoted in #1677
- Sort rom files (and othe pydantic fields) by @gantoine in #1676
Dependency Updates
- Purge unused js packages by @gantoine
- Bump md-editor-v3 from 4.21.3 to 5.3.2 in /frontend
- Bump pinia from 2.3.0 to 3.0.1 in /frontend
- Bump vue-i18n from 10.0.5 to 11.1.1 in /frontend
- Bump typescript-eslint from 7.18.0 to 8.25.0 in /frontend
- Bump eslint from 8.57.1 to 9.21.0 in /frontend
- Bump vuetify from 3.7.7 to 3.7.9 in /frontend
- Bump vite from 6.0.11 to 6.1.1 in /frontend
- Bump globals from 15.14.0 to 16.0.0 in /frontend
- Bump nanoid from 5.0.9 to 5.1.2 in /frontend
- Bump cronstrue from 2.54.0 to 2.55.0 in /frontend
- Bump axios from 1.7.9 to 1.8.1 in /frontend
- Bump eslint from 9.20.0 to 9.20.1 in /frontend
- Bump @eslint/js from 8.57.1 to 9.20.0 in /frontend
- Bump @types/node from 20.17.12 to 22.13.8 in /frontend
- Bump @types/lodash from 4.17.14 to 4.17.15 in /frontend
- Bump @vue/tsconfig from 0.5.1 to 0.7.0 in /frontend
- Bump @eslint/js and @types/eslint__js in /frontent
New Contributors
- @ItsKaa made their first contribution in #1561
- @jamiecounsell made their first contribution in #1523
- @grasspuddle made their first contribution in #1640
- @baxysquare made their first contribution in #1639
Full Changelog: 3.7.3...3.8.0