During a scan with large collections, the scan page becomes slow or
unresponsive. The watch on scanningPlatforms with { deep: true } was
firing on every ROM addition, causing Vue to deeply traverse all nested
platform and ROM data each time.
The watch's only job is deciding which panels are open. A panel should
open when a platform first receives ROMs — after that, its open/closed
state doesn't need to change regardless of how many more ROMs arrive.
Replace with a computed that maps each platform to a boolean
(roms.length > 0), so the watch only fires on that one meaningful
transition per platform. The ROM list inside each panel continues to
update reactively as normal — this change only affects the panel
open/close logic.
Note: This PR was written with AI assistance (Claude Code).
Overview
RomM (ROM Manager) allows you to scan, enrich, browse and play your game collection with a clean and responsive interface. With support for multiple platforms, various naming schemes, and custom tags, RomM is a must-have for anyone who plays on emulators.
Features
- Scan and enhance your game library with metadata from IGDB, Screenscraper and MobyGames
- Fetch custom artwork from SteamGridDB
- Display your achievements from Retroachievements
- Metadata available for 400+ platforms
- Play games directly from the browser using EmulatorJS and RuffleRS
- Share your library with friends with limited access and permissions
- Official apps for Playnite, Android and CFWs
- Supports multi-disk games, DLCs, mods, hacks, patches, and manuals
- Parse and filter by tags in filenames
- View, upload, update, and delete games from any modern web browser
Preview
| 🖥 Desktop | 📱 Mobile |
|---|---|
![]() |
![]() |
Installation
To start using RomM, check out the Quick Start Guide in the docs. If you are having issues with RomM, please review the page for troubleshooting steps.
Contributing
To contribute to RomM, please check Contribution Guide.
Community
Here are a few projects maintained by members of our community. Please note that the RomM team does not regularly review their source code.
Mobile
- 🔷 Argosy: Native client for installing and launching games by @tmgast
- romm-ios-app: Native iOS app by @ilyas-hallak
- romm-mobile: Android (and soon iOS) app by @mattsays
- romm-android: Android app by @samwelnella
Desktop
- 🔷 Playnite plugin: Library plugin for Playnite by @gantoine
- RommBrowser: Electron client by @smurflabs
- RetroArch Sync: Sync RetroArch library with RomM by @Covin90
- RomMate: Desktop app for browsing your collection by @brenoprata10
- romm-client: Desktop client by @chaun14
Handhelds
- 🔷 Grout: Download client for muOS and NextUI by @BrandonKowalski
- DeckRommSync: SteamOS downloader and syncer by @PeriBluGaming
- SwitchRomM: Homebrew NRO for Switch by @Shalasere
Other
- romm-comm: Discord bot by @idio-sync
- GGRequestz: Game discovery and request tool by @XTREEMMAK
- Syncthing sync: Small tool to push a Syncthing library to RomM by @amn-96
[🔷] Official first-party app
Join us on Discord, where you can ask questions, submit ideas, get help, showcase your collection, and discuss RomM with other users.
Technical Support
If you have any issues with RomM, please open an issue in this repository.
Financial Support
Consider supporting the development of this project on Open Collective. All funds will be used to cover the costs of hosting, development, and maintenance of RomM.
Our Friends
Here are a few projects that we think you might like:
- EmulatorJS: An embeddable, browser-based emulator
- RetroDECK: Retro gaming on SteamOS and Linux
- ES-DE Frontend: Emulator frontend for Linux, macOS and Windows
- Gaseous: Another ROM manager with web-based emulator
- Retrom: A centralized game library/collection management service
- Drop: Steam-like experience for DRM-free games
- LanCommander: Digital game platform for PC games
- Steam ROM Manager: An app for managing ROMs in Steam




