#brotli #web-worker #wasm-binary #brotli-decompressor #rust

brotli-dec-wasm

Brotli decompressor for browsers and web workers with WASM, which still has a small size (about 300KB)

2 stable releases

2.3.0 Apr 19, 2024
2.0.1 Jul 13, 2023

#499 in WebAssembly

MIT/Apache

31KB
249 lines

brotli-dec-wasm

npm npm unpacked size

Brotli decompressor for browsers and web workers with WASM, which still has a small size (about 300KB 200KB)

If you are looking for a compressor, see Alternatives

Features

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.

Additionally, we export the JS API generated by wasm-pack and the WASM binary file. They may be useful for cases where you need to instantiate the WASM module with a URL. Check *.asset.* files in example/webpack for examples.

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

Dependencies

~4MB
~59K SLoC