Repository navigation
Home
github-actions[bot] edited this page Oct 9, 2026
·
3 revisions
RVZSharp is a .NET 8 / 9 / 10 library and command-line tool for GameCube and Wii disc images. It reads the modern RVZ container (and its predecessor WIA), decodes the classic legacy formats (GCZ, CISO/WBI, WBFS, TGC, NFS) into a canonical ISO view, and writes RVZ, WIA and GCZ files from any of them — mirroring the behaviour of the reference implementations in Dolphin (C++) and the Go rvz reader.
| Target frameworks |
net8.0, net9.0, net10.0
|
| Solution file | CSharp_RVZSharp.sln |
| Tests | 609 fast library tests (every framework, ~1 min) + 57 CLI tests + 276 real-file slow tests — the solution runs fast-only by default (dotnet test CSharp_RVZSharp.sln -c Release); run the slow suite explicitly with dotnet test RVZSharp.Slow.Tests -c Release
|
| Read support | RVZ, WIA, GCZ, CISO/WBI, WBFS, TGC, NFS, plain ISO |
| Write support | RVZ (None, Zstd, Bzip2, LZMA1, LZMA2; optional PRNG-junk packing), WIA (None, PURGE, Bzip2, LZMA1, LZMA2) and GCZ (zlib deflate) |
| Reference sources |
References/dolphin-master/ (C++), References/rvz-1.0.3/ (Go) |
| Page | What it covers |
|---|---|
| What's new | Release highlights (1.1.0, 1.0.0) |
| Getting started | Prerequisites, build, test, first commands |
| Packaging & distribution | NuGet package contents, build, publish, versioning |
| CLI reference |
convert, header, verify, extract (+ legacy info/decode) — options and examples |
| Library API |
Blob, RvzReader, RvzWriter, WiaWriter, GczWriter, DiscFileSystem, DiscHasher, codecs, packing API |
| Architecture | Module map, read/write pipelines, design decisions |
| RVZ container format | File head, disc struct, tables, groups, chunking |
| Compression & packing | Codec details and the Lagged-Fibonacci junk packing |
| Wii partitions | Encryption, hash tree, hash exceptions, tickets |
| Legacy formats | GCZ, CISO/WBI, WBFS, TGC, NFS byte layouts |
| Testing | Test strategy and synthetic image builders |
| Release notes | 1.1.0 and 1.0.0 announcement content (GitHub release posts) |
| Roadmap & status | Milestones, limitations, open questions |
| FAQ | Common questions |
- Byte offsets and sizes are hexadecimal unless stated otherwise (
0x…). - Multi-byte integers are big-endian (network order) unless a page says otherwise.
- The format pages describe the on-disk layout as implemented by Dolphin and verified by
this project's tests; they are an implementation companion to
References/dolphin-master/docs/WiaAndRvz.md.
These pages are published twice from the same files, automatically:
-
GitHub Pages (
.github/workflows/pages.yml) builds this folder with Jekyll on everymasterpush touchingdocs/;index.mdrenders this page as the home page and the side menu comes from_data/nav.ymlrendered by_layouts/default.html. Internal links use the.mdform, which Jekyll converts to.html. -
GitHub Wiki (
.github/workflows/wiki.yml) mirrors these pages to the wiki root on the same trigger (README.md→Home.md,format/*.md→format/…subpages,_Sidebar.mdkept as the wiki sidebar, Jekyll-only files dropped); relative links are rewritten to the extensionless wiki form. The wiki is fully generated — edit these files, never the wiki pages.
Releases (bundled CLI zips, NuGet publishing) and the automation setup are documented in Packaging & distribution.
-
Blob abstraction — every format is opened through the same
IBlobReaderinterface; the format is auto-detected from its magic bytes, soinfo,decodeandconvertaccept any supported file. - Canonical ISO view — all readers expose the decoded disc as a random-access stream of ISO bytes, so a GCZ, a WIA and an RVZ of the same disc are interchangeable inputs.
- RVZ/WIA/GCZ writing — the RVZ/WIA writer stores Wii partition data decrypted with hash exceptions (the same space-saving trick Dolphin uses), detects and packs PRNG junk with a recovered seed (RVZ), and emits fully checksummed tables (SHA-1 everywhere Dolphin puts them); GCZ is written as Dolphin-compatible zlib blocks with per-block Adler-32s.
-
File system access —
DiscFileSystemparses the GameCube/Wii FST (case-insensitive lookup, file streaming through decrypted partition views), and the CLIextractcommand lists/extracts the tree and the standard system data per partition. -
Parallel and async — RVZ/WIA chunk decoding and group compression run on bounded
worker pools (
--threads; output byte-identical for any thread count), and the async API (CopyToAsync/ReadFullyAsync/WriteAsync) wraps the CPU-bound work for UI consumers. -
Verifiable — every conversion is byte-exact: the test suite round-trips synthetic
discs through every codec, packing setting and chunk size, decodes 90 real GameCube/Wii
RVZ files byte-for-byte against their official No-Intro SHA-1s, re-encodes real GC/Wii
images back to RVZ, and
DiscHasher/the CLI can verify decoded output (--sha1,verify).