Universal Retro Gaming Toolkit — by M5 Dev
🎮 Meet ROMeo — OpenROM's official mascot. Your friendly pixel-art cartridge companion for all things ROM.
OpenROM is a free, open-source Universal Retro Gaming Toolkit — one app to replace every fragmented ROM tool out there. Convert, patch, compress, clean, and manage your ROM collection with a modern Flutter desktop UI, real-time terminal logging, smart platform detection, and a full headless CLI for automation — with optional online features that are always opt-in.
| Platform | GitHub Release | SourceForge Mirror |
|---|---|---|
| 🪟 Windows (Installer) | OpenROM-Windows-Setup.exe | Mirror |
| 🪟 Windows (Portable) | OpenROM_Windows_Portable.zip | Mirror |
| 🐧 Linux x86_64 | OpenROM_Linux_x86_64.zip | Mirror |
| 🐧 Linux ARM64 | OpenROM_Linux_arm64.zip | Mirror |
| 🍎 macOS Apple Silicon | OpenROM_macOS_arm64.zip | Mirror |
| 🍎 macOS Intel | OpenROM_macOS_x86_64.zip | Mirror |
| 🤖 Android | 🚧 Coming soon via Termux | — |
Each release includes the Flutter GUI (OpenROM) and the headless CLI (openrom-core).
📖 Guides & Docs: Official Wiki — setup, Steam Deck, Termux, FAQs.
- 20+ conversion paths — ISO, BIN, CUE, GDI, IMG, ECM, CHD, CSO, ZSO, XISO, RVZ, WIA, WBFS, GCZ and more.
- Smart Platform Detection — Magic byte detection for PS1, PS2, PSP, Xbox, GameCube, Wii, Dreamcast, Saturn, Sega CD — not size guessing.
- Real CHD Header Parsing — Reads actual CHD v4/v5 headers to determine CD vs DVD type accurately.
- Correct CHD Codec Routing —
createcdfor PS1/Dreamcast/Saturn/Sega CD,createdvdfor PS2/GameCube/Wii/Xbox — never mixed up. - Auto CUE Generation — Generates CUE sheets for standalone BIN files with correct track mode detection (MODE1/MODE2/AUDIO) via sector header inspection.
- Integrity Verification — Post-conversion CHD integrity check via
chdman verify.
- 11 patch formats — IPS, IPS32, UPS, BPS, PPF, APS, EBP, DPS, xdelta3, SSP (Sega Saturn), DCP (Dreamcast).
- Auto format detection — Drop a patch file and OpenROM detects the format automatically.
- Checksum verification — CRC32 integrity checks before and after patching with a detailed report.
- Ignore checksum mode — Force-apply patches even on modified ROMs.
- DCP Patch Applier — Apply Dreamcast
.dcppatch files with full xdelta3 delta-patch support. Compatible with Universal Dreamcast Patcher patch files. - IP.BIN Editor — Read and modify the Dreamcast boot sector: game title, region flags (Japan / USA / Europe / Region Free), VGA mode toggle, and full Shift-JIS encoding support for Japanese game titles.
- GDI Track Inspector — Load and inspect GDI disc image track structure — track number, LBA offset, type (Audio/Data), sector size, and filename.
- ZIP and 7Z support — Compress ROMs or entire folders with fast / normal / ultra presets.
- Smart skip — Already-compressed formats (CHD, CSO, RVZ, 7Z…) are automatically skipped.
- Batch extraction — Extract ZIP and 7Z archives with progress tracking.
- Delete source option — Auto-clean source files after successful compression.
- Copier header detection and removal for NES (iNES), SNES (SMC), Game Boy / GBC — with confidence rating (certain / likely).
- Double-strip protection — SNES internal header validation prevents stripping clean ROMs twice.
- Auto backup — Original ROM backed up as
.bakbefore any modification. Existing backups are never overwritten. - Non-destructive — Output written to a separate file; source untouched by default.
- M3U Playlist Generator — Auto-generate M3U playlists for multi-disc games (PS1, Saturn, etc.).
- BIN Merger — Merge multi-track BIN files into a single BIN + CUE, with correct INDEX 00 pregap handling.
- CUE Sheet Editor — Open, edit, and save
.cuefiles directly inside OpenROM. - Batch Processing — Drop a whole folder, process everything at once.
- No-Intro + Redump DAT support — Import any DAT file from datomatic.no-intro.org or redump.org.
- CRC32 matching — Identifies ROMs by hash, not filename.
- Dry run mode — Preview renames before applying.
- DAT library — Import multiple DATs and OpenROM stores them locally for reuse.
- Event-based XML parser — Parses DAT metadata without building a full DOM tree; a streaming file decoder is planned for extremely large DAT files.
- 100% offline — No network requests, no API keys.
- Queue Manager — Drag to reorder conversion jobs before running. Clear completed jobs with one click.
- Compression Preview — See estimated output size before converting, based on format and compression level.
- Gaming Dashboard UI — Flutter-powered dark interface inspired by PS5/Xbox aesthetics, with ROM cards, platform badges, and real-time progress.
- Themeable — Swap between built-in themes (Gaming Dashboard, Cyberpunk, Terminal, Minimal) or create your own via JSON.
- Real-time Terminal Log — Live process output with timestamps, slides up during conversion.
- Drag & Drop — Native drag and drop for files and folders.
- Full Headless CLI —
openrom-corefor scripting, automation, and Flutter IPC. - 6 Languages — English, Arabic, Spanish, French, Japanese, Portuguese.
- Privacy-first — No telemetry, no analytics, no accounts. Optional online features (update checks, RetroAchievements) are opt-in and clearly disclosed.
- Auto-update check — Checks GitHub on startup for a newer version. Disabled by default, enable in Settings.
- RetroAchievements hash check — Verifies if your ROM is supported before converting. Requires a free retroachievements.org account. Disabled by default.
- All online features are opt-in. No data is ever collected without explicit user consent.
| Input | Output | Tool | Notes |
|---|---|---|---|
| ISO | CHD | chdman | createcd for PS1/Dreamcast/Saturn/Sega CD, createdvd for PS2/GC/Wii/Xbox |
| ISO | CSO | maxcso | PSP / PS2 |
| ISO | ECM | ecm | |
| ISO | XISO | extract-xiso | Xbox |
| ISO | RVZ | nodtool | GameCube / Wii |
| BIN | CHD | chdman | Auto CUE if missing |
| BIN | ECM | ecm | |
| CUE | CHD | chdman | |
| GDI | CHD | chdman | Dreamcast |
| IMG | CHD | chdman | |
| CHD | ISO | chdman | |
| CHD | BIN/CUE | chdman | |
| CSO | ISO | maxcso | |
| ZSO | ISO | maxcso | |
| ECM | ISO / BIN | unecm | Auto-detects output format |
| XISO | Files | extract-xiso | Extracts to folder |
| RVZ | ISO | nodtool | GameCube / Wii |
| WIA | ISO | nodtool | GameCube / Wii |
| WBFS | ISO | nodtool | Wii |
| GCZ | ISO | nodtool | GameCube / Wii |
| NKit | ISO | nkit | GameCube / Wii |
| WUD | ISO | nkit | Wii U |
| WUX | ISO | nkit | Wii U (compressed) |
| ISO | NKit | nkit | GameCube / Wii |
| Format | Systems |
|---|---|
| IPS / IPS32 | NES, SNES, GBA, and most retro systems |
| UPS | Universal — any ROM |
| BPS | Universal — any ROM |
| PPF | PS1 / PS2 disc patches |
| APS (GBA) | Game Boy Advance |
| APS (N64) | Nintendo 64 |
| EBP | EarthBound / SNES |
| DPS | DOS / PC |
| xdelta3 / VCDIFF | Large ROMs, disc images, PS2, PSP |
| SSP (Sega Saturn Patcher) | Sega Saturn disc patches |
| DCP (Dreamcast Patch Container) | Sega Dreamcast disc patches |
# Detect file format and platform
openrom-core --detect game.iso
# Convert a single file
openrom-core --input game.iso --format CHD
# Batch convert a folder
openrom-core --folder /roms/ --format CHD --compression Max
# Convert with verification
openrom-core --input game.iso --format CHD --verify
# Apply a patch
openrom-core --patch game.sfc --patch-file hack.ips
# Apply a Dreamcast DCP patch
openrom-core --dcp patch.dcp --disc-dir /disc/ --output /out/
# Read IP.BIN fields
openrom-core --read-ipbin IP.BIN
# Edit IP.BIN — region free + enable VGA
openrom-core --write-ipbin IP.BIN --region-free --set-vga
# Edit IP.BIN — set custom title
openrom-core --write-ipbin IP.BIN --set-title "MY GAME"
# Inspect GDI track structure
openrom-core --read-gdi disc.gdi
# Compress to 7Z
openrom-core --compress game.iso --format 7z --level ultra
# Remove ROM header
openrom-core --remove-header game.smc
# Generate M3U for multi-disc game
openrom-core --m3u /roms/Metal\ Gear\ Solid/
# Verify a CHD
openrom-core --input game.chd --verify-only
# JSON output (for scripting / Flutter IPC)
openrom-core --json --detect game.isoOpenROM ships with 4 built-in themes and supports fully custom themes via JSON files in the themes/ folder:
| Theme | Description |
|---|---|
default.json |
Gaming Dashboard — dark navy, red accent |
cyberpunk.json |
Neon on black |
terminal.json |
Green on black, monospace |
minimal.json |
Clean light mode |
Create your own theme by copying any JSON file and editing the color values.
All tools are open source and verifiable. See SECURITY.md for SHA256 checksums.
| Tool | Purpose | License |
|---|---|---|
| chdman | CHD conversion (MAME) | GPL v2 |
| maxcso | CSO/ZSO compression | ISC |
| ecm / unecm | ECM compression | GPL v2 |
| extract-xiso | Xbox ISO extraction | GPL v2 |
| nodtool | GameCube / Wii formats | MIT |
| xdelta3 | xdelta/VCDIFF patching | Apache 2.0 |
| nkit / nkds | NKit GameCube/Wii/WiiU conversion | MIT |
| saturn-patcher | Sega Saturn SSP patch applier | GPL v3 |
| xgdtool | Xbox Game Disc (XGD) tooling | GPL v3 |
- Dart SDK 3.0+
- Flutter SDK (stable channel)
git clone https://github.com/M5Devs/OpenROM
cd OpenROM
# Build Dart core CLI
cd core
dart pub get
dart compile exe bin/openrom.dart -o ../openrom-core
# Run Flutter UI
cd gui
flutter pub get
flutter run -d windows # or linux / macos# Windows
build_windows.bat
# Linux
./build_linux.sh
# macOS
./build_mac.sh- Flutter UI rewrite (v2.5.0)
- Magic byte platform detection
- CHD header parsing
- Theme system
- ROM Patcher — IPS, BPS, UPS, xdelta3, PPF, SSP and more (v2.5.0)
- ZIP / 7Z compression & extraction
- ROM header removal — NES, SNES, GB/GBC
- M3U playlist generator
- NKit / WUD / WUX support (v2.8.0)
- SSP Sega Saturn Patcher (v2.8.0)
- Linux ARM64 builds (v2.8.0)
- CUE Sheet Editor (v2.9.0)
- Queue Manager + Compression Preview (v2.9.0)
- ROM Renamer — No-Intro + Redump DAT support (v3.0.0)
- Dreamcast DCP Patch Applier (v3.0.0)
- IP.BIN Editor — region, VGA, Shift-JIS (v3.0.0)
- GDI Track Inspector (v3.0.0)
- DCP Patch Builder 🔨
- maxcso ARM64 build
- RetroAchievements hash verification (v3.8.0)
Contributions are welcome! Read CONTRIBUTING.md for guidelines on bug reports, feature requests, and pull requests.
OpenROM is licensed under the GNU General Public License v3.0 (GPL v3) — a free, copyleft license approved by the Open Source Initiative.
| ✅ | Free to use personally and commercially |
| ✅ | Free to study, modify, and distribute |
| ✅ | Forks must remain open source under GPL v3 |
| ✅ | Listed on Flathub, Linux distros, and OSI-compliant repos |
See LICENSE for the full license text.