NinjaCheetah 0d34fbc383 Added iospatcher to lib and CLI
Everything but the no-shared flag is working right now. Getting no-shared to work properly will take a little more work because right now there's nothing to guarantee that the content records are synced between the TMD and content objects in a title. This means that updating any content in a title will result in the records being out of sync and the written TMD will not match the actual state of the content when it was dumped.
To mitigate this, I intend on making the content records in the content struct a reference to the content records in the TMD, so that they are the same object and therefore always in sync.
2026-02-27 19:05:24 -05:00
2026-02-27 19:05:24 -05:00
2026-02-26 16:42:35 -05:00

rustwii-banner

rustwii

Like rusty but it's rustwii because the Wii? Get it?

Build rustwii

rustwii is a library and command line tool written in Rust for handling the various files and formats found on the Wii. rustwii is a port of my other library, libWiiPy, which aims to accomplish the same goal in Python. At this point, rustwii should not be considered stable, however it offers most of the same core functionality as libWiiPy, and the rustwii CLI offers most of the same features as WiiPy. You can check which features are available and ready for use in both the library and the CLI below. The goal is for rustwii and libWiiPy to eventually have feature parity, with the rustwii CLI acting as a drop-in replacement for the (comparatively much less efficient) WiiPy CLI.

There is currently no public documentation for rustwii, as I'm putting that off until I reach feature parity with libWiiPy so that the APIs are an equal level of stable. You can, however, reference the doc strings present on many of the structs and functions, and build them into basic documentation yourself (using cargo doc --no-deps). The libWiiPy API docs may also be helpful in some cases.

I'm still very new to Rust, so pardon any messy code or confusing API decisions you may find. libWiiPy started off like that, too.

What's Included (Library-Side)

  • Structs for parsing and editing WADs, TMDs, Tickets, and Certificate Chains
  • Title Key and content encryption/decryption
  • High-level Title struct (offering the same utility as libWiiPy's Title)
  • Content addition/removal/replacing
  • LZ77 compression/decompression
  • ASH decompression
  • U8 archive packing and unpacking
  • NUS TMD/Ticket/certificate chain/content downloading

What's Included (CLI-Side)

  • WAD converting/packing/unpacking
  • WAD content addition/removal/replacement
  • NUS TMD/Ticket/Content/Title downloading
  • LZ77 compression/decompression
  • ASH decompression
  • Fakesigning command for WADs/TMDs/Tickets
  • Info command for WADs/TMDs/Tickets/U8 archives
  • U8 archive packing/unpacking

To see specific usage information, check rustwii --help and rustwii <command> --help.

Building

rustwii is a standard Rust crate. You'll need to have Rust installed, and then you can simply run:

cargo build --release

to compile the rustwii library and CLI. The CLI can then be found at target/release/rustwii(.exe).

You can also download the latest nightly build from GitHub Actions.

Description
A work-in-progress port of libWiiPy to Rust
wii
Readme MIT 870 KiB
Languages
Rust 100%