brotli-dec-wasm
Brotli decompressor for browsers and web workers with WASM, which still has a small size (about 300KB)
If you are looking for a compressor, see Alternatives
Features
- Stream support
Usage
Starting from v2.0.0, this package can be used as an exact drop-in replacement of brotli-wasm.
You can simply switch between import brotli from 'brotli-wasm'
and import brotli from 'brotli-dec-wasm'
.
More detailed usage can be found in brotli-wasm Usage section.
Examples are also available in the unit tests in brotli-wasm:test/brotli.spec.ts and example projects in brotli-wasm:example.
Especially, a TransformStream
example is available in brotli-wasm:example/web-next-transformstream/app/utils.ts.
To help colaborating with various bundlers (e.g., webpack, esbuild), we addtionally provide an asset
entry and export the WASM binary file directly.
The documentation for the asset
entry is available at doc/asset.md, including how to either use the asset
entry or access the WASM binary file directly.
Problems
Broken in webpack 5
BREAKING CHANGE: Since webpack 5 WebAssembly is not enabled by default and flagged as experimental feature. You need to enable one of the WebAssembly experiments via 'experiments.asyncWebAssembly: true' (based on async modules) or 'experiments.syncWebAssembly: true' (like webpack 4, deprecated).
Set experiments.syncWebAssembly: true
for old code, experiments.asyncWebAssembly: true
for new code.
Implementation
The code is quite simple, which is just a wrapper of the crate brotli-decompressor (other than crate brotli, though brotli depends on brotli-decompressor)
Build configuration such as opt-level = "s"
, are fine-tuned with manual tests, to make the bundle as small as possible
Maintenance
The package is at least used by myself in my blog mylmoe, which provides a page to (de)compress Brotli online
Alternatives
- brotli-wasm: A reliable compressor and decompressor for Brotli, supporting node & browsers via wasm. If you need a compressor, use it. Actively maintained by an organization.
More alternatives are available in brotli-wasm Alternatives section
One surprising thing is, in js
folder of the offical google/brotli repository, there is a pure JavaScript decompressor implementation, which is even a little smaller than this package in size. However, it is not published on NPM. I do not know the reason and since that, I do not suggest using it.
Security
At least >= v1.3.3
- < v1.3.3: Rust dependency wee_alloc is unmaintained and has open serious issues. Use version >= 1.3.3 to replace it with the default Rust allocator on wasm32 targets.
License
Copyright (C) myl7
SPDX-License-Identifier: MIT OR Apache-2.0