a55uka/nup

Games

Packs decrypted Switch game dumps into a single compressed .nup container, with a Python tool to pack, inspect and extract.

101
3
Python
new today

What it is

NUP is a clean-room container format for unencrypted Nintendo Switch and Switch 2 game dumps. It keeps ExeFS program files alongside full RomFS trees, so base content, updates and DLC all live in one compressed .nup file rather than a scattered directory tree. The repo contains the format definition in SPEC.md and a Python reference implementation under tools/nup/ README.

The format is aimed at people who already have decrypted NX dumps and want a tidy, single-file way to store or move them. The README notes that the author is not aware of a decryption path for Switch 1 games, so the tool acts on already-decrypted content README.

Quick start

Prepare a dump directory laid out as the tools expect:

base/            updates/458752/      dlc/040074a01bf13001/0/
├─ exefs/        ├─ exefs/            └─ romfs/
└─ romfs/        └─ romfs/

Install the reference implementation and pack the directory into a .nup file:

pip install ./tools/nup
nup pack <dump_dir> <out.nup> --level N --title-id HEX --display-version V

pack auto-discovers base/, updates/<version>/ and dlc/<titleid>/<index>/; a bare content directory containing only exefs/ and romfs/ packs as a single base package. Title IDs are read from main.npdm, and dump-tool .listing artifacts are excluded by default README.

Once packed, you can inspect or extract the archive:

nup info <file.nup> --tree
nup list <file.nup>
nup extract <file.nup> <dest> --package base --subtree romfs
nup verify <file.nup> --fast

Alternatively, run the CLI without installing it by setting PYTHONPATH=tools/nup and calling python3 -m nup.cli README.

Constraints

You need to supply already-decrypted content; the format does not handle decryption. The README only discusses Switch 2 packaging confidently and leaves Switch 1 decryption unspecified README. The repository declares no license, which matters if you plan to redistribute the tool or the format implementation.

HotRepo's take

The repo records 101 stars and 3 forks in a single Python new-entry snapshot on 2026-11-02, covering a roughly 13-hour growth window from 2026-11-01. That is the only recorded snapshot, so it shows initial pick-up rather than an established trend. The project is narrowly scoped — a spec plus a reference packer — so its appeal will be judged by whether people need a single-file container for decrypted dumps, not by the early star count.

Written by AI from the project's README, updated . The project's own docs are the source of truth.