react-native-nitro-zlib
v0.1.5
Published
Node.js Zlib implementation for React Native using Nitro Modules and Rust
Readme
react-native-nitro-zlib
High-performance, 100% Node.js compatible Zlib module for React Native, powered by Nitro Modules and Rust.
🌟 Features
- 🚀 Blazing Fast: Core logic written in Rust (
flate2&brotlicrates), 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
crc32calculation.
📦 Installation
yarn add react-native-nitro-zlib
# or
npm install react-native-nitro-zlibiOS
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:
- Rust Core (
rust_c_zlib): Wrapsflate2andbrotlicrates. - C++ Bridge: C++ interfaces automatically generated by Nitro Modules.
- TypeScript Layer: JS interfaces following Node.js specs, integrated with
readable-stream.
📄 License
ISC
