Modern desktop GUI for Nintendo Switch game file operations: compress, decompress, merge, convert, split, and repack (NSP, XCI, NSZ, XCZ, NCZ).
Built with Tauri v2 + React + Vite. Powered by nscb_rust.
- Compress NSP/XCI to NSZ/XCZ (zstd level 1-22)
- Decompress NSZ/XCZ/NCZ back to NSP/XCI
- Merge base + update + DLC into one NSP/XCI
- Convert between NSP and XCI
- Split multi-title files into per-title folders
- Create/Repack NSP from split folders
- Drag & drop file input
- Live output console + progress tracking
- Batch support for compress/decompress/convert/split
- Dark theme UI with SVG iconography and file type badges
- Auto-download
nscb_rust.exefrom GitHub releases, or import manually - First-launch setup wizard for encryption keys
- Windows 10/11
- WebView2 runtime
- Switch keys file (
prod.keysorkeys.txt) nscb_rust.exebackend binary (auto-downloaded or imported via Settings)
- Run
nscb-desktop.exedirectly (standalone, no install needed), or use the NSIS/MSI installer. - On first launch, the setup wizard prompts you to import encryption keys (
prod.keysorkeys.txt). - If
nscb_rust.exeis missing, a banner directs you to Settings > Tools where you can download it from GitHub or import manually. - Files are copied to a temporary tools directory (
%TEMP%\nscb-desktop-tools). - Pick an operation from the sidebar and drop your files.
Requires Rust + Node.js (v18+).
npm install
npm run dev # Tauri dev mode (hot reload)
npm run dev:vite # Vite dev server only (no Tauri)# NSIS installer
npm run build
# Portable folder at release/NSCB Desktop/
npm run dist:portablenscb-desktop/
|- ui/ # Frontend (React + TypeScript)
| |- App.tsx # All components + pages (config-driven)
| |- App.css # Dark theme design system
| |- main.tsx # Entry point
| `- lib/
| |- api.ts # Tauri plugin wrappers
| `- nscb-runner.ts # Sidecar process + progress parsing
|- src-tauri/ # Tauri v2 / Rust backend
| |- src/lib.rs # Commands: run_nscb, import_keys, etc.
| |- tauri.conf.json # Window config, sidecar, bundling
| `- capabilities/ # Security permissions
`- scripts/portable.mjs # Portable folder assembly
- Operation pages are config-driven via a generic
OperationPagecomponent — adding a new operation only requires a config object. - Backend and key files are imported at runtime into
%TEMP%\nscb-desktop-tools. - The app uses native window decorations (no custom titlebar).
ISC