zlib

The zlib module provides compression and decompression utilities using formats like gzip, deflate, and brotli. Supports both streaming and buffer-based APIs.


API Surface

Compression Streams

  • zlib.createGzip(), zlib.createGunzip()
  • zlib.createDeflate(), zlib.createInflate()
  • zlib.createBrotliCompress(), zlib.createBrotliDecompress()

These return transform streams usable with pipeline.

Utility Functions

  • zlib.gzip(buf, cb), zlib.gunzip(buf, cb)
  • zlib.deflate(buf, cb), zlib.inflate(buf, cb)
  • zlib.brotliCompress(buf, cb), zlib.brotliDecompress(buf, cb)

Synchronous variants exist: gzipSync, deflateSync, etc.

Options

  • Compression level, strategy, windowBits, etc. configurable.

Examples (English only)

const fs = require("fs");
const zlib = require("zlib");
const { pipeline } = require("stream");

// Compress a file with gzip
pipeline(
  fs.createReadStream("input.txt"),
  zlib.createGzip(),
  fs.createWriteStream("input.txt.gz"),
  (err) => {
    if (err) console.error("Compression failed:", err);
    else console.log("File compressed");
  }
);

// Decompress gzip
pipeline(
  fs.createReadStream("input.txt.gz"),
  zlib.createGunzip(),
  fs.createWriteStream("output.txt"),
  (err) => {
    if (err) console.error("Decompression failed:", err);
    else console.log("File decompressed");
  }
);

Notes

  • Use streams for large files to avoid memory pressure.
  • Brotli usually offers better compression ratio but may be slower.
  • Always handle pipeline errors to avoid partial files.
  • Synchronous methods block the event loop — use only for small buffers.