MCPSERV.CLUB
RomM

RomM

Self-Hosted

Self-hosted ROM manager with metadata enrichment and browser play

Active(100)
6.8kstars
0views
Updated 1 day ago
RomM screenshot 1
1 / 2

Overview

Discover what makes RomM powerful

RomM is a self‑hosted web application that transforms raw ROM files into a fully enriched, searchable library. From a technical standpoint it performs **metadata ingestion**, **artwork retrieval**, and **in‑browser emulation** while exposing a RESTful API for external tooling. The core engine is built in **Node.js (TypeScript)**, with a **React** front‑end that communicates over WebSocket for real‑time updates. Data is persisted in a **PostgreSQL** database, and the application ships with optional **Redis** caching for high‑volume queries. This stack gives developers a familiar JavaScript ecosystem while keeping performance and scalability in mind.

Backend

Frontend

Database

Emulation

Overview

RomM is a self‑hosted web application that transforms raw ROM files into a fully enriched, searchable library. From a technical standpoint it performs metadata ingestion, artwork retrieval, and in‑browser emulation while exposing a RESTful API for external tooling. The core engine is built in Node.js (TypeScript), with a React front‑end that communicates over WebSocket for real‑time updates. Data is persisted in a PostgreSQL database, and the application ships with optional Redis caching for high‑volume queries. This stack gives developers a familiar JavaScript ecosystem while keeping performance and scalability in mind.

Architecture

  • Backend – Express‑based API written in TypeScript, leveraging NestJS conventions for modularity. The service layer is split into scanners, metadata providers, and emulation controllers. Each provider (IGDB, Screenscraper, MobyGames) is wrapped in a dedicated SDK module that handles rate‑limiting and OAuth flows.
  • Frontend – React + Redux Toolkit with a responsive design powered by Tailwind CSS. The UI communicates via GraphQL (Apollo Client) for flexible queries and subscriptions, enabling instant library updates when a new ROM is added.
  • Database – PostgreSQL stores game records, platform definitions, and user permissions. The schema is normalized but includes JSONB columns for dynamic metadata (e.g., achievements, DLC lists).
  • Emulation – RomM embeds EmulatorJS and RuffleRS, allowing games to be played directly in the browser without external plugins. The emulator modules are loaded lazily through Webpack code‑splitting, reducing initial bundle size.

Core Capabilities

  • Metadata API – Endpoints /api/metadata/:platform/:id expose enriched data, including cover art URLs, release dates, and platform‑specific tags. Developers can hook into this API to build custom dashboards or analytics tools.
  • Webhooks – RomM emits events (game_added, scan_completed) that external services can subscribe to via HTTP POST. This is ideal for CI pipelines that need to trigger backups or sync operations when the library changes.
  • Plugin System – A pluggable architecture allows third‑party modules to register new scanners or exporters. Plugins are isolated in separate NPM packages and loaded at runtime through a simple dependency injection container.
  • Custom Tagging – Filenames can include structured tags ([RPG], [HD]) which are parsed by the scanner and stored as searchable attributes. This feature is exposed to developers through the /api/tags endpoint.

Deployment & Infrastructure

RomM ships as a Docker Compose stack, but the service can also be deployed on any Node.js‑capable host. The Docker image is built on a lightweight Alpine base, keeping the footprint under 200 MB. For production use, the following components are recommended:

ComponentRecommendation
DatabasePostgreSQL 15+, preferably with WAL archiving for point‑in‑time recovery
CacheRedis 7.x to cache heavy metadata queries
Reverse ProxyNginx or Caddy for TLS termination and HTTP/2 support
CI/CDGitHub Actions can build the image; Helm charts are available for Kubernetes deployments

The application is horizontally scalable by running multiple API instances behind a load balancer. Since the database is the single source of truth, all replicas must share the same PostgreSQL cluster.

Integration & Extensibility

Developers can extend RomM in several ways:

  • SDKs – A TypeScript SDK is available on npm (romm-sdk) that wraps all public endpoints, making it trivial to write scripts for bulk metadata updates or automated scans.
  • Custom Scanners – By implementing the ScannerInterface, a new module can parse non‑standard ROM directories or integrate with proprietary naming conventions.
  • OAuth Providers – RomM supports SSO via OAuth2; developers can plug in their own identity provider (e.g., Keycloak) by configuring the auth middleware.
  • Webhooks – Built‑in support for GitHub Actions, Slack notifications, or custom HTTP endpoints allows seamless integration into existing workflows.

Developer Experience

The project follows strict semantic‑versioning and publishes release notes on GitHub. The documentation is hosted at docs/, providing comprehensive guides for API usage, plugin development, and deployment scenarios. Community support is active on Discord and GitHub Discussions; contributors benefit from a clear code‑style guide, automated linting via ESLint/Prettier, and a CI pipeline that enforces type‑safety.

Use Cases

  • Retro Game Collectors – Automatically scan a shared NAS drive, enrich the library with IGDB data, and expose a web portal for family members.
  • Educational Institutions – Deploy RomM on campus servers to provide a controlled environment for classic game research, with fine‑grained user permissions.
  • Game Developers – Use RomM’s metadata API to generate asset lists for indie releases, or integrate the emulator into a continuous‑integration pipeline that tests ROM compatibility.
  • Hardware Vendors – Embed the RomM web UI into handheld devices (e.g., muOS) to give users a native game browsing experience without installing additional software.

Advantages

  • Open Source & AGPL‑3.0 – Full control over data and the

Open SourceReady to get started?

Join the community and start self-hosting RomM today