A utility library for Zstandard compression and decompression
$ dotnet add package Soenneker.Compression.Zstandard
Soenneker.Compression.Zstandarddotnet add package Soenneker.Compression.Zstandard
This package is a fully managed C# Zstandard implementation (no native libzstd, no external binaries).
Current codec status:
.zst frames using fast RAW/RLE block paths (single-threaded).using Soenneker.Compression.Zstandard.Abstract;
// via DI
byte[] compressed = zstandardUtil.Compress(data);
byte[] decompressed = zstandardUtil.Decompress(compressed);
Allocation-free hot path:
int max = zstandardUtil.GetMaxCompressedLength(source.Length);
Span<byte> compressed = max <= 4096 ? stackalloc byte[max] : new byte[max];
if (zstandardUtil.TryCompress(source, compressed, out int compressedBytes))
{
Span<byte> decompressed = new byte[source.Length];
zstandardUtil.Decompress(compressed[..compressedBytes], decompressed);
}