Repository navigation
Releases: purelogiccode/RVZSharp
Release list
RVZSharp 1.1.1
RVZSharp 1.1.1 Release Notes
RVZSharp 1.1.1 is a correctness and packaging patch. The public API stays compatible
with 1.0.0 (validated at pack time against the published package via
PackageValidationBaselineVersion), so upgrading is a drop-in.
dotnet add package RVZSharp
What's new
Zstandard encoder memory (max level)
- One-shot compression —
ZstdEncodernow compresses each chunk with a single
ZSTD_compress2call (like Dolphin'sZstdCompressor) instead of a streaming
session. A streaming session without a pledged source size reserves the level's full
window before seeing any input (~128 MiB per worker at level 22), which exhausted
memory when groups were compressed in parallel on modest machines; one-shot sizing
caps the window at the chunk size. The output is unchanged standard Zstandard: a
level-22 file decodes byte-identically in Dolphin'sdolphin-tool. - Pinned by
Zstd_MaxLevel_ParallelRoundTripplus a bidirectionaldolphin-tool
interop matrix (zstd, lzma, lzma2, bzip2, none at 2 MiB and 128 KiB blocks, both
directions, SHA-1-compared against real game images).
Packaging
- No more empty symbols package — the assemblies carry embedded portable PDBs, so
the.snupkgbuild carried no symbol files and nuget.org rejected it; only the
.nupkgships now. Debuggers read the embedded PDBs directly.
CLI downloads (1.1.1 bundles)
The 1.1.1 bundles are framework-dependent single-file executables: install the
.NET 10 Runtime once, then unzip
and run:
| File | Platform |
|---|---|
rvzsharp_v1.1.1_win-x64.zip |
Windows 10/11, x64 |
rvzsharp_v1.1.1_win-arm64.zip |
Windows 11, arm64 |
rvzsharp_v1.1.1_linux-x64.zip |
Linux, x64 |
rvzsharp_v1.1.1_linux-arm64.zip |
Linux, arm64 |
rvzsharp_v1.1.1_osx-x64.zip |
macOS, Intel |
rvzsharp_v1.1.1_osx-arm64.zip |
macOS, Apple Silicon |
Each zip holds the RVZSharp executable (RVZSharp.exe on Windows) plus LICENSE,
README.md, WhatsNew.md and THIRD-PARTY-NOTICES.md. Verify downloads against
SHA256SUMS.txt.
Trust, verified
- 610 library tests on each of
net8.0/net9.0/net10.0plus 57 CLI tests and
a 276-test real-file suite (90 GameCube/Wii RVZ games decoded against their official
No-Intro SHA-1s and re-encoded back to the same hash), plus a fulldolphin-tool
codec interop matrix in both directions. - Audited against Dolphin's implementation and the
rvz-1.0.3Go reference; every
divergence pinned by a regression test.
Install & documentation
| NuGet | RVZSharp 1.1.1 |
| Docs | the docs/ wiki — format specs, library API, CLI reference |
| Repository | github.com/purelogiccode/RVZSharp |
License
GPL-2.0-or-later — the RVZ/WIA format logic derives from
Dolphin, and the library is licensed under the
same terms Dolphin uses. All dependencies and third-party components are credited in
THIRD-PARTY-NOTICES.md.
RVZSharp 1.1.0
RVZSharp 1.1.0 Release Notes
RVZSharp 1.1.0 is a feature and correctness release. The public API stays compatible
with 1.0.0 (validated at pack time against the published package via
PackageValidationBaselineVersion), so upgrading is a drop-in.
dotnet add package RVZSharp
What's new
Formats & verification
- Legacy writers —
CisoWriter,WbfsWriterandTgcWritercomplete the container
matrix and are exposed asconvert -f ciso|wbfs|tgc; all-zero blocks/clusters are
stored absent, so scrubbed images shrink. - Wii verification —
DiscVerifierwalks every partition's h0/h1/h2/h3 hash tree
plus the TMD/H3 tables and reports per-partition issues (verify --partitions). - Retail ticket keys — partition keys are decrypted from the ticket with the Wii
common key (Dolphin:TicketReader::GetTitleKey), soverify --partitions,extract
and RVZ writing work on real encrypted discs; RVZ/WIA inputs prefer the container's
authoritative partition key.WiiVolume.GetTitleKey(ticket)exposes the decryption. - Extract fixes —
tmd.bin/cert.bin/h3.binare read at their partition-relative
offsets,h3.binis skipped for hashless discs, and partition headers are printed by
extract --list. - WBFS fixes —
hd_sector_countis relative to the stream position, and the disc
header copy is written at offset0x200for tools that identify discs without
decoding. - Zero-group decode — RVZ/WIA partition chunks that are entirely zeroes are decoded
back to zeroes instead of rejecting the missing exception lists.
CLI
--jsonforconvertandverify,-stdin/stdout piping, and
rvzsharp completions bash|zsh|fish|powershell. Logs and progress go to stderr, so
stdout stays machine-readable.convert --verifyhonors Ctrl+C (exit code 130), writer progress reaches exactly
1.0, and the update check never blocks help runs.- Extract path safety —
-spaths and image file names can no longer escape the
output folder; hostile names fail with a format error.
Performance & robustness
- Thread-safe
ReadAtwith a 16 MiB LRU decoded-unit cache, binary-search area lookup
and ArrayPool group reads. - Parallel group compression and parallel RVZ/WIA full-image decode (
--threads,
byte-identical output for any thread count); Native AOT/trimming validated. IBlobReader.Length, the async API (CopyToAsync/ReadFullyAsync/WriteAsync),
split plain ISO (game.part0.iso),BlobStream,DiscInfo,Scruband path
overloads.
CLI downloads (1.1.0 bundles)
The 1.1.0 bundles are framework-dependent single-file executables: install the
.NET 10 Runtime once, then unzip
and run. They are far smaller than the self-contained 1.0.0 bundles and now cover six
runtimes, including macOS:
| File | Platform |
|---|---|
rvzsharp_v1.1.0_win-x64.zip |
Windows 10/11, x64 |
rvzsharp_v1.1.0_win-arm64.zip |
Windows 11, arm64 |
rvzsharp_v1.1.0_linux-x64.zip |
Linux, x64 |
rvzsharp_v1.1.0_linux-arm64.zip |
Linux, arm64 |
rvzsharp_v1.1.0_osx-x64.zip |
macOS, Intel |
rvzsharp_v1.1.0_osx-arm64.zip |
macOS, Apple Silicon |
Each zip holds the RVZSharp executable (RVZSharp.exe on Windows) plus LICENSE,
README.md, WhatsNew.md and THIRD-PARTY-NOTICES.md. Verify downloads against
SHA256SUMS.txt.
Upgrading from 1.0.0? The 1.0.0 bundles were self-contained; 1.1.0 bundles require the
.NET 10 Runtime to be installed.
Trust, verified
- 609 library tests on each of
net8.0/net9.0/net10.0plus 57 CLI tests and
a 276-test real-file suite (90 GameCube/Wii RVZ games decoded against their official
No-Intro SHA-1s and re-encoded back to the same hash). - Audited against Dolphin's implementation and the
rvz-1.0.3Go reference; every
divergence pinned by a regression test.
Install & documentation
| NuGet | RVZSharp 1.1.0 |
| Docs | the docs/ wiki — format specs, library API, CLI reference |
| Repository | github.com/purelogiccode/RVZSharp |
License
GPL-2.0-or-later — the RVZ/WIA format logic derives from
Dolphin, and the library is licensed under the
same terms Dolphin uses. All dependencies and third-party components are credited in
THIRD-PARTY-NOTICES.md.
v1.0.0
RVZSharp 1.0.0 Release Notes
A pure managed .NET library and CLI for reading/writing Dolphin RVZ disc images and
decoding the legacy GameCube/Wii formats — byte-for-byte, cross-checked against real games
and the official No-Intro SHA-1s.
dotnet add package RVZSharp
What's included
- RVZ/WIA reader — full container validation (magic, versions, every SHA-1, structure
rules) and random-access decoding back to the original disc image, byte-for-byte - Legacy decoders — GCZ, CISO/WBI, WBFS (incl. split files), TGC, NFS, plain ISO — all
auto-detected through oneBlob.Open(...) - RVZ writer — converts any supported image to RVZ like Dolphin does: all five codecs
(None, BZip2, LZMA1, LZMA2, Zstd incl. negative "fast" levels), chunk sizes
32 KiB–4 MiB, PRNG-junk packing with seed recovery,--scrub, progress reporting and
cancellation - Wii partitions — SHA-1 hash trees (h0/h1/h2), hash exceptions, AES-128-CBC —
decrypted/re-encrypted exactly like Dolphin produces - Targets:
net8.0,net9.0,net10.0— 100% managed, no native code - Fully documented API — XML docs on every public/internal type and member (shipped in
the package)
Quick start
using RVZSharp;
using RVZSharp.Blobs;
using var blob = Blob.Open(@"game.rvz"); // any format, auto-detected
using var reader = RvzReader.Open(file);
var iso = reader.ReadFully(); // byte-exact ISO
using var output = File.Create(@"game.rvz");
RvzWriter.Write(Blob.Open(@"game.iso"), output,
new RvzWriteOptions { Compression = CompressionType.Zstd, CompressionLevel = 5 });CLI (rvzsharp):
rvzsharp header -i game.rvz
rvzsharp verify -i game.rvz -a sha1
rvzsharp convert -i game.iso -o game.rvz -f rvz -c zstd -l 5 -b 131072
Trust, verified
- 410 tests — 313 synthetic round-trips (~30 s) plus a 97-test real-file suite decoding
actual GameCube/Wii RVZ images against their official No-Intro DAT SHA-1s and re-encoding
them back to the same hash, on machines with the games mounted
(F:\Nintendo GameCube/F:\Nintendo Wii) - Audited against Dolphin's implementation and the
rvz-1.0.3Go reference; every
divergence pinned by a regression test - Cross-platform: single-file self-contained binaries for Windows and Linux (x64 + arm64);
the library runs on any platform the runtime supports
Install & documentation
| NuGet | RVZSharp 1.0.0 |
| Docs | the docs/ wiki — format specs, library API, CLI reference |
| Repository | github.com/purelogiccode/RVZSharp |
License
GPL-2.0-or-later — the RVZ/WIA format logic derives from
Dolphin, and the library is licensed under the
same terms Dolphin uses. All dependencies and third-party components (MIT LZMA decoder port,
MIT/public-domain runtime codecs, BSD Go reference) are credited in
THIRD-PARTY-NOTICES.md.
Assets
| File | Size |
|---|---|
rvzsharp_v1.0.0_win-x64.zip |
31.97 MB |
rvzsharp_v1.0.0_win-arm64.zip |
30.57 MB |
rvzsharp_v1.0.0_linux-x64.zip |
31.92 MB |
rvzsharp_v1.0.0_linux-arm64.zip |
30.08 MB |
Full Changelog: https://github.com/purelogiccode/RVZSharp/commits/v1.0.0