Integrations

RomM

RomM is a self-hosted game-library manager for emulator collections. It scans a structured ROM library, adds metadata and artwork, and stores saves, states, assets, and app config separately from the game files.

What Stackarr manages

  • Optional Docker Compose profile: romm
  • Private local bind by default: 127.0.0.1:${ROMM_WEB_PORT:-7583}
  • App container: rommapp/romm
  • Shared Postgres database: ${ROMM_DB_NAME:-romm} on the database service
  • Shared Redis cache: redis
  • Library mount: ${ROMM_LIBRARY_ROOT}/romm/library
  • Optional Steam library mounts for macOS, Windows, and Linux desktop libraries
  • Durable app paths for assets, config, and fetched resources
  • Dashboard, CLI, MCP, and Portless service-link visibility

Privacy stance

Stackarr does not publish RomM by default. Use the local URL or Portless alias first. If you later decide to expose it, add a Cloudflare route intentionally instead of relying on setup defaults.

docker exec app /app/bin/stackarr romm enable
docker exec app /app/bin/stackarr up
docker exec app /app/bin/stackarr romm status

Folder structure

RomM expects the game library to follow its platform-oriented folder structure. Keep the actual ROM library under your configured Games folder and let Stackarr keep RomM's database/assets/config under the app config root.

Steam integration is off by default. Enable it only when the Stackarr host can access one or more Steam library folders, either from Steam installed on that machine or from a mounted share. Leave it disabled on a NAS that has no accessible desktop Steam libraries.

Each desktop OS has an independent source path because Steam installations are commonly kept in separate folders:

SettingContainer mountRomM platform folder
ROMM_STEAM_MAC_LIBRARY_ROOT/romm/Steammac
ROMM_STEAM_WINDOWS_LIBRARY_ROOT/romm/SteamWindowswin
ROMM_STEAM_LINUX_LIBRARY_ROOT/romm/SteamLinuxlinux

Each source is the Steam library folder that contains steamapps. Configure only the operating systems you archive. A peer-folder layout keeps relative symlinks valid both on the host and in the container:

Games/
├── RomM/
│   └── roms/
│       ├── mac -> ../../Steam/steamapps/common
│       ├── win -> ../../SteamWindows/steamapps/common
│       └── linux -> ../../SteamLinux/steamapps/common
├── Steam/
│   └── steamapps/common/
├── SteamWindows/
│   └── steamapps/common/
└── SteamLinux/
    └── steamapps/common/

This is a filesystem symlink/bind-mount arrangement, not a RomM folder-alias or platform-variant mapping. The folders use RomM's official mac, win, and linux platform slugs. When Steam integration is disabled, Stackarr clears all three external roots and Compose falls back to the normal RomM library source rather than mounting an external desktop library.

Scans after secure imports

Keep Filesystem Watcher disabled when using Stackarr's Questarr importer. Supported RomM 5.1 releases can enqueue duplicate watcher scans for the same filesystem events. After ClamAV approves and Stackarr places changed files, Stackarr sends one authenticated Socket.IO Quick Scan scoped to the affected platform fs_slug.

Manual library maintenance remains available in RomM. Use an Unmatched Scan when existing records need metadata enrichment; do not enable scheduled full rescans merely to detect imports.

Treat the mounted game library as the ownership source of truth. A RomM scan marks database records whose files disappeared with missing_from_fs; run RomM's Cleanup missing ROMs maintenance task only after a current database backup to remove those stale rows without deleting filesystem content. Stackarr's Questarr ownership sync ignores missing rows even before cleanup.

Metadata providers

Onboarding and Apps → RomM → Settings save RomM metadata provider credentials into Stackarr's private runtime config. The main settings panel exposes every provider environment variable documented by RomM, including the IGDB client ID and secret, ScreenScraper credentials, provider keys and toggles, the RetroAchievements cache interval, and LaunchBox scheduling. Stackarr writes secrets to its generated, mode-0600 Compose environment file rather than the tracked Compose file.

For ScreenScraper.fr, enter the username and password for your ScreenScraper account. The official RomM image supplies RomM's application/developer credentials at build time, so Stackarr deliberately does not replace them with blank container environment values. Custom RomM images remain responsible for embedding or supplying their own developer credentials.

  • Chef's Choice: Hasheous + IGDB + SteamGridDB + RetroAchievements
  • French Connection: ScreenScraper + RetroAchievements
  • Twitch Fanboy: IGDB + Playmatch
  • Quick Starter: Hasheous only
  • Custom: choose individual providers

RomM reads these settings from its container environment. When a provider credential or provider toggle changes in the dashboard, Stackarr automatically regenerates the Compose environment and queues a RomM-only container recreation. Expect a brief RomM interruption; no full Stackarr restart is needed. A plain docker restart cannot apply changed container environment variables.

The same targeted behavior applies to other app settings: Stackarr detects which generated Compose services reference the changed variables and recreates only those enabled containers. Enable/disable and torrent-client selection changes also remove or start the appropriate managed containers.

For a provider change made through host-side runtime tooling, apply it with:

bin/stackarr romm metadata apply

Inspect the configured provider state without printing any credential values:

bin/stackarr romm metadata status

MCP clients can use stackarr_get_romm_metadata_providers for the same secret-safe provider summary, then read field definitions with stackarr_get_service_config for romm. stackarr_update_service_config can change non-secret provider toggles after approval; credential changes stay restricted to the authenticated dashboard.

bin/stackarr up also applies the values. Do not edit the generated Compose .env directly because Stackarr replaces it from the authoritative runtime config.

Provider setup details live in the RomM docs: IGDB, ScreenScraper, SteamGridDB, RetroAchievements, Hasheous, and Playmatch.

On this page