How to folder to zip online for free
- Step 1Open Folder → ZIP and click the dropzone — The page shows a single dropzone labelled Pick or drop a folder to ZIP. Clicking it opens your OS folder picker (the browser's
webkitdirectoryfile input). In Chrome and Edge you can also drag a folder in, but clicking to pick is the reliable path — see step 2 for why. - Step 2Pick the folder (not the individual files) — Select the folder itself in the picker, not its contents. The browser then enumerates every file underneath it recursively and reports each one with a
webkitRelativePathlikereport-2026/figures/chart.png. The tool reconstructs the tree from those paths. - Step 3Confirm the file list and entry count — The dropzone shows the first few files it found plus the running size. Cross-check this against your folder: if a Chrome drag-drop only picked up loose top-level files (not subfolders), re-pick using the click-to-browse picker, which traverses subfolders correctly.
- Step 4Run the ZIP — Click the action button.
fflate.zipSynccompresses every collected file with Deflate level 6 in one pass. For a few hundred small files this is near-instant; for hundreds of MB it runs for a few seconds while the tab does the work locally. - Step 5Read the result metrics — The result panel shows Files (entry count), Folder (the top-level name used for the download), and Saved (the compression percentage — output size vs. original total). Already-compressed content like JPEGs or MP4s will show a low or near-zero Saved figure; that's expected, not a failure.
- Step 6Download and verify — The download is named
<folder-name>.zip. Open it in your OS archive tool to confirm the tree matches. If you want to drop.DS_Store/Thumbs.dbclutter, run the output through filename-sanitizer; to remove empty directories, use empty-folder-pruner.
What Folder → ZIP does (and what it deliberately does not)
The tool has an empty option schema — there is nothing to configure. This table maps each fixed behaviour so you know exactly what to expect.
| Aspect | Behaviour | Configurable? |
|---|---|---|
| Compression engine | fflate.zipSync, Deflate (the standard ZIP method every unzip tool reads) | No — fixed |
| Compression level | Level 6 (balanced). To pick 0–9 use smart-archive-compressor; to compare levels use compression-level-optimizer | No — fixed at 6 |
| Directory structure | Preserved exactly from webkitRelativePath; nested subfolders kept | No — always preserved |
| Timestamps | Each entry gets the file's lastModified as its MS-DOS date/time | No (use timestamp-normalizer to override) |
| Encryption / password | None — this is a plain ZIP. For AES-256 use encrypted-zip-creator | No — not supported |
| Output filename | <top-level folder name>.zip (first path segment), or folder.zip if no path is available | No — auto |
| Output format | Standard .zip only — no 7z, RAR, or TAR.GZ output | No — ZIP only |
Free vs. paid limits for Folder → ZIP
Limits come from the archive tool family. The entry-count cap matters as much as the byte cap — a folder of thousands of tiny files can hit the entry limit well before the size limit.
| Tier | Max bytes per job | Max entries per archive | Folders/files per job |
|---|---|---|---|
| Free | 50 MB | 500 | 1 |
| Pro | 500 MB | 50,000 | 20 |
| Pro-media | 2 GB | 500,000 | 100 |
| Developer | 2 GB | 500,000 | Unlimited |
Cookbook
Concrete folder shapes and what the tool returns for each. Sizes are illustrative; your Saved percentage depends entirely on how compressible the content already is.
ZIP a project folder for sharing
A typical source folder with nested directories. The tool walks every file, rebuilds the tree, and names the download after the root folder.
Folder picked: my-site/ my-site/index.html my-site/css/style.css my-site/js/app.js my-site/img/logo.png Result panel: Files: 4 Folder: my-site Saved: 62.4% Download: my-site.zip (tree preserved exactly)
Already-compressed media gives near-zero savings
A folder of photos and a video. JPEG and MP4 are already entropy-coded, so Deflate can barely shrink them. A low Saved figure here is correct behaviour, not a bug.
Folder picked: vacation/ vacation/IMG_001.jpg (4.2 MB) vacation/IMG_002.jpg (3.9 MB) vacation/clip.mp4 (18 MB) Result panel: Files: 3 Folder: vacation Saved: 1.2% <-- expected for media The ZIP is essentially a container, not a compressor, here.
Hidden OS files are included unless you strip them
macOS and Windows scatter metadata files into folders. Folder → ZIP includes everything the browser exposes — clean up afterward with the sibling tools.
Folder picked: deliverables/ deliverables/contract.pdf deliverables/.DS_Store <-- macOS Finder deliverables/notes/Thumbs.db <-- Windows Explorer deliverables.zip contains all 3 entries. Clean it: -> filename-sanitizer (drops .DS_Store / Thumbs.db) -> empty-folder-pruner (drops now-empty dirs)
Hitting the free entry-count cap before the size cap
A folder of many tiny files. The 500-entry free limit can stop a job that is well under 50 MB. Upgrade or split the folder.
Folder picked: icons/ (1,800 SVG files, 6 MB total)
Free tier: blocked at 500-entry limit (6 MB < 50 MB,
but 1,800 entries > 500)
Pro tier: ok (50,000-entry cap)
Workaround on free: ZIP subfolders separately,
or select fewer than 500 files.Output opens cleanly in any unzip tool
Because the output is a plain Deflate ZIP, it is universally readable. Verify on the command line if you like.
$ unzip -l my-site.zip
Archive: my-site.zip
Length Date Time Name
------- ---------- ----- ----
842 06-10-2026 14:22 index.html
1304 06-09-2026 09:11 css/style.css
611 06-09-2026 09:11 js/app.js
18233 05-30-2026 18:40 img/logo.png
------- 4 files
(dates = each file's original lastModified)Edge cases and what actually happens
Drag-and-drop of a folder picks up only top-level files
Use the pickerDropping a folder onto the dropzone reads dataTransfer.files, which in most browsers does not recurse into subfolders — you get only the loose files at the top level. The reliable path is to click the dropzone, which opens the webkitdirectory file picker and traverses the whole tree. If your entry count looks too low, re-pick using click-to-browse.
Folder drag-drop doesn't work at all in Firefox
Use the pickerFirefox supports the webkitdirectory file input but not dragging a folder into a dropzone. Click the dropzone and choose the folder through Firefox's directory picker — it enumerates the full tree correctly. This is a browser limitation, not a tool error.
Free job exceeds 500 entries
Tier limitA folder with more than 500 files exceeds the free archive entry cap even if the total size is small. ZIP a smaller selection, ZIP subfolders one at a time, or upgrade — Pro allows 50,000 entries and Pro-media/Developer allow 500,000.
Free job exceeds 50 MB
Tier limitThe free archive tier caps a job at 50 MB total. Larger folders need Pro (500 MB) or Pro-media/Developer (2 GB). The page shows the active per-job cap as 'max ... per file' near the dropzone.
Hidden / system files end up in the ZIP
By design.DS_Store, Thumbs.db, .git/ internals, and other hidden files are included because the tool ZIPs everything the browser exposes. This is intentional (it makes the archive a faithful copy). To strip OS junk, run the output through filename-sanitizer; to remove empty directories, use empty-folder-pruner.
Compression savings are near zero
ExpectedIf the folder is mostly JPEG/PNG/MP4/already-zipped content, Deflate cannot shrink it further, so the Saved figure approaches 0%. The ZIP still bundles everything into one file — that's the value here, not the compression. For maximum-ratio attempts on compressible content, try smart-archive-compressor at level 9.
Very large folder makes the tab slow or unresponsive
Memory boundfflate.zipSync reads every file into memory and produces the ZIP in one pass, so a multi-hundred-MB folder briefly uses a lot of RAM and can make the tab unresponsive mid-job. It completes — give it a moment. For huge inputs that need incremental output, streaming-zip-builder uses fflate's streaming Zip class instead.
Empty folder selected
Nothing to doIf the browser hands back zero files (an empty folder, or a permission prompt was dismissed), the tool errors with 'Drop a folder onto the input.' Re-pick a folder that actually contains files.
Two top-level folders selected at once
First name winsThe download is named after the first file's top-level path segment. If you somehow include files from two roots, the ZIP still contains all entries with their full relative paths, but the filename reflects only the first root. Pick a single parent folder if the name matters.
Frequently asked questions
Is Folder → ZIP really free?
Yes. The free tier ZIPs folders up to 50 MB and 500 entries per job with no signup. Everything runs in your browser, so there's no server cost to recover and nothing to pay for unless you need the larger Pro (500 MB / 50,000 entries) or Pro-media/Developer (2 GB / 500,000 entries) caps.
Are my files uploaded anywhere?
No. The tool reads your folder locally and builds the ZIP in the page with fflate.zipSync. The bytes never leave your machine — there is no server-side processing path for archive tools at all. This is why it works offline once the page has loaded.
Does it keep my subfolders and folder structure?
Yes, exactly. Each file's relative path (from the browser's webkitRelativePath) becomes its ZIP entry path, so src/components/Button.tsx stays at src/components/Button.tsx inside the archive. Unzipping recreates the identical tree.
Can I choose the compression level?
Not in this tool — it always uses Deflate level 6, the balanced default. If you need a specific level (0 for store-only up to 9 for maximum), use smart-archive-compressor; to see how much each level actually saves on your data, use compression-level-optimizer.
Can I password-protect or encrypt the ZIP?
Not with Folder → ZIP — it produces a plain, unencrypted ZIP. For WinZip-compatible AES-256 encryption with a password, use encrypted-zip-creator, which is powered by zip.js.
Why is the ZIP barely smaller than the folder?
Because the folder is probably full of already-compressed files (JPEG, PNG, MP4, or other ZIPs). Deflate can't meaningfully shrink data that's already entropy-coded, so the Saved percentage drops toward zero. The ZIP is still useful as a single bundle. Text, source code, CSV, and logs compress a lot more.
Can it output 7z, RAR, or TAR.GZ instead of ZIP?
No — Folder → ZIP only writes .zip. To convert between archive formats, use the format-conversion tools such as archive-format-converter or zip-to-tar-gz. RAR and 7z creation are not supported in-browser.
Why does drag-drop only grab some of my files?
Dragging a folder onto the dropzone reads dataTransfer.files, which usually doesn't recurse into subfolders. Click the dropzone instead to use the proper folder picker (webkitdirectory), which walks the entire tree. If your entry count looks too low, that's the fix.
Why doesn't folder 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 handles the full tree fine.
Are hidden files like .DS_Store included?
Yes — the tool ZIPs everything the browser exposes, including .DS_Store, Thumbs.db, and .git internals. To strip macOS/Windows metadata files, run the result through filename-sanitizer; to drop empty directories left behind, use empty-folder-pruner.
What name does the download get?
The top-level folder's name plus .zip — pick a folder called report-2026 and you get report-2026.zip. If no path information is available (rare), it falls back to folder.zip. There's no field to rename it in the tool; rename the downloaded file in your OS afterward.
Will the timestamps on my files survive?
Yes. Each file's lastModified time is written into the ZIP entry's MS-DOS date/time field, so modification dates round-trip. If you want every entry stamped with a single fixed date instead (for reproducible builds), run the ZIP through timestamp-normalizer.
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.