How qvxlabs/zopfli works
Zopfli is a compression library and toolchain that turns input bytes into deterministic DEFLATE, zlib, or gzip streams, plus a PNG optimizer built on that engine. The main workflow is caller or CLI → public compression API → LZ77 analysis and iterative optimization → DEFLATE encoding → container output. PNG requests additionally pass through decoding, color/filter optimization, metadata preservation, and re-encoding. Go bindings expose both compression and PNG optimization. Some internal wiring is inferred only where documented or visible in sampled excerpts.
Components 21
Public Interfaces
- C Compression API
src/zopfli/zopfli_lib.c - Zopfli CLI
src/zopfli/zopfli_bin.c - PNG Optimizer CLI
src/zopflipng/zopflipng_bin.cc
Compression Engine
- Compression Context
src/zopfli/context.h - LZ77 Parser
src/zopfli/lz77.c - Match Cache
src/zopfli/cache.c - Match Hashing
src/zopfli/hash.c - Path Optimizer
src/zopfli/squeeze.c - DEFLATE Encoder
src/zopfli/deflate.c - Stream Containers
src/zopfli/gzip_container.c
PNG Optimization
- PNG Optimizer API
src/zopflipng/zopflipng_lib.cc - PNG Codec
src/zopflipng/lodepng/lodepng.cpp - Color Filter Choices
src/zopflipng/zopflipng_lib.cc - PNG Metadata
src/zopflipng/zopflipng_lib.cc
Language Bindings
- Go Compression Binding
go/zopfli/zopfli.go - Go PNG Binding
go/zopflipng/zopflipng.go
Other components
- Application or CLI User
- Compressed Stream
- PNG Input
- Optimized PNG
- Standard Decoder
Connections 26
- Application or CLI User → C Compression API: submits bytes
- Application or CLI User → PNG Optimizer API: submits PNG
- Zopfli CLI → C Compression API: calls API
- PNG Optimizer CLI → PNG Optimizer API: calls API
- C Compression API → Compression Context: initializes
- C Compression API → DEFLATE Encoder: encodes format
- C Compression API → Stream Containers: wraps stream
- Compression Context → LZ77 Parser: carries options
- DEFLATE Encoder → Path Optimizer: optimizes blocks
- DEFLATE Encoder → LZ77 Parser: builds symbols
- DEFLATE Encoder → Stream Containers: writes payload
- LZ77 Parser → Match Hashing: finds matches
- LZ77 Parser → Match Cache: caches matches
- Path Optimizer → LZ77 Parser: chooses paths
- Stream Containers → Compressed Stream: emits stream
- Compressed Stream → Standard Decoder: decodes standard
- Go Compression Binding → C Compression API: calls C API
- Application or CLI User → Go Compression Binding: calls binding
- Go PNG Binding → PNG Optimizer API: calls C API
- Application or CLI User → Go PNG Binding: calls binding
- PNG Input → PNG Optimizer API: provides PNG
- PNG Optimizer API → PNG Codec: decodes and encodes
- PNG Optimizer API → Color Filter Choices: optimizes representation
- PNG Optimizer API → PNG Metadata: preserves chunks
- PNG Optimizer API → C Compression API: compresses IDAT
- PNG Optimizer API → Optimized PNG: returns PNG