PocketEmulator is a Game Boy (DMG) and Game Boy Color (GBC) emulator. You get a desktop launcher to manage your ROM library, profiles, and save files, plus a native gameplay window with scaling, filters, and keyboard controls. The CPU and PPU are emulated in Rust; audio is not implemented yet (APU stubbed).
This project does not emulate Game Boy Advance.
| Layer | Details |
|---|---|
| Core emulator | Rust — CPU (SM83), PPU, cartridges (MBC0/1/3/5), timers, serial (experimental link). |
| Gameplay window | pixels + winit — framebuffer, input, HUD. |
| Launcher shell | Tauri 2 — desktop WebView hosting the UI. |
| Launcher UI | React, TypeScript, Vite. |
| IPC | Tauri commands between the UI and Rust (ROM library, settings, saves). |
| Packaging | Tauri bundler — .app on macOS, NSIS / .exe on Windows. |
Prebuilt builds are attached to GitHub Releases for macOS and Windows. Pick the latest version and download the artifact for your OS.
- Download
PocketEmulator-macos.zipfrom the release and unzip it soPocketEmulator.appexists (for example in~/Downloads). - Follow Run the downloaded app on macOS below — you usually need
xattronce because the app is not signed/notarized. - Later launches: double‑click
PocketEmulator.appin Finder. Optional CLI:open ~/Downloads/PocketEmulator.appor runPocketEmulator.app/Contents/MacOS/PocketEmulatorfor flags (e.g.--menu).
Downloads from GitHub are quarantined and unsigned, so Gatekeeper may block a normal double‑click or show “damaged”—that is usually quarantine, not a broken file.
If PocketEmulator.app is in your Downloads folder, open Terminal and run:
xattr -cr ~/Downloads/PocketEmulator.app
open ~/Downloads/PocketEmulator.appxattr -crclears extended attributes (including quarantine) on the app bundle so macOS will allow it to run.openstarts the app.
If the .app lives somewhere else, replace the path (for example ~/Desktop/PocketEmulator.app). After the first successful launch, you can open it from Finder like any app.
Alternatives if you prefer the GUI: System Settings → Privacy & Security → Open Anyway, or right‑click the app → Open.
- Download the Windows asset from the same release page (installer
.exefrom NSIS and/or portablePocketEmulator.exe, depending on what was uploaded). - Run the installer and follow the prompts, or run
PocketEmulator.exedirectly. - If SmartScreen warns about an unknown publisher, choose More info → Run anyway (unsigned builds).
- The launcher opens by default: My Games (library), Saves, Settings, Get ROMs (catalog link).
- Supported ROM types:
.gb/.gbconly. - Gameplay: keyboard — D‑Pad arrows, Z (A), X (B), Enter (Start), Shift (Select), Space (fast‑forward hold), Esc quit. F5 quick save, F9 reload save, F2 pick another ROM, F12 screenshot (PPM in app data).
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/com/pocketemulator/pocketemulator |
| Windows | %LOCALAPPDATA%\com\pocketemulator\pocketemulator |
| Linux (from source) | ~/.local/share/com/pocketemulator/pocketemulator |
There you’ll find state.json, saves/*.sav, and screenshots.
- Rust (stable), Node.js 20+, repo cloned locally.
npm ci --prefix frontend
./build-app macos # macOS → ./PocketEmulator.app
./build-app windows # run on Windows → PocketEmulator.exe at repo rootcargo build --release
cargo run --release -- path/to/game.gb
cargo run --release -- --menu # open the launcher flow (see src/main.rs)Common flags: --scale N (default 4), --info, --no-autosave, --package (copy binary to dist/), --regression.
- Test ROMs (optional): place open ROMs under
roms/tests/(gitignored). See Blargg’s GB tests, dmg-acid2. Runcargo test. - Opcode tables: after editing generators:
python3 tools/gen_cpu_opcodes.py python3 tools/gen_cb.py
src/cpu/— SM83 core (opcodes_gen.rs,cb_gen.rs)src/ppu.rs— LCD / tiles / spritessrc/cartridge/— MBC +.savsrc/frontend/desktop/— native game windowfrontend/— launcher UI
You must supply your own ROM dumps. This repository does not distribute copyrighted games.