# RomM

RomM is to a ROM collection what Jellyfin or Plex is to a video collection: you point it at a directory tree of game files, it scans them, matches each one against online databases, and gives you a web interface for browsing, downloading and — for a good number of systems — playing directly in the browser. It handles multi-disk games, DLC, mods, hacks, patches and manuals as first-class entries rather than stray files, and parses the tag conventions that ROM filenames carry (`(USA)`, `[!]`, and so on) into filters.

## How it works

The server is a Python backend with a Vue web frontend, deployed as a Docker container against a MySQL/MariaDB database. Scanning is a matching problem: a file on disk has to be resolved to a known release, and RomM does that against several metadata providers rather than one. IGDB, ScreenScraper and MobyGames supply the release data across 400+ platforms, SteamGridDB supplies box art and other custom artwork, and RetroAchievements supplies achievement lists and progress. Each provider needs its own API credentials, which is the usual first-run friction.

In-browser play is delegated. EmulatorJS covers the console and arcade cores, RuffleRS covers Flash. Nothing is emulated by RomM itself — it stores the files, resolves the metadata and hands the right blob to the right web player.

Multi-user is built in, with per-user permissions, so you can hand a friend an account with read-only access to part of the library.

## Clients

The web interface is not the only front end, and the client list is a decent proxy for how much traction the project has. The RomM team maintains three: Argosy, a native Android launcher; Grout, which downloads and manages games directly on Linux retro handhelds running Allium, Batocera, Knulli, MinUI, muOS, NextUI, Onion, ROCKNIX, Spruce or TrimUI; and a library plugin for Playnite on Windows. The community has added an iOS app, a RetroArch sync tool, a couple of desktop browsers, a Steam Deck (Decky) syncer, a Switch homebrew NRO and a Discord bot.

Grout is the interesting one for anyone using the handhelds catalogued in [[retrocatalog]] — it turns a self-hosted RomM instance into the download source for a device that otherwise gets loaded by hand over SD card.

## Limitations

Metadata quality is only as good as the providers and the filenames. Scanning issues are common enough that the docs carry a dedicated troubleshooting page, and unusual naming schemes need manual fixing. The provider APIs all require registration, and rate limits apply. Browser play is bounded by what EmulatorJS supports, so the newer and heavier systems in the 400+ platform metadata list are download-only in practice.

The license is AGPL-3.0, which matters if you were planning to build a hosted service on top. RomM does not source games; it manages files you already have.

Repo: [github.com/rommapp/romm](https://github.com/rommapp/romm) — ~11,200 stars, AGPL-3.0, Python. For streaming a modern PC game library instead of managing an emulated one, see [[moonshine]].
