11 stable releases

2.6.0 Jun 9, 2024
2.5.0 Jan 12, 2023
2.4.0 Dec 25, 2021
2.3.2 May 28, 2021
1.0.0 Dec 7, 2019

#18 in Compression

Download history 3257/week @ 2024-03-01 1640/week @ 2024-03-08 2147/week @ 2024-03-15 1375/week @ 2024-03-22 1621/week @ 2024-03-29 1601/week @ 2024-04-05 1381/week @ 2024-04-12 1531/week @ 2024-04-19 1314/week @ 2024-04-26 2112/week @ 2024-05-03 1880/week @ 2024-05-10 1186/week @ 2024-05-17 939/week @ 2024-05-24 1132/week @ 2024-05-31 2666/week @ 2024-06-07 1587/week @ 2024-06-14

6,464 downloads per month
Used in 22 crates (21 directly)


1.5K SLoC


Simple and transparent support for compressed files.

This library provides two main features:

  • sniffs out compression formats from input files and returns a Read trait object ready for consumption.
  • Create a Writer initialized with compression ready for writing.

The goal is to lower the barrier to open and use a file, especially in bioinformatics workflows.

build-status Crates.io Documentation

Selecting compression formats

By default all supported compression formats are enabled. If you're working on systems that don't support them you can disable default features and select the ones you want. For example, currently only gz is supported in Webassembly environments (because niffler depends on crates that have system dependencies for bz2 and lzma compression), so you can use this in your Cargo.toml to select only the gz support:

niffler = { version = "2.2.0", default-features = false, features = ["gz"] }

You can still use niffler::sniff() to find what is the compression format, even if any feature is disabled. But if you try to use niffler::get_reader for a disabled feature, it will throw a runtime error.

Minimum supported Rust version

Currently the minimum supported Rust version is 1.65.0.

Similar project

Many similar projects exist in other languages:


niffler development is open, and pull requests are welcome!

Before creating your pull request, please try to write a test and benchmark (if possible). Some commands we suggest running to help with these tasks:

cargo fmt
cargo test
cargo clippy

To run tests use:

cargo test --all-features

To test benchmark run:

cargo test --benches --all-features

To run all benchmark use:

cargo bench --all-features

As a shortcut, you can also run make, which will execute all these commands.


Licensed under either of these:


Unless you explicitly state otherwise, any contribution you intentionally submit for inclusion in the work, as defined in the Apache-2.0 license, shall be dual-licensed as above, without any additional terms or conditions.


~83K SLoC