RomM ships with a built-in EmulatorJS integration that lets you play retro ROMs directly in your web browser — no plugins, no installs. Flash games (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/rommapp/romm/llms.txt
Use this file to discover all available pages before exploring further.
.swf) are also supported through the RuffleRS renderer, which runs seamlessly alongside EmulatorJS.
Supported Systems
EmulatorJS covers most major retro platforms, including NES, SNES, Game Boy, Game Boy Color, Game Boy Advance, Nintendo 64, Nintendo DS, Sega Genesis/Mega Drive, Sega Saturn, PlayStation 1, Atari 2600/5200/7800, PC Engine/TurboGrafx-16, arcade via MAME, and many more. RuffleRS handles Adobe Flash (.swf) titles.
Not all ROM formats are supported by every core. If a game does not load, check
that your ROM’s file extension matches what the underlying core expects. Refer to
the EmulatorJS documentation for per-core format details.
Enabling and Disabling
Both EmulatorJS and RuffleRS are enabled by default. You can turn either off with environment variables in your Docker deployment:Playing a Game
Click Play
Press the Play button to launch the EmulatorJS player. The ROM is streamed
directly from your RomM server into the browser-based emulator.
Configuration in config.yml
All EmulatorJS options live under the emulatorjs key in your config.yml file.
Debug Mode
Setdebug: true to have EmulatorJS log all available core option names to the
browser console. This is useful when you want to know what keys to use in the
settings section.
Per-Core Settings
Useemulatorjs.settings to pass core-specific options. The key is the exact
core name as reported by EmulatorJS. A special default key applies its values
to every core.
Controls Mapping
Useemulatorjs.controls to define button mappings per core and per player. Each
player index (0 = Player 1, 1 = Player 2, …) contains a map of button indices
to their keyboard (value) and controller (value2) assignments. Every button in
the core’s layout must have an entry.
Refer to the EmulatorJS control mapping docs for the full list of button indices per core.
Cache Limit
cache_limit sets the maximum size (in bytes) that EmulatorJS will cache per ROM
in the browser. Set to null (the default) to use the browser’s default behaviour.
Batch Bootup and Auto-Unload
| Option | Default | Description |
|---|---|---|
disable_batch_bootup | false | When true, EmulatorJS loads assets one-at-a-time instead of in parallel. |
disable_auto_unload | false | When true, the emulator core stays alive even when its container is not visible. |
Save Files
EmulatorJS maintains in-browser save data (SRAM) automatically while a game is running. RomM can sync these saves back to server storage so your progress is preserved across sessions and devices.RuffleRS (Flash Games)
RuffleRS is RomM’s built-in Flash player. When a ROM file has a.swf extension,
RomM automatically routes it through RuffleRS instead of EmulatorJS. No extra
configuration is needed — RuffleRS is active by default unless you set
DISABLE_RUFFLE_RS=true in your environment.
RuffleRS supports a large subset of ActionScript 2 and ActionScript 3 games, but
compatibility with all Flash content is not guaranteed. Check the
Ruffle compatibility database if a specific
game does not run correctly.