lz-utils

Utils for string compression and decompression with multiple strategies for Node.js and browser

MIT 13 个版本
安装
npm install lz-utils
yarn add lz-utils
pnpm add lz-utils
bun add lz-utils
README

lz-utils - Utils for string compression

Features

  • Zero runtime dependencies
  • Multiple compression strategies for different environments
  • ESM and CommonJS support
  • TypeScript type definitions included
  • Browser bundle (IIFE) included

API

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, inflate uses 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

Install

npm install lz-utils

Usage

const { deflateSync, deflate } = require('lz-utils');

const raw = "this is string";

// Synchronous
const compressed = deflateSync(raw);

// Asynchronous
const compressed = await deflate(raw);

Browser - Decompress with inflate

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);

Cross-platform - LZ-string compress/decompress

import { compress, decompress } from 'lz-utils';

const raw = "this is string";
const compressed = compress(raw);
const decompressed = decompress(compressed);

Create script loader

const { createScriptLoader } = require('lz-utils');

// Creates a self-contained HTML script that will decompress and execute in browser
const script = createScriptLoader('console.log("hello")');

Subpath imports

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';

Examples

Why lz-utils?

lz-utils is designed for a specific workflow: generating self-contained HTML reports.

  • Goal - Generate HTML reports that are as fast to produce as possible and as small in 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-decompressed and rendered on the fly. This is why deflate runs on Node.js and inflate runs in the browser.
  • Why base64? - The compressed output is binary data, which cannot be safely embedded in JavaScript (due to encoding and CORS issues). Converting it to base64 produces a plain JS string that can be reliably stored in JSON and embedded in HTML without any escaping problems.

String Compression Benchmark

Changelog

版本列表
2.1.1 2026-04-11
2.1.0 2024-07-25
2.0.2 2024-01-10
2.0.1 2023-05-08
2.0.0 2023-05-08
1.0.7 2023-05-03
1.0.6 2023-03-26
1.0.5 2022-04-20
1.0.4 2021-12-07
1.0.3 2021-12-07
1.0.2 2021-12-07
1.0.1 2021-12-06
1.0.0 2021-12-06