Railway

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

Deploy RomM v5.1.0 | ROM Manager No Stranger Can Claim, Saves Survive

/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, /rommlibrary/ 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

Implementation Details

  • Public entry: RomM on port 8080, healthcheck /api/heartbeat
  • Volumes: /romm on the app, /var/lib/mysql on 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

More templates in this category

View Template
Rocky Linux
[Jul'26] Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀

codestorm
38
View Template
Foundry Virtual Tabletop
A Self-Hosted & Modern Roleplaying Platform

Lucas
71
View Template
Letta Code Remote
Run a Letta Code agent 24/7. No inbound ports, just deploy.

Letta
51