Standard Library

Wuffs' standard library consists of multiple packages, each implementing a particular file format or algorithm. Those packages can be grouped into several categories:

The general pattern is that a package foo (e.g. jpeg, png) contains a struct bar (e.g. hasher, decoder, etc) that implements a package-independent interface. For example, every compression decoder struct would have a transform_io method. In C, this would be invoked as

// Allocate and initialize the struct.
wuffs_foo__decoder* dec = etc;

// Do the work. Error checking is not shown, for brevity.
wuffs_base__status status = wuffs_foo__decoder__transform_io(dec, etc);

When that C library is used as C++, that last line can be shortened:

wuffs_base__status status = dec->transform_io(etc);

See also the glossary, as well as the notes on:

Modules and Dependencies

By default, building Wuffs' standard library builds the entire thing (provided that you've defined the WUFFS_IMPLEMENTATION C macro), implementing a variety of codecs and file formats.

Packages can be individually allow-listed, for smaller binaries and faster compiles. Opt in by also defining WUFFS_CONFIG__MODULES and then also WUFFS_CONFIG__MODULE__ETC for each ETC (and its dependencies, listed below) to enable.

  • ADLER32: BASE
  • BMP: BASE
  • BZIP2: BASE
  • CBOR: BASE
  • CRC32: BASE
  • CRC64: BASE
  • DEFLATE: BASE
  • GIF: BASE
  • GZIP: BASE, CRC32, DEFLATE
  • JPEG: BASE
  • JSON: BASE
  • LZIP: BASE, CRC32, LZMA
  • LZMA: BASE
  • LZW: BASE
  • NETPBM: BASE
  • NIE: BASE
  • PNG: BASE, ADLER32, CRC32, DEFLATE, ZLIB
  • QOI: BASE
  • SHA256: BASE
  • TGA: BASE
  • VP8: BASE
  • WBMP: BASE
  • WEBP: BASE, VP8
  • XXHASH32: BASE
  • XXHASH64: BASE
  • XZ: BASE, CRC32, CRC64, LZMA, SHA256
  • ZLIB: BASE, ADLER32, DEFLATE

For the auxiliary modules:

  • AUX_CBOR: AUX_BASE, BASE, CBOR
  • AUX_IMAGE: AUX_BASE, BASE and whichever image-related modules (and their dependencies) you want, e.g. GIF, PNG, etc.
  • AUX_JSON: AUX_BASE, BASE, JSON