Installing NXSand on Nintendo Switch¶
NXSand ships as a homebrew .nro. You need a Switch setup that can run homebrew.
For controls, settings, and architecture, see the full documentation site.
Build Output¶
After make in a devkitPro shell:
| Artifact | Path |
|---|---|
| Switch NRO | build/NXSand.nro |
| Switch NSP forwarder | dist/switch/NXSand.nsp (make nsp; optional in CI) |
| Desktop binary | build/NXSand (make desktop) |
First Switch build: run powershell -File scripts\gen_icon.ps1 if romfs/icon.jpg is missing.
Install Switch portlibs once:
Install Methods¶
SD Card¶
- Copy
build/NXSand.nroto the microSD underswitch/, for exampleswitch/NXSand.nro. - Eject the card, boot the Switch, open Homebrew Menu, and launch NXSand.
FTP From Your PC¶
- Install Python 3 and
pip install pyftpdlib. - Run
scripts\serve-nro-ftp.ps1. - Upload
switch/NXSand.nrotosdmc:/switch/NXSand.nro.
Override the FTP port with $env:NXSAND_FTP_PORT = 2121. The legacy $env:NXENGINE_FTP_PORT is still accepted.
CI artifact¶
GitHub Actions uploads NXSand-switch (NXSand-switch.zip) with switch/NXSand.nro inside. When the repository secret SWITCH_PROD_KEYS is configured, the same zip also includes switch/NXSand.nsp. Unzip at the SD card root so the file lands at switch/NXSand.nro, or copy that path manually to sdmc:/switch/NXSand.nro.
Tagged releases use Actions → Release NXSand (workflow_dispatch) and attach three portable zips:
| Zip | Contents |
|---|---|
NXSand-switch-v*.zip |
switch/NXSand.nro (unzip at SD root); switch/NXSand.nsp when CI had SWITCH_PROD_KEYS |
NXSand-linux-v*.zip |
Flat folder: NXSand, shaders/, romfs/fonts/, run.sh |
NXSand-windows-v*.zip |
Flat folder: NXSand.exe, NXSand-run.bat, runtime DLLs, shaders/, romfs/fonts/ |
NSP forwarder (optional)¶
An NSP forwarder is a tiny installable title that launches the homebrew NRO at sdmc:/switch/NXSand.nro. You still need the .nro on the SD card; the forwarder only adds a Home-menu shortcut.
Build locally¶
- Install NTON:
pip install nton - Place your Switch
prod.keysat~/.switch/prod.keysor./prod.keys(from Lockpick on your own console). - After
makeandmake dist:
Output: dist/switch/NXSand.nsp. Title ID is fixed at 0100f2c0115b6000 so reinstalling updates the same forwarder.
CI / releases¶
Add repository secret SWITCH_PROD_KEYS (full prod.keys file contents). Switch CI jobs run scripts/export-nsp.py --skip-if-no-keys; without the secret they still publish the NRO zip only.
Install on Switch¶
- Copy
NXSand.nrotosdmc:/switch/NXSand.nro(required). - Install
NXSand.nspwith your CFW tool (Tinfoil, DBI, Goldleaf, etc.). - Launch NXSand from the Home menu. If the forwarder fails, launch the
.nrofrom the homebrew menu instead.
Forwarders need a CFW setup that allows unsigned NSP installs. Keep prod.keys private; never commit them.
Saves¶
| Platform | Directory |
|---|---|
| Switch | sdmc:/switch/nxsand/ |
| Desktop | ./nxsand_save/ |
Legacy saves under sdmc:/switch/nxengine/ or ./nxengine_save/ are migrated forward on first launch when possible. Save files use the nxsand JSON + base64 layout.
Shaders¶
Runtime shaders live in shaders/. The Switch build copies fragment, vertex, shared GLSL, and compute shaders into romfs/shaders/ via make prepare_romfs.
Troubleshooting¶
- The app file must be
sdmc:/switch/NXSand.nro, not inside the save folder. - Rebuild with
makeafter code or shader changes. - If the app opens then exits, NXSand shows a fatal text screen and writes
sdmc:/switch/nxsand/launch.logwhen possible. - Saves belong in
sdmc:/switch/nxsand/; the.nrobelongs insdmc:/switch/.