Deploy RomM v5.1.0 | ROM Manager No Stranger Can Claim, Saves Survive
Self-hosted ROM library; admin seeded, saves and covers on a volume
Just deployed
/var/lib/mysql
Just deployed
/romm
Deploy and Host RomM on Railway
RomM is a self-hosted ROM manager and player: it scans your game library, pulls metadata and artwork, tracks saves and save states, and plays supported systems straight in the browser.
This template ships RomM 5.1.0 with the admin account already created, so the instance is never claimable by a stranger, and with every file RomM generates — saves, states, covers, config — on the persistent volume.
About Hosting RomM
Two services: the RomM app (web UI, REST API, job queue and an embedded valkey)
on a public domain, and MariaDB on private networking. The app keeps all of its
durable state under one directory, /romm — library/ for ROMs, assets/ for
saves and states, resources/ for covers and screenshots, plus its config,
cache and the valkey snapshot, which this image relocates onto the same volume
because Railway mounts one volume per service.
The admin account is created during boot, before the web server accepts its
first request, from the generated ROMM_ADMIN_PASSWORD. Log in as admin with
that value from the Variables tab. This matters because a stock RomM with no
admin lets any anonymous caller create one over the API; the container also
refuses to start if that password is left empty. The auth routes are rate
limited to 10 requests a minute per client, keyed on the real client address
behind Railway's proxy — upstream has no login throttle at all.
The release tag is pinned. RomM applies database migrations forward on every
start and never downgrades, so tracking latest would turn each redeploy into an
unrequested upgrade.
After deploying: log in, upload or sync ROMs under /romm/library, and run a
scan. Metadata providers (IGDB, MobyGames, SteamGridDB, RetroAchievements,
ScreenScraper) are optional and take credentials you add later; Hasheous is
enabled by default and needs no key.
Common Use Cases
- A private, browser-accessible library for a personally owned game collection
- Save and save-state sync across devices, kept on persistent storage
- Browser play of supported systems through EmulatorJS
Dependencies for RomM Hosting
- RomM 5.1.0 (
ghcr.io/bon5co/romm-railway) - MariaDB 11.4 (
ghcr.io/bon5co/romm-railway-mariadb) - One persistent volume per service
Deployment Dependencies
- Upstream project: https://github.com/rommapp/romm
- Documentation: https://docs.romm.app/
- Template images: https://github.com/bon5co/romm-railway
Implementation Details
- Public entry: RomM on port 8080, healthcheck
/api/heartbeat - Volumes:
/rommon the app,/var/lib/mysqlon MariaDB - The admin seed is idempotent — a redeploy never resets an existing password
- Deployer-supplied variables only: the admin password, the app signing key and the database password, all generated per deploy
Why Deploy RomM on Railway?
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying RomM on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
Template Content
