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 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 |
313 fast (every framework, ~30 s) + 97 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) |
| Reference sources |
References/dolphin-master/ (C++), References/rvz-1.0.3/ (Go) |
| Page |
What it covers |
| Getting started |
Prerequisites, build, test, first commands |
| Packaging & distribution |
NuGet package contents, build, publish, versioning |
| CLI reference |
info, decode, convert — options and examples |
| Library API |
Blob, RvzReader, RvzWriter, 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.0.0 announcement content (GitHub release post) |
| Roadmap & status |
Milestones, limitations, open questions |
| FAQ |
Common questions |
Conventions used in this wiki
- 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.
- Blob abstraction — every format is opened through the same
IBlobReader interface; the format is auto-detected from its magic bytes, so info,
decode and convert accept 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 writing — the 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, and emits fully checksummed tables (SHA-1 everywhere Dolphin puts them).
- Verifiable — every conversion is byte-exact: the test suite round-trips synthetic
discs through every codec, packing setting and chunk size, decodes 30 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 the CLI can verify decoded output with --sha1.