Not an emulator. The game's own code runs directly on the Apple chip, with Switch graphics rebuilt on Metal. Bring your own NSP files and prod.keys; one script turns them into an IPA you sideload.
A native port instead of emulation: the game's code is rewritten only where Apple's kernel requires it.
Each game's NSO modules are rewritten and run directly on the CPU. A host layer stands in for Horizon, the Switch OS: threads, memory, filesystem, audio and services.
NVN and Vulkan calls are implemented on Metal. Maxwell shaders are translated to SPIR-V, then to Metal Shading Language, at build time.
Nothing from any game ships here. The packing script reads your NSPs with your keys on your Mac and writes an unsigned IPA for you to sideload.
Every game has a small profile of constants and shader tables in dm/games/<title id>. Code reads the profile; it never hard-codes a game.
Built on d2r-mobile, Ryujinx's shader translator, Atmosphère, yuzu, LibHac, SPIRV-Cross and more. See the acknowledgements.
Pack an IPA on a Mac, sideload it, play. The first build takes 30–60 minutes, later ones about 10.
Requirements. A Mac with Xcode and Homebrew; free disk of about twice the NSPs' size plus 10 GB; a target iPhone 15 Pro or newer (A17 Pro+) or an iPad with M1 or later, on iOS / iPadOS 26+ (the games' BC-compressed textures need it).
Once, on the Mac.
git clone https://github.com/seedds/nxnative.git && cd nxnative
brew install xcodegen zstd spirv-cross
brew install --cask dotnet-sdk
python3 -m pip install lz4 capstone fonttools "backports.zstd; python_version < '3.14'"The base game (an NSP, or an XCI dump), its update and any DLC.
~/Games/MarioWonder/
Super Mario Bros. Wonder [010015100B514000][v0].nsp
Super Mario Bros. Wonder [010015100B514800][v327680].nspThe IPA appears in the same folder.
python3 scripts/build_ipa_from_nsp.py ~/Games/MarioWonder -k ~/keys/prod.keysInstall the IPA with AltStore, Sideloadly, LiveContainer or similar. The app takes the game's name, icon and version.
Tap 2D / 3D at the top to switch touch layouts. A connected controller hides the touch controls. In 3D, swipe the right third of the screen for the camera. Shake the phone to shake the controller.
All tested on an iPhone and playable. Pick one for its details.



































English by default. For Chinese add DM_LANG=zh-Hans to Documents/env.txt.
In the Files app under the app's name: save/ and log.txt. Send log.txt when something goes wrong.
Short stutters the first time a scene appears are normal: graphics compile once and are remembered.
Some sideloaders give a new data folder. Copy save/ and pso_user.tsv from the old one.
Lines in Documents/env.txt: DM_OPMODE=0 for handheld, DM_FPS_TARGET=30 to save battery, DM_SHOW_FPS=1 for an FPS counter.
No amiibo, no online features. Other games get a survey and a best-effort IPA that may not start.