A native and browser source port of the 1997 Nintendo 64 kart racer, built on the community decompilation. Not an emulator: the game is compiled for your machine and runs from a ROM you already own. No game assets are included.
▶ Play in your browser · ⬇ Download the latest release
- Get the game. Download the build for your platform from the latest release, or use the browser version (needs a WebGPU browser — current Chrome or Edge).
- Provide your ROM. You need a legally acquired dump of the original game
— US 1.1 or European 1.1, as
.z64,.v64, or.n64. macOS and Windows open a file picker; on Linux, drag the ROM onto the launcher or paste its path. In the browser the ROM is read locally and never uploaded. Not sure which release your copy is? Drop it on the ROM checker — it names the release and says whether this port runs it, in your browser, with nothing uploaded. - Play. A gamepad is recommended and fully remappable, with rumble.
Keyboard: arrows/WASD steer,
Xaccelerates,Zbrakes,Spacehops/power-slides,Shiftuses items,Enteris Start.F1pauses and opens settings in-game. Have fun!
First-launch notes:
- macOS: the app is unsigned. If macOS warns about an unidentified developer, use System Settings → Privacy & Security → Open Anyway (Apple's guide).
- Windows: the app is not code-signed. If SmartScreen warns, choose More info → Run anyway.
- Widescreen with the original FOV and art direction preserved, plus
aspect, FOV, and supersampling controls. The classic 4:3 look is one
setting away (
--pure). - High framerates without touching the game. Frame limits up to uncapped, a variable-refresh-friendly "Just Under Display" cap, a 40 Hz choice for handhelds, and optional motion smoothing — the simulation, physics, music, and lap times always run at their authored pace, and nothing tears.
- Settings apply while you play. One Presentation pace switch picks the original look or the smooth one; frame limit, smoothing, and tearing change on the next frame.
- An optional camera that stays out of walls, with a reduced-motion option. Off by default — the authored camera is the default everywhere.
- Local multiplayer for 2–4 players, per-controller binding, split-screen.
- Playable Taj, an unlockable extra racer with his own tuning.
- PAL done right: the European ROM keeps its exact timing and pitch, with smooth presentation available on 60 Hz displays. German is available in the language menu on every ROM revision.
- Saves that behave: EEPROM progress, ghosts, and settings persist — including in the browser, with export/import in the launcher.
| Platform | Status |
|---|---|
| Windows (x64) | Portable zip, no install. Tested on real hardware each release |
| macOS (Apple silicon) | DMG. WebGPU with the Restored presentation is the qualified visual path; OpenGL is diagnostic-only |
| Linux (x86-64) | AppImage and tarball, SDL2 bundled. Best effort — GPU/desktop breadth varies |
| Browser | Current Chrome/Edge with WebGPU. Runs the same engine compiled to wasm |
Every release file ships with a .provenance.json naming the exact source
commit and checksum it was built from.
- The complete start-to-credits campaign is not automated or claimed complete.
- Linux does not yet have a native Choose ROM File dialog. Drag and drop or paste the path instead.
- The Remastered presentation (lighting, shadows, SDF text) is opt-in and still in progress.
- The desktop app supports keyboard/gamepad navigation, UI scaling and reduced motion, and an Accessibility section gathers them. It does not yet expose a contrast setting — earlier notes claimed one; there was never a control for it. It also does not present itself to a screen reader, so it is not advertised as screen-reader compatible.
- Other ROM revisions (JP, US 1.0, EU 1.0) are recognized and refused by name; only US 1.1 and EU 1.1 are supported. The ROM checker tells you which one you have and what is still missing for it.
You can replace the game's textures and music with your own. Put a folder or a
.zip in mods/ — next to your save data on macOS and Windows, next to the
game on a portable build — with a small pack.ini naming the pack, plus a
textures/ or music/ folder inside it. The game picks it up at launch, and
Tab switches replaced textures off and back on while you play, so you can
see both versions of the same corner. Settings → Content lists what loaded, and
names anything it skipped and why.
Nothing is included and nothing is hosted here: a pack is files you or someone else made, on your own machine. Replacement models and characters are not supported.
docs/MODDING.md has the details, including
tools/mod_texture_dump.py, which writes out every texture the game draws
under the exact filename a pack needs.
No ROM, textures, audio, music, models, or level data are distributed here or in any release. Golden Balloon reads everything at runtime from your copy of the game, and every release artifact is scanned to guarantee it. We do not condone piracy. See DISCLAIMER.md and NOTICE.md.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release && cmake --build build -j
./build/mdkr64 --rom /path/to/your.z64Prerequisites: CMake 3.16+, a C11 toolchain, SDL2, python3, and network access
at configure time (the WebGPU runtime is fetched and hash-verified). Running
./build/mdkr64 with no arguments opens the launcher.
Browser build (needs emsdk):
tools/web/build_web.sh
python3 -m http.server -d dist/web 8000Useful flags: --pure|--restored|--remastered, --video-set Key=Value,
--video-list, --aspect, --fov, --window-size; MDKR_RENDERER=webgpu|gl
selects the backend.
The game logic is the vendored decompilation; everything that makes it run on
a modern machine (renderer, audio engine, input, pacing, saves, web build) is
first-party code under platform/. Start here:
- CONTRIBUTING.md — build, rules, and what a fix ships with
- docs/DEVELOPER_HANDBOOK.md — architecture and the 64-bit/endianness bug shapes behind most defects here
- docs/README.md — full documentation index
- tests/README.md — the regression suite (140+ gates)
- ROADMAP.md — deferred work and what would close it
The browser build publishes to
akratch/golden-balloon (note
the hyphen); code changes belong in this repository.
- DavidSM64 and the decomp contributors, without whom none of this exists
- The sm64ex / fast3d lineage, for the renderer architecture this builds on
- ares, the reference emulator behind the visual comparisons
- The original developers at Rare, whose work this project exists to study and preserve
LICENSE (MIT, first-party code only) · NOTICE.md (per-component provenance) · DISCLAIMER.md (full position)
Unaffiliated with and unendorsed by any rights holder. All trademarks belong to their respective owners. If you are a rights holder with a concern, open an issue and it will be addressed promptly.