How to troubleshooting folder → zip
- Step 1Check the Files count first — After picking, the dropzone shows how many files it found. If that number is far below what's in your folder, you almost certainly drag-dropped (top-level only). Re-pick by clicking the dropzone to use the
webkitdirectorypicker, which recurses into subfolders. - Step 2If you're in Firefox, use the picker not drag-drop — Firefox doesn't support dragging a folder into a dropzone at all. Click the dropzone and choose the folder through Firefox's directory dialog — it enumerates the whole tree correctly. This is a browser limitation, not a tool fault.
- Step 3Read the error: size vs. entry count — A tier block can be either. Free allows 50 MB and 500 entries — a 6 MB folder of 1,800 icons is blocked by the entry cap, not the size cap. Note which limit the message names, then either trim the selection, ZIP subfolders separately, or upgrade.
- Step 4If 'Saved' is near zero, check the content — JPEG/PNG/MP4/already-zipped files can't be Deflated further, so a low Saved figure is correct. The ZIP is still bundling everything into one file. For text/code, expect much higher savings; for maximum-ratio attempts use smart-archive-compressor at level 9.
- Step 5If hidden files appear in the ZIP, clean afterward —
.DS_Store,Thumbs.db, and.gitinternals are included by design (the tool packs everything the browser exposes). Run the output through filename-sanitizer to drop OS metadata and empty-folder-pruner for empty directories. - Step 6If the tab stalls, give it a moment (or stream) —
fflate.zipSyncreads everything into memory and builds the ZIP in one pass, so a large folder briefly spikes RAM and can freeze the tab — it does complete. For very large inputs, streaming-zip-builder uses fflate's incremental Zip class instead.
Symptom → cause → fix
The common Folder → ZIP reports, each traced to the real browser/fflate behaviour and the exact remedy.
| Symptom | Real cause | Fix |
|---|---|---|
| ZIP is missing my subfolders / looks half-empty | Drag-drop reads dataTransfer.files (no recursion) | Click the dropzone to use the folder picker; check Files count |
| Drag-drop does nothing in Firefox | Firefox doesn't support folder drag-drop | Use the picker (click the dropzone) |
| 'Exceeds tier limit' on a tiny folder | Hit the 500-entry free cap, not the 50 MB cap | Trim selection, ZIP subfolders, or upgrade |
| 'Exceeds tier limit' on a large folder | Over the per-job byte cap (free 50 MB) | Upgrade (Pro 500 MB, Pro-media/Developer 2 GB) |
| ZIP barely smaller than the folder | Content already compressed (JPEG/MP4/zip) | Expected; nothing to fix. Text/code compresses more |
| .DS_Store / Thumbs.db inside the ZIP | All exposed files are packed by design | Run filename-sanitizer / empty-folder-pruner |
| Tab freezes on a huge folder | zipSync is in-memory, single-pass | Wait it out, or use streaming-zip-builder |
| 'Drop a folder onto the input' error | Browser returned zero files (empty/cancelled) | Re-pick a folder that contains files |
'It can't do X' — where X actually lives
Many troubleshooting tickets are really feature requests. Folder → ZIP's empty option schema is intentional; here's the right tool for each missing capability.
| Expected capability | Folder → ZIP | Use instead |
|---|---|---|
| Set compression level | No (fixed 6) | smart-archive-compressor / compression-level-optimizer |
| Exclude / include specific files | No filter | selective-zipper (glob) |
| Password / encryption | Plaintext | encrypted-zip-creator (AES-256) |
| Reproducible timestamps | Real mtimes | timestamp-normalizer |
| Output 7z / tar.gz | ZIP only | archive-format-converter |
| Split into parts | One file | multi-part-archive-creator |
Cookbook
Walk-throughs for the exact reports we see most. Each shows the symptom and the concrete resolution.
Half-empty ZIP after drag-drop
The single most common issue. Drag-drop didn't recurse; the picker does.
Symptom: Folder has 320 files across 12 subfolders. Dropped it -> Files: 7 (only top-level loose files) ZIP missing every subfolder. Fix: Click the dropzone -> pick the folder via dialog -> Files: 320 -> ZIP contains the full tree.
Tier block that's really an entry-count block
A small folder rejected on the free tier — by entry count, not size.
Folder: icons/ (1,800 SVGs, 6 MB) Free tier result: blocked (entry limit) 6 MB < 50 MB (size OK) 1,800 > 500 (entry cap hit) <-- the real cause Fix: ZIP subfolders separately, select <500 files, or upgrade (Pro = 50,000 entries).
'It didn't compress anything'
Already-compressed media gives near-zero savings — correct, not broken.
Folder: photos/ (200 JPEGs, 480 MB) Folder → ZIP -> photos.zip (478 MB, Saved: 0.4%) This is expected: JPEG is already entropy-coded. The ZIP is a container here, not a compressor. Text/code/CSV would show 50-80%+ savings.
Stripping OS junk from the output
Hidden files are packed by design; clean them in a second pass.
photos.zip contains: photos/IMG_001.jpg photos/.DS_Store <-- macOS photos/sub/Thumbs.db <-- Windows Fix: filename-sanitizer -> drops .DS_Store / Thumbs.db empty-folder-pruner -> drops any now-empty dirs
Tab unresponsive on a big folder
zipSync is in-memory and single-pass; large jobs spike RAM but finish.
Folder: assets/ (1.4 GB, Pro-media tier) Click Run -> tab busy / 'page unresponsive' prompt Do: click 'Wait', let it finish (it will). Better for huge inputs: streaming-zip-builder (incremental, lower peak RAM).
Edge cases and what actually happens
Drag-drop grabs only top-level files
Use the pickerDropping a folder reads dataTransfer.files, which in most browsers doesn't recurse into subfolders — you get the loose top-level files only. Click the dropzone to use the webkitdirectory picker, which walks the whole tree. If the Files count looks low after dropping, this is why.
Firefox folder drag-drop fails entirely
Use the pickerFirefox supports the folder picker but not dragging a folder into a dropzone. Click the dropzone and choose the folder through Firefox's directory dialog. This is a documented Firefox limitation, not a tool error — the resulting ZIP is identical to Chrome's.
Entry-count cap hit on a small folder
Tier limitFree allows 500 entries regardless of size, so a 6 MB folder of thousands of tiny files is blocked by the entry cap, not the byte cap. Read the error to see which limit fired. Fix: trim the selection, ZIP subfolders one at a time, or upgrade (Pro = 50,000 entries).
Byte cap hit on a large folder
Tier limitFree caps a job at 50 MB total; Pro at 500 MB; Pro-media/Developer at 2 GB. The page shows the active per-job cap near the dropzone as 'max ... per file'. Upgrade or split the folder into smaller selections to stay under the cap.
Near-zero compression on media
ExpectedJPEG, PNG, MP4, and existing ZIPs are already compressed, so Deflate can't shrink them and Saved approaches 0%. The tool is still bundling everything into one file. This is a property of the data, not a malfunction — text/code/CSV folders compress far more.
Hidden / system files appear in the ZIP
By design.DS_Store, Thumbs.db, .git internals, and other hidden files are included because the tool packs everything the browser exposes. To remove them, run the output through filename-sanitizer; to drop now-empty directories, use empty-folder-pruner.
Tab freezes / 'page unresponsive' on a huge folder
Memory boundfflate.zipSync reads all files into memory and builds the archive in one pass, so a large folder spikes RAM and can trigger the browser's unresponsive-page prompt. Choose 'Wait' — it completes. For very large inputs, streaming-zip-builder packs incrementally with lower peak memory.
'Drop a folder onto the input' error
No filesIf the browser returns zero files — an empty folder, a cancelled picker, or a dismissed permission prompt — the tool errors with 'Drop a folder onto the input.' Re-pick a folder that actually contains files. This isn't a crash; nothing was selected.
WebAssembly-blocking extension or strict policy
EnvironmentFolder → ZIP itself uses fflate (plain JS) and doesn't need WASM, but if you're on a hardened browser profile or behind a strict CSP that blocks scripts, the page may not initialise. Try a standard profile or another supported browser (Chrome/Edge), and click-pick the folder.
Output won't open / looks corrupt
InvestigateA complete Folder → ZIP output is a standard Deflate ZIP that opens everywhere; a 'corrupt' file usually means a partial download or an interrupted huge job. Re-run, let it finish, and verify with archive-integrity-tester or list it with archive-previewer.
Frequently asked questions
Why is my ZIP missing all the subfolders?
You almost certainly drag-dropped the folder. Drag-drop reads dataTransfer.files, which in most browsers doesn't recurse into subfolders — you get only the loose top-level files. Click the dropzone instead to use the webkitdirectory picker, which walks the whole tree. Confirm via the Files count.
Why doesn't drag-drop work in Firefox?
Firefox doesn't support dragging a folder into a dropzone, though it does support the folder picker. Click the dropzone and choose your folder through Firefox's directory dialog — it enumerates the full tree, and the resulting ZIP is identical to other browsers.
Why am I getting a tier-limit error on a small folder?
Because the free tier caps both size (50 MB) and entry count (500). A small folder with thousands of tiny files hits the 500-entry cap even though it's well under 50 MB. Read the error to see which limit fired, then trim the selection, ZIP subfolders separately, or upgrade (Pro = 50,000 entries).
Why is the ZIP barely smaller than the folder?
Because the folder is mostly already-compressed files (JPEG, PNG, MP4, existing ZIPs). Deflate can't shrink entropy-coded data, so the Saved figure approaches zero — that's correct behaviour. Text, source code, and CSV compress much more. For maximum-ratio attempts use smart-archive-compressor at level 9.
Why are .DS_Store / Thumbs.db inside my ZIP?
Folder → ZIP packs everything the browser exposes, including hidden OS metadata files. That's by design (a faithful copy). To strip them, run the output through filename-sanitizer; to remove empty directories left behind, use empty-folder-pruner.
Why does my tab freeze when I ZIP a big folder?
fflate.zipSync builds the entire archive in memory in one pass, so a large folder spikes RAM and can trigger the browser's 'page unresponsive' prompt. Choose 'Wait' — it finishes. For very large inputs, streaming-zip-builder packs incrementally with lower peak memory.
It says 'Drop a folder onto the input' even though I picked one — why?
The browser handed back zero files — usually an empty folder, a cancelled picker, or a dismissed permission prompt. Re-pick a folder that actually contains files. Nothing crashed; there was simply nothing to ZIP.
Can I make a smaller ZIP than I'm getting?
Folder → ZIP is fixed at Deflate level 6, so you can't tune it here. Use smart-archive-compressor at level 9 for a bit more on compressible content, or compression-level-optimizer to see what each level actually saves on your data. On media, no level helps much.
How do I keep node_modules / build junk out of the ZIP?
Folder → ZIP has no exclude filter — it packs everything. Either prune the folder first, or use selective-zipper with a glob (e.g. src/**/*) to include only what you want. A whole-project ZIP also tends to exceed the entry-count caps.
My ZIP won't open / says it's corrupt — what now?
A complete Folder → ZIP output is a standard ZIP that opens everywhere, so 'corrupt' usually means a partial download or an interrupted huge job. Re-run and let it finish, then verify with archive-integrity-tester or list the contents with archive-previewer.
Are my files uploaded when something goes wrong?
No — never. The tool runs entirely in your browser with fflate; there's no server-side path for archive tools. Errors are local (browser limits, tier caps, memory), and your folder contents never leave your machine regardless of whether the job succeeds.
Does Folder → ZIP need WebAssembly to run?
No — it uses fflate, which is plain JavaScript, so it works even where WASM is blocked. If the page won't initialise at all, the cause is usually a strict browser profile or CSP blocking scripts generally; try a standard profile or Chrome/Edge, then click-pick the folder.
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.