* Fix macOS arm64 build: fmt consteval error in the TorchExternal sub-build Torch's pinned spdlog bundles an fmt whose consteval format-string checking fails to compile under newer AppleClang (Xcode 16+), breaking the build-macos-arm64 CI job (the intel runner's older Xcode doesn't hit it): error: call to consteval function 'fmt::basic_format_string<...>' is not a constant expression Define FMT_CONSTEVAL as empty inside the Torch sub-build, falling back to fmt's pre-C++20 constexpr checking. Injected via CMAKE_PROJECT_INCLUDE because Torch's CMakeLists overwrites CMAKE_CXX_FLAGS, so plain flag injection through CMAKE_ARGS is discarded. Scoped to AppleClang; no other platform or compiler is affected, and the Torch pin is unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Also neutralize FMT_CONSTEVAL for the game build (vcpkg spdlog/fmt) With the TorchExternal fix in place, CI reaches the game build and hits the same consteval error again, this time from the vcpkg-provided spdlog/fmt headers (SPDLOG_FMT_EXTERNAL) under the runner's Xcode 26.5. Apply the same AppleClang-scoped FMT_CONSTEVAL= define at the project level so both layers compile. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Pin vcpkg fmt to 10.2.1 (+ spdlog 1.14.1): fmt 11.0.2 can't compile on new AppleClang The baseline's fmt 11.0.2 both fails to compile under newer AppleClang (consteval format-string checking) and removed the #ifndef guard around FMT_CONSTEVAL, so the AppleClang-scoped define from the previous commit lands on the compile line but gets clobbered by fmt's own definition (FMT_USE_CONSTEVAL is likewise unguarded in that version). No newer fmt exists in the pinned baseline. Override fmt to 10.2.1, which keeps the #ifndef guard, making the existing define effective; spdlog moves to the matching 1.14.1 (1.15.x requires fmt >= 11 headers). Verified locally against the exact CI setup (vcpkg at baseline 2e58bb35ff, vcpkg toolchain file, Ninja): the previous failure reproduces without this change and the full game builds cleanly with it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Add TODO markers for removing the fmt consteval workarounds Requested in PR #712 review: mark all three workaround sites (project-level define, Torch sub-build include, vcpkg fmt/spdlog pins) so they can be found and removed together once the Torch pin is bumped past its spdlog/fmt update. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: siliconports <aguthmann10@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Discord
Official Discord: https://discord.com/invite/shipofharkinian
If you're having any trouble after reading through this README, feel free ask for help in the SpaghettiKart Support text channels. Please keep in mind that we do not condone piracy.
Quick Start
SpaghettiKart does not include any copyrighted assets. You are required to provide a supported copy of the game.
1. Verify your ROM dump
The US ROM is the only supported version. You can verify you have dumped a supported copy of the game by using the SHA-1 File Checksum Online at https://www.romhacking.net/hash/. The hash for a US ROM is SHA-1: 579C48E211AE952530FFC8738709F078D5DD215E.
2. Verify your ROM is in .z64 format
Your ROM needs to be in .z64 format. If it's in .n64 format, use the following to convert it to a .z64: https://hack64.net/tools/swapper.php
2. Download SpaghettiKart from Releases
3. Generating the O2R from the ROM
Windows
- Extract every file from the zip into a folder of your choosing.
- Run "Spaghettify.exe" and select your US ROM.
Linux
- Extract every file from the zip into a folder of your choosing.
- Ensure
zenityorkdialogpackage is installed. - Run "spaghetti.appimage" and select your US ROM. You may have to chmod +x the appimage via terminal.
Nintendo Switch
- Run one of the PC releases to generate an
mk64.o2rfile. After launching the game on PC, you will be able to find these files in the same directory asSpaghettify.exeorspaghetti.appimage. - Copy the files to your sd card
4. Play
- Launch
Spaghettify.exeCongratulations, you are now sailing with SpaghettiKart! Have fun!
Configuration
Default controls configuration
| N64 | A | B | L | R | Z | Start | Analogue stick | C buttons | D-Pad |
|---|---|---|---|---|---|---|---|---|---|
| Keyboard | Shift | Ctrl | Q | Space | Z | Enter | Arrow keys | TGFH (↑ ↓ ← →) | Num 8 2 4 6 |
| SDL Gamepad | A | X | LB | RB | LT | Start | L-Stick | R-Stick Up, B, Y, R-Stick Right (↑ ↓ ← →) | D-Pad |
Other shortcuts
| Keys | Action |
|---|---|
| F11 | Fullscreen |
| Tab | Toggle Alternate assets |
| Ctrl+R | Reset |
| Esc | Settings |
Graphics Backends
Currently, there are three rendering APIs supported: DirectX11 (Windows), OpenGL (all platforms), and Metal (macOS). You can change which API to use in the Settings menu of the menubar, which requires a restart. If you're having an issue with crashing, you can change the API in the spaghettify.cfg.json file by finding the line "Backend":{... and changing the id value to 3 and set the Name to OpenGL. DirectX 11 with id 2 is the default on Windows. Metal with id 4 is the default on macOS.
Modding
Custom assets are packed in .o2r or stored .zip files. To use custom assets, place them in the mods folder.
There is an official gamebanana page.
If you're interested in creating and/or packing your own custom asset .o2r files, check out the documentation page.
Note that .otr archives are not supported in SpaghettiKart!
Development
Building
If you want to manually compile SpaghettiKart, please consult the building instructions.
Playtesting (nightly)
If you want to playtest a continuous integration build, you can find them at the links below. Keep in mind that these are for playtesting only, and you will likely encounter bugs and possibly crashes.
Maintainers: MegaMech, Coco, Kirito

