Emulating old-school titles is a fun way to experience your nostalgic games at higher resolutions. But once you plunge into the rabbit hole that’s ROM collection, it’s easy to find yourself with a disorganized mess of game files on your retro-gaming machine. And the pile is bound to get even more cluttered once you start ripping the ROMs from other consoles,

That’s where RomM comes in handy. However, setting it up can be a bit of an issue when you’re just starting out. So, we’ve compiled a step-by-step tutorial to help you deploy a working instance of RomM on your home server.

What’s RomM?

And why should you use it?

Viewing the page of a ROM file inside RomM

RomM is a self-hosted utility that lets you arrange all your ROMs from a neat web-based GUI. Compatible with multiple console generations, RomM can display all the details of your ROM files once you link the app with your IGDB and MobyGame API keys. It also supports robust tagging to help you sort all the game files, and you can even run this FOSS tool alongside EmulatorJS to run games directly from your web browser. Besides games and BIOS, RomM can also keep track of your screenshots and save states, making it perfect for emulation lovers.

How to set up RomM?

What you’ll need

Whether you rely on hypervisors or host all your apps on your system, you’ll want to use a Linux distribution to set up RomM, as installing it on Windows will add even more complexities to an already cumbersome setup process. I recommend using a virtualization platform like Proxmox or XCP-ng for this project, but you can follow along on a VirtualBox/VMware Workstation Pro home lab. If you’re using Type-2 hypervisors, remember to set the Network adapter to Bridged mode, as this will make the RomM server accessible from your PC.

I’ve chosen Ubuntu for the purpose of this guide, but you shouldn’t encounter too many issues on other Debian-based systems. The Unraid app store has a plugin for RomM which simplifies the initial setup, but you’ll need to follow a similar procedure to the one we’ve mentioned when adding the API keys. If you’re not using Unraid, you’ll want to set up Docker Engine on your VM, as it has all the plugins and tools you’ll need to create and run the RomM server.

Grabbing (and editing) the RomM docker compose file

Since RomM has many fields that you need to edit in the config file, it’s easier to deploy it using a compose file instead of pulling an image from the Docker hub.

  1. Head to the official RomM GitHub link and click on the Download raw file button under the docker-compose.example.yml file.
    Downloading the RomM docker compose file from GitHub
  2. Navigate to the Downloads folder and open the file using a text editor.
  3. Enter your preferred password next to the DB_PASSWD field under the environment section of the romm header.
    Entering a password in the DB_PASSWRD field
  4. Type the same password in the MYSQL_PASSWORD parameter of the environment tab under romm-db.
    Entering a password in the MYSQL_PASSWORD field
  5. Create new folders for the library, assets, and config directories before pasting their folder paths into the respective fields in the yml file.
    The directories for the RomM folders
  6. Add a folder called roms inside the library before adding the sub-folders for your consoles.

Generating the API and auth keys for RomM

RomM relies on a multitude of secret keys to integrate with all the third-party video game databases. So, you’ll have to create multiple keys and paste them inside the yml file.

  1. With the docker-compose.example.yml file still open, launch the terminal.
  2. Enter the following command inside the terminal and paste the result into the ROM_AUTH_SECRET_KEY field of the yml file.
    openssl rand -hex 32
    Generating a 32 bytes secret code using openssl
  3. Head to the SteamGridDB website and log in using your Steam credentials.
    The SteamGridDB login process
  4. Click on the drop-down button next to your Profile and choose Preferences.
    The preferences option on the SteamGridDB page
  5. Switch to the API tab and paste the API Key into the STEAMGRIDDB_API_KEY field of the Docker compose yml file.
    Copying the API Key from SteamGridDB into the Docker compose yml file

    Remember to add an equal (=) symbol after the STEAMGRIDDB_API_KEY parameter, as the example file doesn’t include it by default.

  6. For the IGDB key, enable 2FA on your Twitch account and use the same credentials to sign in to your Twitch Developer account.
  7. Navigate to the Applications tab and click on the Register Your Application button.
    Creating a new application for RomM
  8. Type a unique Name and press the Add button after entering https://localhost under the OAuth Redirect URLs field.
    Entering the Name and URL for the RomM app
  9. Set Application Integration as the Category, pick Confidential as the Client Type, and tap Create.
    Creating an app for RomM
  10. Hit the Manage button inside your new application and paste the Client ID into the IGDB_CLIENT_ID parameter of the docker-compose.example.yml file.
    Setting the Client ID inside the Docker compose file for RomM
  11. Tap the New Secret button to generate the Client Secret and copy it into the IGDB_CLIENT_SECRET field.
    Pasting the Client Secret inside the Docker compose file for RomM

Deploying the RomM container

With all keys and accounts set up, it’s time to fire up the container and access the RomM web UI.

  1. Rename the file you’ve been editing all this time to docker-compose.yml.
  2. Right click anywhere inside the folder containing this file and choose Open in terminal.
    Clicking on the Open in terminal command
  3. Execute the docker compose command to create and deploy the RomM container.
    sudo docker compose up -d
    Executing the docker compose command
  4. Switch to your PC and type the IP address of your RomM VM followed by a colon (:) and the port number 80.
    Entering the IP address of the RomM server
    You can get this IP address by viewing the network settings of the VM on your hypervisor or with the help of a network scanner tool like Fing.
  5. Enter the Username and Password for the admin user before hitting Next.
    Picking the Username and Password for the admin user
  6. Double-check whether your metadata sources are correct and press Finish.
  7. Click on the Upload tab and select the console of your choice.
    Pressing the Upload button on the RomM UI
  8. Tap the Add button, select the ROM file you wish to transfer to RomM, and hit Upload.
    Uploading a ROM file to RomM

Organizing your ROM files with the help of RomM

A bunch of PSP games

If you followed all the steps correctly, your ROMs should show up inside the web UI, and RomM will utilize the databases you linked earlier to display the covers, summary, and other details for each title.

Not very fond of gaming? There’s a surprising number of useful apps you can self-host on your home lab, especially if you’re using a bare-metal virtualization platform like Proxmox.