Kent, UK

What RomM is

RomM is a self-hosted ROM manager that scans a game library, adds metadata and artwork, and presents the collection through a responsive web interface. It can also integrate browser-based emulation for supported systems.

Screenshot evidence

RomM game library sign-in screen
Screenshot evidence. RomM server login screen evidence for the self-hosted ROM/library management service.

Why I run it

I use RomM to turn a folder-based collection into a managed service that family members can browse without direct access to the storage layer. The project also gives me experience with metadata APIs, persistent volumes, database maintenance and permissions across a large media-style library.

Responsible use

The service is for software and game backups I am entitled to keep. The portfolio does not publish game files, download sources, storage paths or credentials.

Operational focus

  • Read/write permissions on library and artwork volumes
  • Database backup before upgrades
  • Metadata-provider credentials stored outside Compose
  • Library scanning and duplicate handling
  • Resource limits for browser-based play
  • Private access for family users

Docker Compose structure

docker-compose.yml
services:
  romm:
    image: rommapp/romm:latest
    container_name: romm
    restart: unless-stopped
    environment:
      DB_HOST: romm-db
      DB_NAME: romm
      DB_USER: romm
      DB_PASSWD: "${ROMM_DB_PASSWORD}"
      ROMM_AUTH_SECRET_KEY: "${ROMM_AUTH_SECRET}"
    ports:
      - "8080:8080"
    volumes:
      - ./resources:/romm/resources
      - ./redis-data:/redis-data
      - /srv/games:/romm/library
    depends_on:
      - romm-db

  romm-db:
    image: mariadb:11
    restart: unless-stopped
    environment:
      MARIADB_DATABASE: romm
      MARIADB_USER: romm
      MARIADB_PASSWORD: "${ROMM_DB_PASSWORD}"
      MARIADB_ROOT_PASSWORD: "${ROMM_ROOT_PASSWORD}"
    volumes:
      - ./database:/var/lib/mysql

Official documentation