How to multi-format extractor in developer workflows
- Step 1Open the extractor in a tab beside your editor — Keep it open during review. It is client-side, so it works even when you are off the corporate VPN.
- Step 2Drag the artifact in — Drop one archive — a CI artifact, dependency tarball, or repro bundle. Do not bother fixing the extension; detection is by magic bytes.
- Step 3Add a password for encrypted ZIP artifacts — If the artifact is an encrypted ZIP, paste the password into the optional field (zip.js decrypts AES-256 / ZipCrypto). Encrypted 7Z/RAR are not decryptable here.
- Step 4Extract and check the entry count — Run it; the panel reports the detected
formatandEntries. Quick sanity check that the artifact contains what the build manifest claims. - Step 5Download and unpack into a scratch dir — Download
<archive>-extracted.zip, unzip into a scratch directory, and inspect the files with your usual editor/grep. Paths are preserved under a<archive>/folder. - Step 6Reach for a sibling when you need more — Need just one file? selective-extractor. Need to build a ZIP? folder-to-zip. Need recursion? nested-archive-extractor. Match the task to the right tool rather than forcing this one.
Developer artifacts and the engine path
Common archives in a dev workflow and how the extractor handles each.
| Artifact | Format | Engine | Note |
|---|---|---|---|
| CI build output | tar.gz | fflate (gz) → re-run on .tar | Two-pass for the inner files |
| npm pack output | tar.gz (.tgz) | fflate (gz) → re-run on .tar | Inner tar holds the package/ tree |
| Vendor SDK | 7z / rar | libarchive WASM | Read-only; encrypted variants unsupported |
| Source release | tar.xz / tar.bz2 | libarchive WASM | Expanded transparently to all members |
| Encrypted distribution | zip (AES-256) | @zip.js/zip.js | Use the optional password field |
| Container image layer | tar.gz | fflate → re-run on .tar | Each layer is a separate tarball |
What it does vs which sibling to use
The extractor is read-only and whole-archive. For other shapes of work, the right tool differs.
| You want to | This tool? | Use instead |
|---|---|---|
| Extract everything from one archive | Yes | — |
Extract only *.js / src/** | No | selective-extractor |
| Create a ZIP from files | No (read-only) | folder-to-zip |
| Create an encrypted ZIP | No | encrypted-zip-creator |
| Recurse nested archives | No (one level) | nested-archive-extractor |
| List contents without extracting | No | archive-previewer / file-listing-generator |
| Process many archives at once | No (one file) | batch-extraction-manager |
Cookbook
Real developer scenarios with the exact engine path and the sibling tool when this one is the wrong fit.
Inspect a CI artifact during PR review
CI attached build-artifacts.tar.gz. Two-pass extraction (gz then tar) gives you the dist/ tree to eyeball before approving.
Pass 1: build-artifacts.tar.gz → format: gz → build-artifacts.tar Pass 2: build-artifacts.tar → format: tar build-artifacts/dist/index.js build-artifacts/dist/index.js.map build-artifacts/dist/styles.css
Open an npm pack tarball (.tgz)
npm pack produces a .tgz. It detects as gz; the inner tar holds the package/ directory that npm publishes.
Pass 1: my-lib-1.2.3.tgz → format: gz → my-lib-1.2.3.tar Pass 2: my-lib-1.2.3.tar → format: tar my-lib-1.2.3/package/package.json my-lib-1.2.3/package/dist/index.js
Read a vendor SDK shipped as 7z
A non-encrypted SDK .7z. libarchive WASM reads it; you get the headers/libs without installing p7zip on a fresh box.
Input: vendor-sdk.7z Engine: libarchive WASM format: 7z Entries: 218 Download: vendor-sdk-extracted.zip vendor-sdk/include/... vendor-sdk/lib/...
Need only the source files — wrong tool
You only want src/**/*.ts from a big artifact. This extractor pulls everything; the selective-extractor takes a glob.
This tool: extracts ALL of build.zip (4,000 files) Better: /archive-tools/selective-extractor glob: src/**/*.ts → only the TypeScript sources
Decrypt an encrypted ZIP distribution
A partner ships an AES-256 ZIP with the password in your password manager. Paste it; zip.js decrypts.
Input: partner-dist.zip (AES-256) Password: ******** Engine: @zip.js/zip.js format: zip Entries: 57 Download: partner-dist-extracted.zip
Edge cases and what actually happens
Expecting a REST API
No public APIArchive tools are browserOnly with apiAvailable: false — there is no GET/POST endpoint to call from CI. Pro+ tiers can dispatch to the local @jadapps/runner via a headless browser, but it is not a hosted API. For headless CI extraction, use tar/7z in the pipeline.
Need to create an archive
UnsupportedThis tool only reads. To build a ZIP in-browser, use folder-to-zip at /archive-tools/folder-to-zip; for an encrypted ZIP, encrypted-zip-creator at /archive-tools/encrypted-zip-creator. It never creates 7Z/RAR.
Encrypted 7Z / RAR artifact
UnsupportedEncrypted 7Z/RAR cannot be opened — libarchive is read-only with no passphrase, and the password field serves only the ZIP path. Decrypt with native 7-Zip/WinRAR, or have the publisher use an encrypted ZIP.
Artifact over the tier cap
Limit exceededLarge CI artifacts may exceed Free 50 MB / Pro 500 MB / Pro-media / Developer 2 GB. The run is blocked before processing. Upgrade, or extract in the pipeline with the CLI.
tar.gz yields one .tar
By designGZIP is single-member; .tar.gz/.tgz first decompress to the inner .tar. Run the extractor again on it to reach the individual files.
Nested artifact (zip in zip)
Single levelOnly one level is extracted; an inner ZIP comes out as a file. Use nested-archive-extractor at /archive-tools/nested-archive-extractor for bounded recursion.
Want one file, not all
Wrong toolThis extractor always extracts everything. To pull matching files by pattern, use selective-extractor at /archive-tools/selective-extractor with a glob like *.json or src/**/*.ts.
WASM blocked in a hardened browser profile
Engine load failedIf WebAssembly is blocked, 7Z/RAR/BZ2/XZ/ISO fail to load the engine. ZIP/GZIP/TAR still work via pure-JS fflate. Use a standard browser profile for the WASM formats.
Symlinks / special entries in a tar
Files onlyThe repackaged ZIP contains regular file entries; symlinks and other special TAR records are not reconstructed as links. Extract with the CLI if you need to preserve symlinks exactly.
Directory layout preserved
PreservedEntry paths (e.g. dist/assets/app.js) are kept inside the output ZIP under the <archive>/ folder, so the artifact's structure survives for editor/grep workflows.
Frequently asked questions
Is there an API I can call from CI?
No public REST API — archive tools are browserOnly with apiAvailable: false. Pro+ tiers can route jobs to the local @jadapps/runner via a headless browser, but for plain CI extraction use tar/7z/unzip in the pipeline.
Can it create archives too?
No, it is read-only. For ZIP creation use folder-to-zip at /archive-tools/folder-to-zip; for an encrypted ZIP use encrypted-zip-creator at /archive-tools/encrypted-zip-creator. It never produces 7Z or RAR.
Will my proprietary artifact be uploaded?
No. The archive is read with FileReader and decoded in-browser via fflate / @zip.js/zip.js / libarchive WASM. There is no server-side extraction path, so confidential artifacts stay local.
Why does my .tgz come out as a .tar?
.tgz/.tar.gz is GZIP around a TAR, and GZIP is single-member. The gz pass produces the inner .tar; run the extractor again to get the individual files.
Can it open an encrypted 7z from a vendor?
No. Encrypted 7Z/RAR are not decryptable in-browser because libarchive runs read-only with no passphrase. The password field only handles ZIP. Use native 7-Zip for encrypted 7Z.
How do I extract only the files I care about?
Use selective-extractor at /archive-tools/selective-extractor with a glob pattern (*.js, src/**/*.ts). This extractor always extracts the whole archive.
Does it preserve directory structure?
Yes. Original entry paths are kept inside the output ZIP under a <archive>/ folder, so a dist/-structured artifact extracts with its layout intact.
What about symlinks in a tarball?
The output ZIP holds regular file entries; symlinks and other special TAR records are not reconstructed as links. If you depend on symlinks, extract with the CLI instead.
Can I list contents without extracting?
Yes — archive-previewer at /archive-tools/archive-previewer for a quick view, or file-listing-generator at /archive-tools/file-listing-generator to export the listing as CSV/JSON/TXT for tooling.
How big an artifact can I extract?
Free 50 MB, Pro 500 MB, Pro-media and Developer 2 GB per archive, with per-archive entry ceilings of 500 / 50,000 / 500,000.
Can I process several artifacts in one go?
Not with this tool — it is one archive per run. Use batch-extraction-manager at /archive-tools/batch-extraction-manager for multiple files.
How do I know the format before extracting?
auto-format-detector at /archive-tools/auto-format-detector reports the format from the magic bytes, handy for artifacts with misleading extensions.
Privacy first
Every JAD Archive tool runs entirely in your browser using fflate, @zip.js/zip.js, and the libarchive WASM bridge. Your archives never leave your device — verified by zero outbound network requests during processing.