Repository navigation
nxformat 1.0.2
NXFormat 1.0.2
NXFormat 1.0.2 fixes the titles of games converted from recent NUP files,
improves NXConvert, adds full NX extraction and makes the C library smaller. It includes the NXConvert desktop application and
CLI, the Rust archive writer, the C API and the header-only C++17 reader. The
NX format is unchanged: archives stay readable by 1.0.1 readers, and by 1.0.0
readers when they hold no firmware.
What is new in 1.0.2
NUP metadata
pack-nupreads the metadata of NUP files made bynupversions whose
metadata types are shifted by one (NPDM = 0, NACP = 1, ...). Before, such
games got the publisher as title, the build ID as publisher and the title as
display version. Files with the specified types are read as before.
NXConvert
- Metadata sidebar to edit the title, publisher and icon, and restore the
original icon. - Large NUP sources are supported, the source size is shown apart from the
estimated progress, and a conversion cancels faster. - Folders of the same dump dropped one by one become a single NX.
nxconvert extract ARCHIVE.nx NEW_FOLDERand the Extract all… button
write every snapshot in the layout of a dump:base/,updates/<version>/
anddlc/<title>/<version>/, withexefs/andromfs/. Each file is
checked with SHA-256. Content kept as NCA files only gives its ExeFS.
Smaller C library
- The C API is built for size: about a third smaller. Zstandard and SHA-256
keep full optimization, so conversion runs at the same speed. - Release archives add
nxformat_static_nozstd(CMakenxformat::static_nozstd):
the static library without Zstandard, for programs that already link
libzstd 1.5.7 or later. The program then holds a single copy of zstd.
Changes in 1.0.1
- DXCI/DNSP packs keep the bundled system update as a Source Resource (NX 0.3,
readable from 1.0.1 only);--omit-firmwareleaves it out. read()returns aPartialRead,Sessiondecodes on a worker pool, the
block cache no longer serializes readers, andArchive::lookupuses a
binary search.- Robustness fixes: no recursion on snapshot trees, I/O errors on the newest
generation are reported, andaddwith recipes is atomic.
Features
- Convert supported already-decrypted DNSP/DXCI packages, extracted trees and
NUP v1 archives into NX. - Add updates and DLC, remove snapshots and compact unused space.
- Store new game-data blocks without compression using CLI
--no-compress
or the desktop Non preset. Remove existing game-data compression with
compact ARCHIVE.nx --no-compress. Deduplication and integrity checks remain active. - Read independent RAW/Zstandard blocks with per-slice CRC-32C checks; verify
archive metadata, Media payloads and logical files with SHA-256. - Keep supported native-package reconstruction recipes by default; exact
rebuilding requires the recipe and all referenced file content. - Embed commands through the C API, including callback-backed plaintext sources,
progress reporting and cancellation.
NXConvert does not decrypt content or provide keys or game files. Emulator
compatibility depends on the emulator integration and the selected content.
This release is NXFormat / NXConvert 1.0.2, with separate 4096-byte header
pages. The exact binary header fields are defined in the format specification.
Packages
| Package | Contents |
|---|---|
| Windows x64 | NXConvert app, shared/static libraries and headers |
| Linux x64 / arm64 | NXConvert app, shared/static libraries and headers |
| macOS universal | NXConvert app bundle, CLI, shared/static libraries and headers |
| Android arm64 | Shared/static libraries and headers, no desktop app |
Release archives include CMake package configuration. SHA256SUMS is published
as a separate attachment. nxformat-xmake-1.0.2.zip contains the xmake package
repository populated with those archive hashes. Extract it and register the
local directory with xmake. Publication adds no commits to the source repository.
Build NXConvert from source with Rust 1.95 or newer:
cargo build --release --locked --manifest-path app/Cargo.tomlThe Rust writer and C API support Rust 1.80 or newer. The independent C++ reader
requires C++17 and a caller-supplied Zstandard decoder for compressed blocks.
See the README, CLI guide, reader guide
and format specification for usage and integration.