From node:zlib
node:zlib has gzip, zlib, raw deflate, brotli, and since Node.js 22.15, experimental zstd. comprs adds LZ4, a browser build, Web Streams, and the same API in Node.js, Deno, Bun and browsers. Its brotli is libbrotli, as in node:zlib, and it writes the same bytes at the same quality and window when Node.js bundles the same libbrotli release.
import { gzipSync, gunzipSync } from 'node:zlib';const compressed = gzipSync(data, { level: 9 });const restored = gunzipSync(compressed);import { compressSync, decompressSync } from '@derodero24/comprs/next';const compressed = compressSync(data, { format: 'gzip', level: 9 });const restored = decompressSync(compressed, { format: 'gzip' });| node:zlib | comprs (@derodero24/comprs/next) |
comprs (package root) |
|---|---|---|
gzipSync(data, { level }) |
compressSync(data, { format: 'gzip', level }) |
gzipCompress(data, level) |
gunzipSync(data) |
decompressSync(data, { format: 'gzip' }) |
gzipDecompress(data) |
deflateSync(data) (zlib) |
compressSync(data, { format: 'deflate' }) |
none |
inflateSync(data) (zlib) |
decompressSync(data, { format: 'deflate' }) |
none |
deflateRawSync(data) |
compressSync(data, { format: 'deflate-raw' }) |
deflateCompress(data) |
inflateRawSync(data) |
decompressSync(data, { format: 'deflate-raw' }) |
deflateDecompress(data) |
brotliCompressSync(data, { params: { [BROTLI_PARAM_QUALITY]: 11 } }) |
compressSync(data, { format: 'brotli', level: 11 }) |
brotliCompress(data, 11) |
brotliDecompressSync(data) |
decompressSync(data, { format: 'brotli' }) |
brotliDecompress(data) |
zstdCompressSync(data) |
compressSync(data, { format: 'zstd' }) |
zstdCompress(data) |
zstdDecompressSync(data) |
decompressSync(data, { format: 'zstd' }) |
zstdDecompress(data) |
unzipSync(data) (gzip or zlib) |
decompressSync(data), which detects every format but raw deflate |
decompress(data) |
gzip(data, callback), promisify(gzip) |
await compress(data, { format: 'gzip' }) |
await gzipCompressAsync(data) |
createGzip() |
new CompressionStream('gzip') |
createGzipCompressTransform() from @derodero24/comprs/node |
{ maxOutputLength } |
{ maxOutputSize } |
decompress(data, maxOutputSize) |
- Brotli quality.
node:zlibcompresses brotli at quality 11 by default; comprs at 6, which is much faster. Passlevel: 11for the output ofnode:zlib. - Limits.
node:zlibdecompresses up tobuffer.kMaxLengthby default; comprs stops at 256 MiB unless you raisemaxOutputSize, so that a small malicious input cannot exhaust memory. - Strictness. comprs rejects truncated and empty input, and data after the end of the compressed stream (see Errors and limits).
- Threads. The async functions and the streams run on the libuv thread pool, as those of
node:zlibdo. - Streams.
@derodero24/comprs/nodehas astream.Transformfactory for each format, such ascreateGzipCompressTransform(), forstream.pipeline().