- Zero runtime dependencies
- Multiple compression strategies for different environments
- ESM and CommonJS support
- TypeScript type definitions included
- Browser bundle (IIFE) included
| Method | Platform | Sync/Async | Algorithm | Minified |
|---|---|---|---|---|
deflateSync(str) |
Node.js | Sync | Native zlib |
0.13 KB |
deflate(str) |
Node.js | Async | Native zlib |
0.17 KB |
inflateSync(str) |
Browser | Sync | tiny-inflate | 3.15 KB |
inflate(str) |
Browser | Async (Worker) | tiny-inflate | 3.60 KB |
compress(str) |
Both | Sync | lz-string | 1.71 KB |
decompress(str) |
Both | Sync | lz-string | 1.59 KB |
createScriptLoader(str) |
Node.js | Sync | zlib + loader template |
4.03 KB |
deflateSync/deflate- Compress raw string and encode in base64 (Node.js only, highest performance)inflateSync/inflate- Decompress base64 string to raw string (Browser only,inflateuses Web Worker for multi-thread decompression)compress/decompress- LZ-string based compression/decompression in base64 (works on both browser and Node.js)createScriptLoader- Create a self-contained HTML script that decompresses and executes the given string in browser
npm install lz-utilsconst { deflateSync, deflate } = require('lz-utils');
const raw = "this is string";
// Synchronous
const compressed = deflateSync(raw);
// Asynchronous
const compressed = await deflate(raw);import { inflateSync, inflate } from 'lz-utils/inflate-sync';
// or
import { inflate } from 'lz-utils/inflate';
// Synchronous
const raw = inflateSync(compressed);
// Asynchronous (Web Worker)
const raw = await inflate(compressed);import { compress, decompress } from 'lz-utils';
const raw = "this is string";
const compressed = compress(raw);
const decompressed = decompress(compressed);const { createScriptLoader } = require('lz-utils');
// Creates a self-contained HTML script that will decompress and execute in browser
const script = createScriptLoader('console.log("hello")');Each function can be imported individually to minimize bundle size:
import compress from 'lz-utils/compress';
import decompress from 'lz-utils/decompress';
import deflate from 'lz-utils/deflate';
import deflateSync from 'lz-utils/deflate-sync';
import inflate from 'lz-utils/inflate';
import inflateSync from 'lz-utils/inflate-sync';
import createScriptLoader from 'lz-utils/create-script-loader';lz-utils is designed for a specific workflow: generating self-contained HTML reports.
- Goal - Generate HTML reports that are as
fastto produce as possible and assmallin file size as possible. - How it works - Report data is compressed on the server (Node.js) and bundled into a single HTML file. When the user opens the file in the browser, the data is
self-decompressedand rendered on the fly. This is whydeflateruns on Node.js andinflateruns in the browser. - Why base64? - The compressed output is
binarydata, which cannot be safely embedded in JavaScript (due to encoding and CORS issues). Converting it tobase64produces a plain JS string that can be reliably stored in JSON and embedded in HTML without any escaping problems.
- string-compression - lz-string, pako, uzip.js, fflate, tiny-inflate
- pieroxy/lz-string - LZ-based compression algorithm
- foliojs/tiny-inflate - Tiny DEFLATE decompression library