How to troubleshooting the archive diff
- Step 1Confirm both inputs are loaded — Archive Diff needs two inputs. If you see
Drop a second archive to diff against., load a file into the second dropzone (Upload second archive (B)) and click Process again. - Step 2Confirm both inputs are real ZIPs — The engine reads ZIP central directories only. If one side shows zero entries (everything added or removed), check the format with Auto-Format Detector. Re-zip TAR.GZ/7z/RAR trees as
.zipfirst. - Step 3Check for a path-prefix mismatch — If identical content shows as add+remove, the two ZIPs likely use different roots (
./vs none, orapp/vs nothing). Normalise both with Path Prefix Remover, then re-diff. - Step 4Validate a suspect archive — A corrupt central directory parses to zero entries. Run Archive Integrity Tester; if it's damaged, recover with Corrupted ZIP Repair before diffing.
- Step 5Check the tier limit — Each archive must fit your tier: Pro 500 MB / 50,000 entries, Pro+Media and Developer 2 GB / 500,000 entries. Oversized archives are rejected — split with Archive Splitter or upgrade. (Archive Diff itself requires Pro+.)
- Step 6Hard-refresh if the page seems stuck — If Process appears to hang, hard-refresh (Ctrl+Shift+R) to load the latest chunk, and disable browser extensions that intercept worker messages (test in a private window).
Symptom → cause → fix
The five symptoms that account for nearly every 'archive diff looks wrong' report.
| Symptom | Most likely cause | Fix |
|---|---|---|
| Everything shows as Added or Removed | One side isn't a ZIP (parsed as zero entries) | Re-zip as .zip; verify with Auto-Format Detector |
| Identical files show as add + remove | Different path prefix in the two ZIPs | Path Prefix Remover on both |
Drop a second archive to diff against. | Only one input loaded | Load archive B into the second dropzone |
| Archive rejected before processing | Over tier size/entry cap | Archive Splitter or upgrade |
| One archive reads as zero entries | Corrupt central directory | Archive Integrity Tester → Corrupted ZIP Repair |
What the Archive Diff can and can't do
Setting expectations so you reach for the right tool when the diff isn't the answer.
| Capability | Supported? | If not, use |
|---|---|---|
| Compare two ZIPs by name + CRC32 | Yes | — |
| Diff TAR.GZ / 7z / RAR directly | No (ZIP-only) | tar.gz to zip then diff |
| Show line-level content changes | No (entry-level only) | Extract changed entries, run a text diff |
| Detect renames by content | No (name-exact match) | Compare CRC32 across the two names |
| Batch many archive pairs | No (exactly two inputs) | Script it / one pair at a time |
Cookbook
Each symptom reproduced, with the report you see and what it actually means.
Everything added/removed because one side is a TAR.GZ
The dropzone accepted build.tar.gz, but the engine only parses ZIP central directories, so it reads zero entries — making every file in the ZIP look added (or removed).
Archive A: build.zip (320 entries) Archive B: build.tar.gz (parsed as 0 entries!) Diff summary Added: 0, Removed: 320, Changed: 0, Unchanged: 0 Fix: convert build.tar.gz → build.zip, then re-diff.
Identical builds showing as all add+remove (prefix mismatch)
One ZIP stored files under ./ and the other didn't. Exact-name matching means none of the names line up, so every file is both removed and added.
Archive A entries: ./src/app.js, ./src/util.js Archive B entries: src/app.js, src/util.js Diff summary Added: 2, Removed: 2, Changed: 0, Unchanged: 0 Fix: Path Prefix Remover on A (strip './'), then re-diff → all Unchanged.
The 'drop a second archive' error
Clicking Process with only archive A loaded throws immediately — both inputs are required for a diff.
State: Archive A loaded, second dropzone empty Click Process → Error: Drop a second archive to diff against. Fix: load archive B into 'Upload second archive (B)'.
Tier-limit rejection on an oversized archive
An archive past your tier's size or entry cap is rejected before the diff runs. The limit applies to each archive independently.
Tier: Pro (cap 500 MB / 50,000 entries per archive) Archive B: monorepo-dist.zip (812 MB) Error: archive exceeds your tier limit (500 MB) Fix: Archive Splitter, or upgrade to Pro+Media (2 GB).
One side reads zero entries (corrupt ZIP)
A damaged central directory can't be parsed, so that archive contributes nothing and the other archive's files all look removed.
Archive A: good.zip (500 entries) Archive B: damaged.zip (EOCD not found → 0 entries) Diff summary Added: 0, Removed: 500, Changed: 0, Unchanged: 0 Fix: Archive Integrity Tester → Corrupted ZIP Repair on damaged.zip.
Edge cases and what actually happens
Second archive missing
RejectedProcessing with one input throws Drop a second archive to diff against. Load archive B into the second dropzone (Upload second archive (B)) and click Process again.
Non-ZIP input (tar.gz, 7z, rar)
Zero entriesThe diff engine reads ZIP central directories only. Non-ZIP inputs parse to zero entries, so the other archive's files all look added or removed. Convert to ZIP — e.g. tar.gz to zip — first.
Path-prefix mismatch between the two ZIPs
ExpectedExact-name matching means ./app/x and app/x are different entries, so identical content reads as add+remove. Strip prefixes on both sides with Path Prefix Remover before diffing.
Corrupt or truncated ZIP
Zero entriesIf the End of Central Directory record can't be located, the parser returns zero entries for that side. Validate with Archive Integrity Tester; recover with Corrupted ZIP Repair.
Archive over the tier size or entry cap
Tier limitEach archive is checked independently (Pro 500 MB / 50,000 entries; Pro+Media and Developer 2 GB / 500,000 entries). Oversized archives are rejected before processing — split with Archive Splitter or upgrade.
Free tier — tool not available
Pro requiredArchive Diff requires Pro or higher. On the free tier (50 MB / 500 entries / 1 file) the tool isn't available. Upgrade to Pro to use it.
Expected to see folder differences
By designDirectory entries (names ending in /) are skipped, so empty-folder differences never appear. Only file entries are compared — this is intentional, not a bug.
Expected line-level changes inside files
Out of scopeThe diff is archive-level: it reports which entries changed (by CRC32), not which lines. Extract the Changed entries and run a text diff on the contents.
Process appears to hang
Cache / extensionHard-refresh (Ctrl+Shift+R) to load the latest build, and test in a private window to rule out an extension that intercepts worker messages. The diff itself is fast — it never decompresses.
Encrypted ZIP
Metadata-onlyNames and CRC32 in the central directory are readable even when entries are encrypted, so the entry-level diff still works. It just can't see inside the encrypted contents without the password.
Frequently asked questions
Why does my diff show every file as added or removed?
Almost always because one archive isn't a ZIP (the engine reads ZIP central directories only, so non-ZIP inputs parse to zero entries), or the two ZIPs use different path prefixes so no names line up. Check the format and prefixes first.
Why do identical builds show as all changed?
Usually a path-prefix mismatch (./src/x vs src/x), which makes exact-name matching fail for every entry. Strip prefixes on both with Path Prefix Remover and re-diff.
What does 'Drop a second archive to diff against.' mean?
You clicked Process with only one input. The diff needs two archives — load archive B into the second dropzone and try again.
Can I diff a .tar.gz or .7z?
Not directly — the engine is ZIP-only. Convert to ZIP first (e.g. tar.gz to zip) and diff the resulting ZIPs.
Why does one archive read as zero entries?
Either it isn't a ZIP, or its central directory is corrupt and the End of Central Directory record can't be found. Verify with Archive Integrity Tester and repair with Corrupted ZIP Repair.
Why was my archive rejected before processing?
It exceeded your tier's per-archive cap. Pro is 500 MB / 50,000 entries; Pro+Media and Developer are 2 GB / 500,000 entries. Split with Archive Splitter or upgrade.
Is Archive Diff available on the free tier?
No — it requires Pro or higher. The free tier doesn't include it. Upgrade to Pro, Pro+Media, or Developer to use it.
Why don't folder differences show up?
Directory entries are skipped on both sides by design, so only file content drives the result. An empty-folder difference is never reported as a change.
It says files changed — how do I see what changed inside them?
The diff is entry-level; it names the changed files via CRC32. Extract those entries and run a text diff (or cmp) on the contents to see the actual differences.
Why is a renamed file reported as both added and removed?
Matching is by exact entry name, so a rename or move can't be paired automatically. Compare the CRC32 across the old and new names to confirm it's the same content relocated.
The page seems stuck on Processing — what now?
Hard-refresh (Ctrl+Shift+R) to load the latest build, and test in a private window to rule out an extension interfering with the worker. The diff is fast because it never decompresses, so a long hang usually means a stale chunk or an extension.
Does it work on encrypted ZIPs?
At the entry level, yes — central-directory names and CRC32 are readable even when entries are encrypted. It can't compare the decrypted contents, but added/removed/changed structure is still visible.
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.