Diddy Kong Racing, rebuilt for Mac, iPhone, and iPad.
Native WebGPU/Metal rendering, customizable touch controls, Files-based game
data, and a bring-your-own-ROM workflow.
BarrelPad packages the open-source Golden Balloon port of Diddy Kong Racing as a native Apple app. It adds iPhone and iPad lifecycle support, a racing-focused touch controller, editable phone and tablet layouts, and local ROM discovery.
This repository contains the Apple integration, maintained host patches, build scripts, and documentation. It does not contain a Diddy Kong Racing ROM, extracted Nintendo/Rare assets, or a playable game archive. See the ROM policy and rights and licensing boundary.
Note
AI disclosure: BarrelPad uses substantial AI assistance for code, tests, documentation, debugging and maintenance. Some support replies and maintenance tasks are automated. There is no audited percentage of AI-generated code. Build, test and device records describe what was checked. This disclosure concerns BarrelPad's workflow, not the authorship of its upstream projects.
| Option | Status | What to do |
|---|---|---|
| Make your own with PadMint | Available | See Get started. Releases hold the recipe only. |
| Local macOS build | Available now | Build with scripts/build-macos.sh, then launch with your supported ROM. |
| iPhone / iPad Simulator | Available now | Build with scripts/build-ios.sh --simulator, then run scripts/run-ios-sim.sh phone or pad. |
| Physical iPhone / iPad | Tested locally | Build an unsigned device app with scripts/build-ios.sh --device, then sign it with your Apple development identity and provisioning profile. |
| App Store / TestFlight | Not announced | No App Store listing or public TestFlight exists. |
The current development build has been signed, installed, launched, and played on an iPhone 14 and a 12.9-inch iPad Pro. Native landscape rendering, local ROM boot, touch gameplay, editable controls, settings scrolling, save files, and in-place updates have been exercised on both device classes.
The easy way: releases publish no app, because BarrelPad is compiled from
the Diddy Kong Racing decompilation; you make your own. On an Apple Silicon Mac
with Xcode and brew install cmake ninja pkgconf, download
PadMint, unzip it,
double-click PadMint.command and choose BarrelPad. PadMint builds BarrelPad
from this repository's latest release
and saves an unsigned IPA in your Downloads folder. Install it with AltStore
Classic, SideStore or Sideloadly, then choose your ROM in the app (see
First launch).
By hand:
You need:
- a Mac with Xcode and its command-line tools;
- Homebrew;
cmake,ninja,pkgconf, andmake;- an Apple development identity for physical-device installs; and
- your own legally acquired, supported Diddy Kong Racing ROM.
Install the host dependencies:
brew install cmake ninja pkgconf makeClone and build:
git clone https://github.com/chrissotraidis/barrelpad.git
cd barrelpad
scripts/clone-refs.sh
# macOS
scripts/build-macos.sh
# iPhone / iPad Simulator
scripts/build-ios.sh --simulator
# Unsigned physical-device app
scripts/build-ios.sh --device
# Audited, ROM-free, re-signable IPA
scripts/package-ios.sh build-ios-device/BarrelPad.app \
dist/BarrelPad-0.1.0-preview.5-unsigned.ipaThe iOS products are written to build-ios-sim/BarrelPad.app and
build-ios-device/BarrelPad.app. Physical-device installation requires a
matching bundle identifier, provisioning profile, and local signature.
See the complete build guide for source pins, signing boundaries, and diagnostic builds.
BarrelPad never downloads or bundles game data.
- Launch BarrelPad once so iOS creates its Files-visible folder.
- Open Files → On My iPhone/iPad → BarrelPad.
- Copy a supported ROM into that folder as
diddy-kong-racing.v64. - Return to BarrelPad. The app discovers the ROM and starts the native host.
The ROM, preferences, and saves remain inside the app container. They are ignored by Git and rejected by the repository safety check.
scripts/run-macos.sh --rom "/absolute/path/to/your.v64"BarrelPad uses separate landscape defaults for each device class:
- iPhone: the accepted compact grip layout keeps steering at bottom-left, L/Z near the left thumb, and the face, shoulder, Start, and camera controls within right-thumb reach.
- iPad: the larger tablet rail layout remains the default, with L/Z/R above the analog stick and the action/C-button groups on the right.
- Menu:
•••always remains available. Its first screen exposes Touch Controls directly, with All Settings beside it on both iPhone and iPad. - Visibility: Show gameplay touch controls explicitly turns the racing overlay on or off and remembers the choice.
- Controller takeover: a physical Player 1 controller automatically hides gameplay touch controls without changing the saved preference. Disconnecting it restores touch controls when they were enabled. SDL2 ownership is reconciled after hot-plug, foreground resume, and a bounded active check, so a stale handle cannot keep Player 1 or held input after sleep/disconnect.
- Quick sizing: the Touch Controls page provides 1x–4x presets.
- Individual editing: choose Move & Resize Controls, select any control, drag it, and use the size slider to resize that control alone. Done saves the device-class layout and restores gameplay input.
- Complete settings: both device classes provide separate Touch Controls and All Settings views; the complete list remains vertically scrollable.
| Touch control | Diddy Kong Racing action |
|---|---|
| Analog stick | Steer / menu navigation |
| A | Accelerate / confirm; race-only hold assist |
| B | Brake / reverse / cancel |
| Z (left or right) | Item / special |
| R | Hop / power-slide |
| L | Secondary / camera context |
| Start | Pause / start |
| C buttons | Camera |
••• |
Open or close host menu |
Hold A for 0.65 seconds during a race, then lift your finger to keep accelerating. Tap A again to release it. Z and R remain momentary.
See Touch controls for the mapping and input path.
| Area | Current result |
|---|---|
| Native app | Builds for Apple silicon macOS, iOS Simulator, and arm64 iPhone/iPad devices |
| Rendering | WebGPU through Metal; native widescreen landscape on iPhone and iPad; PAL viewport and minimap alignment normalized for modern displays |
| Game setup | Files-visible, user-supplied ROM discovery and native game boot |
| Touch | Full racing controls, persisted visibility, presets, per-control movement and sizing |
| Controllers | SDL2 stable slots; stale-handle release; Player 1 reclaim after sleep/disconnect; foreground reconciliation |
| Settings | Direct touch/all-settings access and vertical scrolling on iPhone and iPad |
| Saves | EEPROM saves and in-place app updates preserving app-container data |
| Packaging | Audited ROM-free Preview 5 release with privacy manifest, rights, and third-party notices |
Detailed target evidence lives in docs/STATUS.md and docs/EVIDENCE.md.
| Game | Engine | Status |
|---|---|---|
| Diddy Kong Racing US 1.1 | Golden Balloon | Supported and physically tested |
| Diddy Kong Racing European 1.1 | Golden Balloon | Supported by the host; not physically validated in this repository |
| Other games or ROM revisions | Other ports/emulators | Not supported by BarrelPad |
BarrelPad is a native integration for one source port, not a general Nintendo 64 emulator. An unsupported game or revision cannot be substituted.
flowchart LR
A["BarrelPad scripts"] --> B["Pinned Golden Balloon source"]
B --> C["Maintained Apple patches"]
C --> D["ROM-free app product"]
E["Your supported ROM"] --> F["Files-visible app folder"]
D --> G["Local launch"]
F --> G
G --> H["Gameplay and saves stay local"]
The compile does not read your ROM. Game data is introduced only after the app is installed or when the desktop launcher receives a local path.
Before sharing source or a build, run:
scripts/check-repo-safety.sh
scripts/test-unit.shWhere is the IPA?
There is no public IPA: BarrelPad is compiled from the decompilation, so PadMint builds your own on an Apple Silicon Mac. See Get started.
Does this repository include Diddy Kong Racing?
No. You must provide your own legally acquired supported ROM. Do not open issues requesting game data, extracted assets, or download links.
Does BarrelPad require JIT or a jailbreak?
No. It is a native arm64 build of Golden Balloon. A physical-device install still needs normal Apple code signing.
Is this just SpaghettiPad with a different ROM?
No. SpaghettiPad integrates SpaghettiKart / Mario Kart 64. BarrelPad integrates Golden Balloon / Diddy Kong Racing. The Apple-shell and grip-layout patterns are related, but the host, mappings, controls, and game behavior are DKR-specific.
| Path | Purpose |
|---|---|
scripts/build-macos.sh |
Build the desktop host and unit tests |
scripts/build-ios.sh |
Build Simulator or unsigned arm64 device app |
scripts/run-ios-sim.sh |
Install, seed local ROM data, and launch one Simulator |
scripts/apply-ios-patches.sh |
Replay maintained host patches and sync Apple sources |
scripts/check-repo-safety.sh |
Reject tracked ROMs and extracted assets |
ios/ |
UIKit shell, ROM boot, icons, and touch controller |
src/ |
Pure layout and input helpers |
patches/ |
Reviewable Golden Balloon host changes |
docs/ |
Build, architecture, status, evidence, and policy details |
Join the Discord for help and news. It is one community for BarrelPad and its sibling projects, such as KartPad, BlueWake and MeleePad: ask about setup, building with PadMint, and installing, share how it runs on your device, and hear about new releases first.
Found a bug? Open an issue with your device, its OS version, and the steps that led to it.
BarrelPad exists because of Golden Balloon, the Diddy Kong Racing decompilation, and Apple-port interaction patterns proven in SpaghettiPad.
BarrelPad is an unofficial community project and is not affiliated with or endorsed by Nintendo, Rare, Microsoft, or their subsidiaries. Diddy Kong Racing and related names, characters, artwork, and trademarks belong to their respective owners. No game data is included.
BarrelPad is an unofficial, fan-made project. It is not affiliated with, endorsed by, or sponsored by Nintendo. Diddy Kong Racing and related names and marks are trademarks of Nintendo (and their respective owners). This repository contains no game data, ROMs, or extracted assets. To use it, you need your own legally obtained copy of the game, and you build it yourself on your own machine. Please don't share game files or builds made from them.