RomM is a self-hosted ROM manager and player that runs entirely in Docker. It gives you a clean web interface to scan, enrich, browse, and play your game collection — with metadata pulled from IGDB, Screenscraper, MobyGames, and more. This guide walks you through standing up a fully functional instance from scratch.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/rommapp/romm/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Before you start, make sure you have the following ready:- Docker and Docker Compose installed on your host machine
- A ROM library directory on the host containing your game files (see Folder Structure for how to organise it)
- A database — the example Compose file below bundles a MariaDB container; you can also point RomM at an existing MariaDB, MySQL, or PostgreSQL instance
opensslavailable on your host (used to generate the required secret key)
Docker Compose file
The followingdocker-compose.yml is taken directly from the official example. It defines two services — romm (the application) and romm-db (a bundled MariaDB instance) — along with the volumes needed for persistent storage.
Setup steps
Create the docker-compose.yml file
Create a directory for your RomM deployment and save the Compose file above into it:
Generate a secret key
RomM requires a random secret key for signing sessions and tokens. Generate one now and keep it handy — you will paste it into the environment variables in the next step:The output will be a 64-character hex string, for example:
Fill in the required environment variables
Open
Also set
docker-compose.yml and set the following values. All five are required before RomM will start successfully:| Variable | Description |
|---|---|
DB_HOST | Hostname of the database. Use romm-db if you are running the bundled MariaDB service. |
DB_NAME | Name of the database. Must match MARIADB_DATABASE in the romm-db service (default: romm). |
DB_USER | Database username. Must match MARIADB_USER in the romm-db service (default: romm-user). |
DB_PASSWD | Database password. Must match MARIADB_PASSWORD in romm-db. |
ROMM_AUTH_SECRET_KEY | The hex string you generated with openssl rand -hex 32. |
MARIADB_ROOT_PASSWORD and MARIADB_PASSWORD in the romm-db service to secure passwords that match DB_PASSWD.RomM supports MariaDB, MySQL, and PostgreSQL. To use an external database instead of the bundled one, remove the
romm-db service and its depends_on block, then set DB_HOST to point at your external instance. You can also override the driver with the ROMM_DB_DRIVER environment variable (mariadb, mysql, or postgresql).Mount your ROM library
In the RomM expects a specific directory layout inside the mounted library path. See the Folder Structure guide for the required layout and platform slug naming.
volumes section of the romm service, replace /path/to/library with the absolute path on your host where your ROMs are stored:The
assets volume is where RomM stores uploaded saves, save states, and screenshots. The config volume is optional but recommended — it lets you persist your config.yml across container recreations.Start the containers
From the directory containing your The
docker-compose.yml, bring up all services in detached mode:romm-db service includes a health check, so the romm container will wait until MariaDB is fully initialised before starting. On the first run this typically takes 20–40 seconds. You can follow the startup logs with:Complete the setup wizard
Once the container is running, open your browser and navigate to:RomM will present a first-boot setup wizard. Use it to create your admin user account — set a strong username and password, as this account has full access to the instance including library management, user administration, and all scan operations.After creating your admin account you will land on the main library view. Trigger your first scan from Settings → Scan to have RomM walk your mounted library, detect platforms, and pull metadata for every game it finds.
The setup wizard runs automatically on first boot whenever no admin account exists — for example, after a fresh database. To skip the wizard entirely, set
DISABLE_SETUP_WIZARD=true in your environment before starting the container.Next steps
Folder Structure
Learn the exact directory layout RomM expects for platforms, multi-disk games, DLC, and BIOS files.
Metadata Providers
Configure IGDB, Screenscraper, MobyGames, SteamGridDB, and RetroAchievements to enrich your library.