Skip to content
github-actions[bot] edited this page Nov 6, 2026 · 10 revisions

CI Docs .NET NuGet NuGet downloads Release License Tests Platforms Architectures GitHub stars Downloads Last commit Issues Language Repo size Contributors

RVZSharp Documentation

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 613 fast library tests (every framework, ~1 min) + 97 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)

Documentation map

Page What it covers
What's new Release highlights (1.2.0, 1.1.1, 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
Contributing Development setup, conventions, tests and pull requests
Security Vulnerability reporting, supported versions and repository protections
API reference Generated DocFX reference for the public library API
Release notes 1.2.0, 1.1.1, 1.1.0 and 1.0.0 announcement content (GitHub release posts)
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.

Wiki and Pages

These pages are published twice from the same files, automatically:

  • GitHub Pages (.github/workflows/pages.yml) builds this folder with Jekyll on every master push touching docs/; it first generates the DocFX API reference from the library XML comments into /api/, then README.md is the home page (permalink: /) and the side menu comes from _data/nav.yml rendered by _layouts/default.html. Internal links use the .md form, 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.md kept 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.

Feature overview

  • 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/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 — DiscFileSystem parses the GameCube/Wii FST (case-insensitive lookup, file streaming through decrypted partition views), and the CLI extract command 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).

Clone this wiki locally