Working with Zlib (Compression)

1. Compressing with gzip (zlib.gzip)

Example

import { gzip } from "node:zlib";
import { promisify } from "node:util";
const compressed = await promisify(gzip)(Buffer.from(text));

2. Decompressing with gunzip (zlib.gunzip)

APIUse
zlib.gunzip(buf, cb)Decompress gzip
zlib.unzip(buf, cb)Auto-detect gzip/deflate

3. Using Deflate Compression (zlib.deflate)

APIUse
zlib.deflate / inflateStandard zlib
zlib.deflateRaw / inflateRawNo zlib header

4. Using Inflate Decompression (zlib.inflate)

Example

const data = await promisify(zlib.inflate)(compressed);

5. Using Brotli Compression (zlib.brotliCompress)

APINotes
zlib.brotliCompress / DecompressBest ratio for text
zlib.createBrotliCompress()Stream variant
Quality0–11 (default 11 = slowest, smallest)

6. Creating Compression Streams (zlib.createGzip)

Example

import { pipeline } from "node:stream/promises";
await pipeline(createReadStream("a.txt"), zlib.createGzip(), createWriteStream("a.txt.gz"));

7. Setting Compression Level

LevelEffect
0No compression
1Fastest
6 (default)Balanced
9Best ratio

8. Compressing HTTP Responses

Example: Negotiate encoding

const accept = req.headers["accept-encoding"] ?? "";
if (accept.includes("br")) {
  res.setHeader("Content-Encoding", "br");
  pipeline(src, zlib.createBrotliCompress(), res);
} else if (accept.includes("gzip")) {
  res.setHeader("Content-Encoding", "gzip");
  pipeline(src, zlib.createGzip(), res);
} else { pipeline(src, res); }

9. Using Promises API (zlib.promises)

NoteDetail
No zlib/promisesUse util.promisify

10. Handling Compression Errors

ErrorCause
Z_DATA_ERRORCorrupt input
Z_BUF_ERRORInsufficient buffer
Truncated streamWatch for unexpected end