SELF-HOSTING

RomM – Self-Hosted ROM Manager with EmulatorJS Baked In

Nostalgia is a powerful thing. For me, it goes back to Christmas 1988 when I unwrapped my first Nintendo Entertainment System. That moment sparked a lifelong love for gaming. Fast forward to today, and while modern games are visual masterpieces, they often lack the charm of retro classics. That’s why discovering RomM has been a game-changer (pun intended). It’s brought those classic titles back into my life and even into the lives of my kids.

Let’s dive into what makes RomM such a fantastic addition to any retro gaming enthusiast’s setup.

What is RomM?

RomM is a self-hosted ROM manager designed to organize and play your retro games with ease. It supports a variety of systems, integrates metadata like cover art from IGDB, and leverages EmulatorJS to let you play directly in your browser.

With RomM, you can:

  • Categorize and tag your game library.
  • Scan your ROM collection to automatically pull metadata.
  • Play supported games right in the browser without installing standalone emulators.

What Are Game ROMs?

Game ROMs are digital copies of classic games that allow you to relive the experiences of retro consoles. Using EmulatorJS built into RomM, you can turn any browser-enabled device into a nostalgic gaming hub.

Installing RomM

Before diving in, you’ll need an IGDB API key for metadata integration. Simply create a Twitch account if you don’t already have one and generate the required credentials.

Folder Structure

Proper folder organization is key to making RomM work seamlessly.

Here’s an example of how to structure your library:

ROMS/
├── NES
│   ├── Super Mario Bros.zip
│   └── The Legend of Zelda.zip
├── SNES
│   ├── Donkey Kong Country.zip
│   └── Super Metroid.zip

Avoid adding excessively large libraries all at once, as this can overwhelm the database. Stick to your favorite titles to start with.

Docker Compose Setup

Here’s the Docker Compose stack for setting up RomM:

services:
  romm:
    image: rommapp/romm:latest
    container_name: romm
    restart: unless-stopped
    environment:
      - DB_HOST=romm-db
      - DB_NAME=romm # Should match MYSQL_DATABASE in mariadb
      - DB_USER=romm-user # Should match MYSQL_USER in mariadb
      - DB_PASSWD=4I15WdXs6M2k9V # Should match MYSQL_PASSWORD in mariadb
      - DB_PORT=3306
      - ROMM_AUTH_SECRET_KEY=<YOUR KEY> # Generate a key with `openssl rand -hex 32`
      - IGDB_CLIENT_ID=<YOUR ID> # Generate an ID and SECRET in IGDB
      - IGDB_CLIENT_SECRET=<YOUR SECRET> # https://api-docs.igdb.com/#account-creation
    volumes:
      - /docker/romm/romm_resources:/romm/resources # Resources fetched from IGDB (covers, screenshots, etc.)
      - /docker/romm/romm_redis_data:/redis-data # Cached data for background tasks
      - /ROMS/Romm:/romm/library # Your game library
      - /docker/romm/assets:/romm/assets # Uploaded saves, states, etc.
      - /docker/romm/config:/romm/config # Path where config.yml is stored
    ports:
      - 8998:8080
    depends_on:
      - romm-db

  romm-db:
    image: mariadb:latest # if you experience issues, try: linuxserver/mariadb:latest
    container_name: romm-db
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=4I15WdXs6M2k9V # Use a unique, secure password
      - MYSQL_DATABASE=romm
      - MYSQL_USER=romm-user
      - MYSQL_PASSWORD=4I15WdXs6M2k9V
      - PUID=1000
      - PGID=1000
    ports:
      - 3306:3306
    volumes:
      - /docker/romm/mysql_data:/var/lib/mysql

Setting Up RomM

After installation, access RomM via http://<your_host>:8998. Log in with your newly created admin account and head to the /scan page to scan your library.

Supported platforms for in-browser play include:

  • NES
  • SNES
  • Sega Genesis
  • PlayStation 1

Check the RomM Wiki for the full list.

Playing Games and Using Gamepads

RomM supports USB gamepads. Simply plug in your controller, open a game, and configure the controls using the gamepad icon in the emulator interface.

PRO TIP:
Map quick-save, rewind, and fast-forward buttons for a smoother experience, especially with challenging retro titles.

Features That Shine

One standout feature is the EmulatorJS integration. The ability to rewind gameplay or fast-forward through lengthy dialogues is a modern twist that enhances the retro experience.

Another is the metadata integration from IGDB, which gives your library a polished look with box art and detailed game descriptions.

Final Thoughts

RomM has transformed gaming into a shared family experience for me and my kids. It brings back memories while introducing a new generation to the magic of retro games.

So, if you’re a retro gaming fan or just curious about the world of emulation, I can’t recommend RomM enough. Check it out on GitHub and start building your nostalgic gaming paradise today!

Happy gaming! 🎮

You may also like

Subscribe
Notify of
guest

0 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments