ExZarr.Codecs.ZigCodecs (ExZarr v1.1.0)
View SourceHigh-performance compression codec implementations using Zig NIFs.
This module provides compression and decompression functions for various codecs by binding to C libraries through Zig's excellent C interop capabilities.
Available Codecs
- ZLIB: Erlang's built-in :zlib (always available)
- ZSTD: Zstandard compression via libzstd (requires system library)
- LZ4: LZ4 compression via liblz4 (requires system library)
- Snappy: Snappy compression via libsnappy (requires system library)
- Blosc: Blosc meta-compressor via libblosc (requires system library)
- Bzip2: Bzip2 compression via libbz2 (requires system library)
System Library Requirements
To use the Zig NIFs, you need to install the compression libraries:
macOS
brew install zstd lz4 snappy c-blosc bzip2
Ubuntu/Debian
apt-get install libzstd-dev liblz4-dev libsnappy-dev libblosc-dev libbz2-dev
Fedora/RHEL
dnf install zstd-devel lz4-devel snappy-devel blosc-devel bzip2-devel
Setup
The Zig NIFs are compiled automatically when you run:
mix zig.get # Download Zig for zigler
mix compile # Compile NIFs
Implementation Notes
- ZLIB uses Erlang's battle-tested :zlib module (no NIF needed)
- Other codecs use Zig NIFs that call C libraries via Zig's @cImport
- Memory is managed by the BEAM allocator for safety
- Errors are converted to Elixir-friendly tuples
See ZIG_NIFS_GUIDE.md for detailed implementation information.
Summary
Functions
Compresses data using Blosc
Decompresses Blosc data
Compresses data using Bzip2
Decompresses Bzip2 data
Decodes data with CRC32C checksum validation (bytes-to-bytes codec) Validates and removes the 4-byte checksum from the end of data
Encodes data with CRC32C checksum appended (bytes-to-bytes codec) Appends 4-byte checksum in little-endian format to the end of data
Compresses data using LZ4
Decompresses LZ4 data
Compresses data using Snappy
Decompresses Snappy data
Compresses data using ZLIB. Uses Erlang's battle-tested :zlib for maximum compatibility.
Decompresses ZLIB data.
Compresses data using ZSTD
Decompresses ZSTD data
Functions
Compresses data using Blosc
Decompresses Blosc data
Compresses data using Bzip2
Decompresses Bzip2 data
Decodes data with CRC32C checksum validation (bytes-to-bytes codec) Validates and removes the 4-byte checksum from the end of data
Encodes data with CRC32C checksum appended (bytes-to-bytes codec) Appends 4-byte checksum in little-endian format to the end of data
Compresses data using LZ4
Decompresses LZ4 data
Compresses data using Snappy
Decompresses Snappy data
Compresses data using ZLIB. Uses Erlang's battle-tested :zlib for maximum compatibility.
Decompresses ZLIB data.
Compresses data using ZSTD
Decompresses ZSTD data