How to archive diff online: compare two zip archives in the browser
- Step 1Open the Archive Diff — Go to /archive-tools/archive-diff. This is a Pro-tier tool, so sign in on a Pro, Pro+Media, or Developer plan — the free tier (50 MB / 500 entries / 1 file) does not include it.
- Step 2Drop archive A (the baseline) — Use the first dropzone for your before archive — typically the older build, the previous release, or the known-good backup. Use a real
.zip; the diff engine reads ZIP central directories only. - Step 3Drop archive B (the comparison) — Use the second dropzone labelled Upload second archive (B) for the after archive — the new build, the candidate release, or the suspect backup. Both inputs are required; the tool errors with
Drop a second archive to diff against.if B is missing. - Step 4Click Process — There are no options to set — the schema is empty. The tool parses both central directories, maps each non-directory entry to its CRC32, and runs the comparison entirely client-side.
- Step 5Read the four-bucket report — The result panel shows counts for Added / Removed / Changed / Unchanged plus colour-coded lists (green added, red removed, amber changed). Each list shows the first 200 names with a
… N moreline if a bucket is longer. - Step 6Download or share — Download the report as
diff-<A>-vs-<B>.html. It is a self-contained file with inline styles — open it anywhere or attach it to a code review without needing JAD.
What each diff bucket means
Comparison is by entry name then CRC32. Both values come straight from each ZIP's central directory — no file is decompressed.
| Bucket | Condition | Colour | What it tells you |
|---|---|---|---|
| Added | Entry name is in B but not in A | Green | A new file appeared in the newer archive |
| Removed | Entry name is in A but not in B | Red | A file that existed in the baseline is gone |
| Changed | Same name in both, but CRC32 differs | Amber | Same path, different content — the file you most want to inspect |
| Unchanged | Same name and same CRC32 in both | Counted only | Byte-identical content; reported as a count, not listed |
Tier access and per-archive limits
Limits apply to each archive independently. Archive Diff requires Pro or higher; the free tier does not include it.
| Tier | Max size per archive | Max entries per archive | Archive Diff available? |
|---|---|---|---|
| Free | 50 MB | 500 | No — Pro tool |
| Pro | 500 MB | 50,000 | Yes |
| Pro+Media | 2 GB | 500,000 | Yes |
| Developer | 2 GB | 500,000 | Yes |
| Enterprise | Unlimited | Unlimited | Yes |
Cookbook
Real two-archive comparisons, showing the exact inputs and the four-bucket report you get back.
Comparing two release ZIPs of the same app
v1.2.0 vs v1.2.1. One file added, one config changed, one obsolete file dropped. The report makes the surface area of the release obvious in seconds.
Archive A: app-1.2.0.zip (412 entries) Archive B: app-1.2.1.zip (412 entries) Diff summary Added: 1, Removed: 1, Changed: 2, Unchanged: 410 + Added (1) + dist/feature-flags.js - Removed (1) - dist/legacy-shim.js ~ Changed (2) ~ dist/app.js ~ package.json
Confirming a backup is identical to the source
If every file is byte-identical, all four real buckets are empty and Unchanged equals the file count. Any non-zero Added/Removed/Changed is your signal that the backup drifted.
Archive A: nightly-2026-06-12.zip Archive B: nightly-2026-06-13.zip Diff summary Added: 0, Removed: 0, Changed: 0, Unchanged: 1843 (no entries listed — the two archives contain identical files)
Spotting which files a malware scan flagged actually changed
Given a clean baseline and a possibly-tampered copy, the Changed bucket is your shortlist. Same name, different CRC32 means the bytes differ — exactly the files to extract and inspect.
Archive A: site-clean.zip Archive B: site-from-server.zip Diff summary Added: 2, Removed: 0, Changed: 1, Unchanged: 1204 + Added (2) + uploads/.cache.php + wp-content/x.php ~ Changed (1) ~ index.php
A long Added bucket is truncated to 200 names
When a bucket exceeds 200 entries the HTML report lists the first 200 and appends a count. The summary line at the top always reflects the true total.
Diff summary Added: 1287, Removed: 0, Changed: 4, Unchanged: 96 + Added (1287) + assets/img/0001.png + assets/img/0002.png … (198 more shown) … 1087 more
Diffing two ZIPs of the same tree built on different machines
Reproducible-build check. If the only differences are timestamps the content CRC32 is identical, so files stay in Unchanged. If a tool injected different bytes, those files surface in Changed.
Archive A: build-ci.zip Archive B: build-local.zip Diff summary Added: 0, Removed: 0, Changed: 1, Unchanged: 322 ~ Changed (1) ~ BUILDINFO.txt (embedded build host differs → CRC32 differs)
Edge cases and what actually happens
Second archive not provided
RejectedBoth dropzones are required. If you process with only archive A loaded, the tool throws Drop a second archive to diff against. Load B into the second dropzone and click Process again.
You dropped a .tar.gz or .7z instead of a ZIP
Zero entriesThe dropzone accepts many extensions, but the diff engine reads ZIP central directories only. A non-ZIP input parses to zero entries, so everything in the other archive shows as added or removed. Re-zip the tree as a real .zip first.
Directory entries (folders) in the ZIP
By designEntries whose name ends in / are skipped on both sides. A folder that exists in one archive but not the other never appears as a phantom Added/Removed — only actual files are compared.
Same content, different path
ExpectedA file moved from src/a.js to lib/a.js shows as one Removed (src/a.js) and one Added (lib/a.js). The diff matches by exact name first, so a move reads as a delete plus an add, not a rename.
Archive over your tier's size or entry cap
Tier limitEach archive is checked against your tier before processing: Pro 500 MB / 50,000 entries, Pro+Media and Developer 2 GB / 500,000 entries. An archive past the cap is rejected with a tier-limit message — upgrade or split it with Archive Splitter.
Empty ZIP (valid, but no files)
SupportedA valid ZIP with no file entries parses fine and contributes nothing. Diffing it against a populated ZIP reports every file in the other archive as Added or Removed accordingly.
Corrupt central directory
Zero entriesIf the End of Central Directory record can't be found the parser returns zero entries for that side, skewing the diff. Run Corrupted ZIP Repair on the file, or verify it with Archive Integrity Tester first.
CRC32 collision (two different files, same checksum)
TheoreticalCRC32 is a 32-bit checksum, so a deliberate collision is possible though astronomically unlikely for organic files. For tamper-evidence where adversarial collisions matter, pair the diff with Per-File Checksum Generator to produce SHA-256 manifests.
Frequently asked questions
Is the Archive Diff really free?
No — despite the common search phrase, Archive Diff is a Pro-tier tool. The free tier (50 MB / 500 entries / one file) doesn't include it. Many other JAD archive tools are free; the diff requires Pro, Pro+Media, or Developer.
Does it upload my archives anywhere?
No. The diff runs in WebAssembly inside your browser tab. Open DevTools → Network during Process and you'll see zero outbound requests for the file data. Both archives stay on your device.
What formats can it diff?
ZIP. The engine parses each archive's ZIP central directory. Other formats are accepted by the dropzone but parse to zero entries, so re-zip TAR.GZ/7z/RAR trees as .zip before diffing.
How does it decide a file 'changed'?
Same entry name in both archives but a different CRC32. The CRC32 is read directly from each ZIP's central directory, so no file is decompressed to make the comparison.
What does 'unchanged' mean exactly?
Same name and same CRC32 on both sides. Unchanged is reported as a count only — those entries aren't listed, to keep the report focused on what actually differs.
Does it detect renamed files?
No. Matching is by exact entry name, so a rename or move reads as one Removed plus one Added. The diff doesn't pair files by content across different paths.
Why is my Added/Removed list cut off at 200 names?
The HTML report lists the first 200 entries per bucket and appends … N more for longer buckets. The summary counts at the top always show the true totals.
What's the output — a new archive?
No. The output is an HTML diff report rendered inline and downloadable as diff-<A>-vs-<B>.html. It contains the summary counts and the colour-coded lists, with inline styles so it opens anywhere.
Are folders compared?
No. Directory entries (names ending in /) are skipped on both sides. Only file entries are mapped and compared, so empty-folder differences never show up.
How big an archive can I diff?
Per archive: Pro 500 MB / 50,000 entries, Pro+Media and Developer 2 GB / 500,000 entries. Both archives are checked independently against your tier before the diff runs.
Can it diff the text inside changed files?
No — this is an archive-level diff. It tells you which entries changed; extract those and run a text-diff tool on the contents. The Changed bucket is your shortlist of files to inspect.
Which browsers work?
Any browser with WebAssembly: Chrome, Edge, Firefox, Safari, Brave, Opera, desktop or mobile. Very large archives are bounded by device memory, not by the tool.
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.