M5Devs/OpenROM
M5Devs/OpenROM has 298 GitHub stars and 7 forks. Star changes are not measured yet. Last checked 2026-11-09 09:07 UTC. Last push 2026-11-08.
Universal Retro Gaming Toolkit — convert, patch, compress and manage ROMs. PS1, PS2, Xbox, GameCube, Wii, Saturn, Sega CD and more. Windows, Linux & macOS.
What you can do
- 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.
측정된 스타 증가
- in 24h
- 기록 수집 중
- in 7 days
- 기록 수집 중
- in 15 days
- 기록 수집 중
- in 1 month
- 기록 수집 중
서로 겹치는 기간의 순증가량이며 일별 합계가 아닙니다. 측정값이 없으면 비워 둡니다. 스타는 관심도를 나타내며 품질을 보장하지 않습니다.
README.md
Original
⬡ OpenROM
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.
⬇️ Download
| 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.AppImage · Core CLI | Mirror |
| 🐧 Linux ARM64 | OpenROM_Linux_arm64.AppImage · Core CLI | Mirror |
| 🍎 macOS Apple Silicon | OpenROM_macOS_arm64.dmg | Mirror |
| 🍎 macOS Intel | OpenROM_macOS_x86_64.dmg | Mirror |
Each release includes the Flutter GUI (OpenROM) and the headless CLI (openrom-core).
📖 Guides & Docs: Official Wiki — setup, Steam Deck, FAQs.
🎮 Features
🔁 ROM Conversion
- 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.
🩹 ROM Patching
- 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.
🎮 Dreamcast Tools
- 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.
🗜️ Compression & Extraction
- ZIP support — Compress ROMs or entire folders with fast / normal / ultra presets. Needs nothing installed.
- 7Z support — Compress and extract
.7zarchives (fast / normal / ultra) through an installed 7-Zip binary (7zz/7z), or one pointed to byOPENROM_7Z. Not bundled. - 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.
7-Zip requirement
ZIP compression and extraction work with no external tools. 7Z compression and extraction shell out to a 7-Zip binary:
- Linux —
sudo apt-get install p7zip-full(or your distro'sp7zip/7zippackage). - macOS —
brew install sevenzip(provides7zz). - Windows — install 7-Zip, or rely on the default
%ProgramFiles%\7-Zip\7z.exelookup.
The lookup order is OPENROM_7Z (an explicit path), then 7zz, 7z, 7za,
7zr on PATH, then the Windows Program Files locations. If no binary is found,
7Z jobs fail with a clear message instead of throwing. Encrypted archives are
not supported and fail fast.
🧹 ROM Header Removal
- 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.
🗂️ Collection Utilities
- 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.
🏷️ ROM Renamer
- 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 & Preview
- 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.
🖥️ UI & Workflow
- 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.
🌐 Online Features (Optional)
- 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.
🔁 Conversion Matrix
| 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 | 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 |
| RVZ | ISO | nodtool | GameCube / Wii |
| WIA | ISO | nodtool | GameCube / Wii |
| WBFS | ISO | nodtool | Wii |
| GCZ | ISO | nodtool | GameCube / Wii |
🩹 Supported Patch Formats
| 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 |
💻 CLI Usage
# Show all options
openrom-core --help
# 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
# Apply a Dreamcast DCP patch
openrom-core --dcp patch.dcp --disc-dir /disc/ --output /out/
# Generic ROM patching (IPS, BPS, UPS, etc.) is supported via the OpenROM GUI
# 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 ZIP
openrom-core --compress game.iso --format zip --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
# Hash a ROM (CRC32 / MD5 / SHA-1 / SHA-256)
openrom-core --hash game.iso
openrom-core --json --hash game.iso
# Plugin developer tooling (orplug-builder)
openrom-core --plugin-init ./my-tool --name "My Tool" --id my-tool --category Utility
openrom-core --plugin-validate ./my-tool
openrom-core --plugin-pack ./my-tool --out ./my-tool-1.0.0.orplug
# Resolve an openrom:// deep link (store install links)
openrom-core --deeplink "openrom://install/my-tool"
# JSON output (for scripting / Flutter IPC)
openrom-core --json --detect game.iso
🛠️ Visual Plugin Builder (GUI)
The Plugins screen ships a Create / Studio tab that wraps the same
orplug-builder engine: scaffold a plugin, fill in the manifest, attach a
binary per platform (SHA-256 is computed automatically), validate, then pack
to .orplug and copy the marketplace JSON entry — all without leaving the app.
Projects are plain folders, so a plugin started in the GUI can be finished
from the CLI (and vice versa).
🔗 openrom:// links
OpenROM registers the openrom:// URL scheme on Windows (NSIS registry),
Linux (Flatpak .desktop x-scheme-handler), and macOS (CFBundleURLTypes).
openrom://install/<plugin-id> opens the storefront with a confirmation
dialog; the download is still verified against the published SHA-256 before
anything is installed.
🎨 Themes
OpenROM 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.
🛠️ Bundled Tools
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 |
| nodtool | GameCube / Wii formats | MIT |
| xdelta3 | xdelta/VCDIFF patching | Apache 2.0 |
Xbox (XISO), Wii U (WUD/WUX/WUA), NKit and Sega Saturn SSP support ship as community
.orplugextensions from the OpenROM Extension Store.
🚀 Building from Source
Requirements
- Dart SDK 3.0+
- Flutter SDK (stable channel)
Run Flutter UI from source
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
Build release packages
# Windows
build_windows.bat
# Linux
./build_linux.sh
# macOS
./build_mac.sh
🗺️ Roadmap
- 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 compression & extraction (no external tools needed)
- 7Z compression & extraction (requires an installed 7-Zip —
7zz/7z, orOPENROM_7Z; not bundled) - 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)
🤝 Contributing
Contributions are welcome! Read CONTRIBUTING.md for guidelines on bug reports, feature requests, and pull requests.
📄 License
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.