Skip to content

Compression

One-Shot

zig
const compressed = try brotli.compress(allocator, data);
defer allocator.free(compressed);

With Options

zig
const compressed = try brotli.compressWithOptions(allocator, data, .{
    .quality = 9,       // 0..11
    .lgwin = 22,        // 10..24
    .mode = .text,
    .size_hint = data.len,
});
defer allocator.free(compressed);

Streaming

zig
var sc = brotli.StreamingCompressor.init(allocator, .{ .quality = 9 });
defer sc.deinit();

var out = std.ArrayList(u8).empty;
defer out.deinit(allocator);
for (chunks) |chunk| {
    const piece = try sc.process(chunk);
    defer allocator.free(piece);
    try out.appendSlice(allocator, piece);
}
const tail = try sc.finish();
defer allocator.free(tail);
try out.appendSlice(allocator, tail);

Instance Encoder

For parameter IDs and progress callbacks see Encoder.

Preallocated Output

zig
var dst = try allocator.alloc(u8, brotli.maxCompressedSize(data.len));
defer allocator.free(dst);
_ = try brotli.decompressInto(allocator, try brotli.compress(allocator, data), dst);

Quality Guide

QualityUse case
0–2Real-time / throughput-bound
3–6Balanced
7–9Ratio-sensitive
10–11Maximum analysis (web assets)

Released under the MIT License.