A native Mach-O iOS/macOS port of GTA V, with multiplayer
this whole port relies on the WebAssembly compilation of the game. in a browser, that game.wasm runs inside the JS engine, behind WebGPU, Web Audio, web workers...
Muguet throws that layer away and runs the same game.wasm as a regular native app, with wasmtime for the code and wgpu on Metal for the graphics
On macOS, the game code is compiled to native arm64 the first time you launch it, then cached. On iOS, we can't properly do that (i dont rlly want you to deal with the hassle of enabling JIT), so the game code is compiled when you build the app and baked into it
On top of that, Muguet adds a small UDP multiplayer (for other people who have the same port to play with you)
Because I care about me not getting sued, you will need your own copy as a .zip : the folder holding data/ and b/<build>/ (with game.wasm and shaders/)
It's basically the same source as the web port.
Muguet itself will then asks for that zip
- Apple Silicon Mac, macOS 14 or later
- Rust toolchain
- Xcode 26 or later
For iOS, also :
rustupwithrustup toolchain install 1.98.1andrustup target add aarch64-apple-ios --toolchain 1.98.1xcodegen(brew install xcodegen)- an Apple developer account
- a device on iOS 15 or later, ideally 8 GB of RAM
The easy way, paste this in Terminal :
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/c22dev/muguet/main/build.sh)"
It downloads Muguet into /tmp/muguet, installs what's missing (Homebrew, Rust...), then asks whether you want the Mac or the iOS version and walks you through the rest. The .app / .ipa end up in ~/Downloads/muguetOutput. Already have the repo ? Double-click build.command, or run ./build.sh
You need Xcode 26 or later from the App Store. To install on your iPhone / iPad, sign in to Xcode with your Apple ID (Settings > Accounts), a free one works
By hand, macOS :
./make-app.sh
gives build/Muguet.app
iOS :
TEAM=<your team id> ./make-ios.sh game.zip --install
--ipa makes build/Muguet.ipa instead. With a free account, add FREE=1 (+ a BUNDLE_ID of your own)
Please install this app with AltStore. This probably won't work well with Sideloadly (or even SideStore, as per [this issue])(SideStore/SideStore#1616)
The app also works with a paid developer account.
One player hosts from the launcher (or runs muguet-server on any machine), the others join with that address. UDP port 47520
- iOS needs the increased memory limit entitlement
- Story missions are single player only
- Kagander for fixing the minimap
- inj-src for decoding bc textures on all cores
- Dbhardwaj99 for reporting real free disk space
- dre4moff for releasing controller input when the app loses focus
- divyanshugarg36 for keyboard support on iOS, the memory limit on free accounts and the frame rate label
Contributions are welcome !