Back home

CivSwitch

github 0.85
Visit source

Intro

CivSwitch is an open-source userland code-execution toolchain for Nintendo Switch (and tested Switch 2 firmwares) released by Gezine on November 1, 2026. It abuses an XSS bug in the physical Switch 1 cartridge of Civilization VII (game version 1.0.0 only): a Raspberry Pi Pico acts as a USB HID keyboard and types a long chat payload that boots a Remote JS Loader; an installer then writes a persistent save-data trigger so later boots only need "Load Game".

Coverage on GBAtemp and Japanese Switch-hack blogs framed it as a new offline entrypoint for Switch 2 homebrew while cartridge stock lasts.

Explain

Components

  • PicoSwitch — Pico firmware (RP2040/RP2350) that types the compressed chat XSS (~87 lines, ~15 minutes).
  • installer-creator — builds a boot-persistent XSTRIG.Civ7Save trigger for arbitrary JS payloads.
  • send_js.py — pushes JS to the live loader (TCP :9026).

Limits

Only Civ 7 cartridge 1.0.0; system language must be English (US) during install; future cartridge updates may kill the bug. Treat as research/homebrew tooling — not a consumer "jailbreak app".

Usage

  1. Get a Civ 7 physical Switch 1 cartridge on 1.0.0 and a Raspberry Pi Pico 2 (recommended).
  2. Build/flash PicoSwitch UF2 per the repo README; set Switch language to English (US).
  3. Host a wireless multiplayer lobby, focus chat, plug in the Pico and wait for the loader.
  4. Run python installer-creator/install.py <console-ip> then reboot and use Load Game.
  5. Send custom payloads with send_js.py. Revert language when done.