GitPedia

Zstd rs

A rust binding for the zstd compression library.

From gyscos·Updated June 25, 2026·View on GitHub·

This library is a rust binding for the [zstd compression library][zstd]. The project is written primarily in Rust, distributed under the BSD 3-Clause "New" or "Revised" License license, first published in 2016. Key topics include: compression, rust-bindings, wrapper, zstd.

Latest release: v0.13.0
October 11, 2023View Changelog →

zstd

crates.io
BSD-3-Clause licensed

Build on Linux
Build on Windows
Build on macOS
Build on wasm

This library is a rust binding for the zstd compression library.

Documentation

1 - Add to cargo.toml

bash
$ cargo add zstd
toml
# Cargo.toml [dependencies] zstd = "0.13"

2 - Usage

This library provides Read and Write wrappers to handle (de)compression,
along with convenience functions to made common tasks easier.

For instance, stream::copy_encode and stream::copy_decode are easy-to-use
wrappers around std::io::copy. Check the stream example:

rust
use std::io; // This function use the convenient `copy_encode` method fn compress(level: i32) { zstd::stream::copy_encode(io::stdin(), io::stdout(), level).unwrap(); } // This function does the same thing, directly using an `Encoder`: fn compress_manually(level: i32) { let mut encoder = zstd::stream::Encoder::new(io::stdout(), level).unwrap(); io::copy(&mut io::stdin(), &mut encoder).unwrap(); encoder.finish().unwrap(); } fn decompress() { zstd::stream::copy_decode(io::stdin(), io::stdout()).unwrap(); }

Asynchronous support

The async-compression crate
provides an async-ready integration of various compression algorithms,
including zstd-rs.

Compile it yourself

zstd is included as a submodule. To get everything during your clone, use:

git clone https://github.com/gyscos/zstd-rs --recursive

Or, if you cloned it without the --recursive flag,
call this from inside the repository:

git submodule update --init

Then, running cargo build should take care
of building the C library and linking to it.

Build-time bindgen

This library includes a pre-generated bindings.rs file.
You can also generate new bindings at build-time, using the bindgen feature:

cargo build --features bindgen

TODO

  • Benchmarks, optimizations, ...

Disclaimer

This implementation is largely inspired by bozaro's lz4-rs.

License

  • The zstd C library is under a dual BSD/GPLv2 license.
  • This zstd-rs binding library is under a BSD-3-Clause license.

Contributors

Showing top 12 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from gyscos/zstd-rs via the GitHub API.Last fetched: 6/26/2026