Skip to content

A fully Node.js-compatible zlib module for React Native, powered by Rust. 100% API parity with high-performance compression, streaming support, and cross-platform stability.

Notifications You must be signed in to change notification settings

iwater/react-native-nitro-zlib

Repository files navigation

react-native-nitro-zlib

High-performance, 100% Node.js compatible Zlib module for React Native, powered by Nitro Modules and Rust.

license platform compatibility 中文文档

🌟 Features

  • 🚀 Blazing Fast: Core logic written in Rust (flate2 & brotli crates), bridging directly to C++ via Nitro Modules with zero JSI serialization overhead.
  • Node.js Zlib API: Designed to provide a consistent API experience with the Node.js environment.
  • 📦 Full Algorithm Support: Supports Deflate, Inflate, Gzip, Gunzip, Brotli, and more.
  • ♻️ Streaming Support: Full support for Readable, Writable, and .pipe() operations.
  • 💠 Sync & Async: Provides both synchronous (Sync) and callback-based asynchronous APIs.
  • 🛠️ Utilities: Built-in high-performance crc32 calculation.

📦 Installation

yarn add react-native-nitro-zlib
# or
npm install react-native-nitro-zlib

iOS

cd ios && pod install

🚀 Usage Guide

1. Synchronous API (Buffer Operations)

Ideal for small files or latency-critical scenarios.

import zlib from 'react-native-nitro-zlib';
import { Buffer } from 'buffer';

const input = Buffer.from('hello world');

// Gzip Compression
const compressed = zlib.gzipSync(input);

// Gzip Decompression
const decompressed = zlib.gunzipSync(compressed);
console.log(decompressed.toString()); // 'hello world'

// Brotli Compression (Sync)
const brotliOut = zlib.brotliCompressSync(input);

2. Asynchronous API (Callbacks)

Provides the same asynchronous callback interface as Node.js.

import zlib from 'react-native-nitro-zlib';

zlib.deflate('some data', (err, buffer) => {
  if (!err) {
    console.log('Compressed buffer:', buffer);
  }
});

3. Streaming API (Streams)

Ideal for handling large files, supporting pipe operations.

import zlib from 'react-native-nitro-zlib';
// Can be used with other Transform streams or Nitro streams

const gzip = zlib.createGzip();
const gunzip = zlib.createGunzip();

gzip.pipe(gunzip).on('data', (chunk) => {
  console.log('Decompressed chunk:', chunk);
});

gzip.write('This is data for streaming compression');
gzip.end();

4. Utility Methods

import zlib from 'react-native-nitro-zlib';
import { Buffer } from 'buffer';

// Calculate CRC32
const crc = zlib.crc32(Buffer.from('Hello World'));
console.log('CRC32:', crc.toString(16)); // 4a17b156

// Access Constants
console.log(zlib.constants.Z_BEST_COMPRESSION); // 9

📊 API Support Status

API Status Notes
deflate / Sync ✅ Supported
inflate / Sync ✅ Supported
gzip / Sync ✅ Supported
gunzip / Sync ✅ Supported
brotliCompress / Sync ✅ Supported
brotliDecompress / Sync ✅ Supported
createGzip / createGunzip ✅ Supported Stream Factory
createBrotliCompress ✅ Supported Stream Factory
crc32 ✅ Supported
constants ✅ Supported

🛠️ Technical Details

The project consists of three main components:

  1. Rust Core (rust_c_zlib): Wraps flate2 and brotli crates.
  2. C++ Bridge: C++ interfaces automatically generated by Nitro Modules.
  3. TypeScript Layer: JS interfaces following Node.js specs, integrated with readable-stream.

📄 License

ISC

About

A fully Node.js-compatible zlib module for React Native, powered by Rust. 100% API parity with high-performance compression, streaming support, and cross-platform stability.

Resources

Stars

Watchers

Forks

Packages

No packages published