
Product
Socket for Jira Is Now Available
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.
xz-decompress
Advanced tools
XZ streaming decompression for the browser & Node without native code, via WebAssembly
Part of HTTP Toolkit: powerful tools for building, testing & debugging HTTP(S)
This is an NPM package compatible with both Node.js & browsers that can decompress XZ streams.
You can use this if you want your web server to return XZ-encoded content and have your JavaScript code see the uncompressed data (as an alternative to Gzip or Brotli), or if you want to decompress XZ files within Node.js without needing to mess with any native addons.
This is a fork of https://github.com/SteveSanderson/xzwasm, intended for use in Frida-JS and HTTP Toolkit.
npm install --save xz-decompress
You can then import things from xz-decompress in your existing JavaScript/TypeScript files. Example:
import { XzReadableStream } from 'xz-decompress';
Given an XZ-compressed stream, such as a fetch response body, you can get a decompressed response by wrapping it with XzReadableStream. Example:
const compressedResponse = await fetch('somefile.xz');
const decompressedResponse = new Response(
new XzReadableStream(compressedResponse.body)
);
// We now have a regular Response object, so can use standard APIs to parse its body data,
// such as .text(), .json(), or .arrayBuffer():
const text = await decompressedResponse.text();
The API is designed to be as JavaScript-standard as possible, so XzReadableStream is a ReadableStream instance, which in turn means you can feed it into a Response, and in turn get a blob, an ArrayBuffer, JSON data, or anything else that your runtime can do with a Response.
If you're using this to decompress content from a file or other source, rather than an HTTP response body, you'll need to get a ReadableStream (a web stream) for the file's data to replace the compressedResponse.body stream above. For example, in Node.js you could use Readable.toWeb(fs.createReadStream(filename)) to stream from the disk, or new Blob([buffer]).stream() if you already have the data in a Buffer.
.tar.xz files?Since the .xz format only represents one file, it's common for people to bundle up a collection of files as .tar, and then compress this to .tar.xz.
XZ-Decompress doesn't have built-in support for .tar. However, you can use it to convert a .tar.xz stream to a stream representing the .tar file, and then pass this data to another library such as js-untar or tarballjs to get the bundled files.
Note: This is only needed if you want to work on xz-decompress itself, not if you just want to use it.
git submodule update --init --recursivenpm run setup-wasi-sdkexport wasisdkroot=/path/to/wasi-sdkxz and brotli available as commands on $PATHmakenode installednpm installmake packagenode installednpm install -g http-servermake run-sampleFAQs
XZ streaming decompression for the browser & Node without native code, via WebAssembly
We found that xz-decompress demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.