Ruby bindings for libdeflate, a heavily optimized library for DEFLATE, gzip, and zlib compression and decompression.
DeflateRuby provides significantly faster compression and decompression compared to Ruby's built-in Zlib module, while maintaining full compatibility with standard DEFLATE, gzip, and zlib formats.
- Fast compression and decompression - Leverages libdeflate's heavily optimized implementation
- Multiple compression formats - Support for raw DEFLATE, zlib, and gzip formats
- Configurable compression levels - Levels 0-12 (higher = better compression, slower)
- Checksum functions - CRC32 and Adler32 implementations
- Cross-platform - Works on x86, ARM, and RISC-V architectures
- Clean API - Simple, Ruby-friendly interface
Install the gem by executing:
gem install deflate_rubyOr add to your Gemfile:
gem 'deflate_ruby'require 'deflate_ruby'
# Create a compressor
compressor = DeflateRuby::Compressor.new(level: 6) # level 0-12, default 6
# Compress data in different formats
data = "Hello, World!" * 100
# Raw DEFLATE
deflated = compressor.deflate_compress(data)
# Zlib format (with header and checksum)
zlib_compressed = compressor.zlib_compress(data)
# Gzip format (with header and checksum)
gzip_compressed = compressor.gzip_compress(data)
# Always close the compressor when done
compressor.close# Create a decompressor
decompressor = DeflateRuby::Decompressor.new
# Decompress data (must know original size)
original_data = decompressor.deflate_decompress(deflated, data.bytesize)
original_data = decompressor.zlib_decompress(zlib_compressed, data.bytesize)
original_data = decompressor.gzip_decompress(gzip_compressed, data.bytesize)
# Always close the decompressor when done
decompressor.close# CRC32
crc = DeflateRuby.crc32("Hello, World!")
# CRC32 with initial value (for incremental calculation)
crc1 = DeflateRuby.crc32("Hello, ")
crc2 = DeflateRuby.crc32("World!", crc1)
# Adler32
adler = DeflateRuby.adler32("Hello, World!")
# Adler32 with initial value
adler1 = DeflateRuby.adler32("Hello, ")
adler2 = DeflateRuby.adler32("World!", adler1)# Get worst-case compressed size for a given input size
compressor = DeflateRuby::Compressor.new
bound = compressor.deflate_compress_bound(1000)
zlib_bound = compressor.zlib_compress_bound(1000)
gzip_bound = compressor.gzip_compress_bound(1000)
compressor.closeDeflateRuby is significantly faster than Ruby's built-in Zlib for both compression and decompression, especially at higher compression levels. Benchmarks show 2-5x performance improvements depending on the data and compression level.
After checking out the repo:
cd deflate_ruby
bundle installTo compile the extension:
rake compileTo run tests:
rake testTo build the gem:
rake buildBug reports and pull requests are welcome on GitHub at https://github.com/jgreninger/deflate_ruby.
The gem is available as open source under the terms of the MIT License.
This gem bundles libdeflate, which is also licensed under the MIT License.