How to smart file compressor online for free
- Step 1Open the compressor — Go to /archive-tools/smart-archive-compressor. No account is needed for the free tier. The page loads the
fflateengine lazily on first run. - Step 2Drop your files (or a folder) — Drag files onto the Drop files to process zone, or click to browse. Because this tool is multi-file, you can select many at once; their relative paths are kept so a dropped folder rebuilds as
folder/...inside the ZIP. - Step 3Pick a compression level — Use the Compression level slider. Leave it at
6for everyday use, drop to0to bundle already-compressed media without wasting CPU, or push to9when squeezing the last few percent off text or source code. - Step 4Click Generate — Press Generate.
fflate.zipSynccompresses every entry in-browser; the button shows a Processing… spinner while the central directory is assembled. - Step 5Read the metrics — The result panel reports Files, Level, Saved %, Original size, and Output size. A green Saved badge confirms the ZIP is smaller than the input total (it may read 0% for entropy-dense media).
- Step 6Download compressed.zip — Click Download ZIP. The file saves as
compressed.zip. There is no server round-trip — the download is the in-memory blob you just built.
What the Smart Compressor actually does
The only user-facing control is the compression-level slider. Everything else is fixed by the fflate ZIP pipeline.
| Aspect | Behaviour | Source / note |
|---|---|---|
| Input | One or more files, any type; folders preserve relative paths | Multi-file + generative — drop files, not an existing archive |
| Engine | fflate.zipSync(map, { level }) — pure-JS DEFLATE | Runs in the browser tab; no WASM needed for this path |
| Only option | compressionLevel slider, 0–9, default 6 | Range input in the Options panel |
| Output | A single ZIP named compressed.zip | Always ZIP — never 7z, RAR, or tar.gz from this tool |
| Encryption | None — output is unencrypted | For passwords use /archive-tools/encrypted-zip-creator |
| Metrics shown | Files, Level, Saved %, Original, Output | Computed from the result blob versus the input total |
Compression level guide
fflate level meanings and when each makes sense. Ratios are typical, not guaranteed — entropy-dense data resists DEFLATE.
| Level | Meaning | Speed | Best for |
|---|---|---|---|
0 | Stored — no compression, just packaged | Instant | Already-compressed media (JPEG, MP4, MP3, existing ZIPs) |
1–3 | Fast, light compression | Very fast | Large mixed bundles where speed beats a few extra percent |
6 | Default sweet spot — ~95% of level 9's ratio | Fast | Everyday files, source, docs, logs |
7–9 | Maximum effort, diminishing returns | Slower | Squeezing the last few percent off highly compressible text |
Tier limits (archive family)
Per-job caps enforced for archive tools. Note the entry-count limit, not just total bytes.
| Tier | Max bytes per job | Max entries | Files per batch |
|---|---|---|---|
| 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
Real before/after runs from the Smart Compressor. The first block is the input, the second is what the metrics panel reports after clicking Generate.
A folder of source code at level 6
Source and text compress hard with DEFLATE. Dropping a project folder keeps the relative paths and shrinks the bundle to roughly a fifth of its size.
Dropped (folder, level 6): project/src/index.ts 42 KB project/src/utils.ts 18 KB project/README.md 6 KB project/package.json 2 KB Metrics after Generate: Files: 4 Level: 6 Saved: 78.4% Original: 68 KB -> Output (compressed.zip): 14.7 KB
Already-compressed media — drop to level 0
JPEGs and MP4s are entropy-dense, so DEFLATE cannot shrink them. Level 6 wastes CPU for ~0% gain; level 0 (stored) packages them instantly.
Dropped (level 0): photos/IMG_2201.jpg 3.4 MB photos/IMG_2202.jpg 3.1 MB clip.mp4 12.0 MB Metrics after Generate: Files: 3 Level: 0 Saved: 0.1% Original: 18.5 MB -> Output: 18.5 MB (packaged, not compressed)
Squeeze the last percent — level 9 on logs
Highly repetitive text like server logs benefits most from maximum effort. The extra time at level 9 buys a few more points over level 6.
Dropped (level 9): app-2026-06-01.log 55 MB (Pro tier) Metrics after Generate: Files: 1 Level: 9 Saved: 92.7% Original: 55 MB -> Output: 4.0 MB
Re-zipping an existing ZIP is a no-op
Feeding a finished ZIP back in just wraps it in another DEFLATE layer that cannot compress already-compressed data. Saved reads ~0% — extract first if you wanted to recompress the contents.
Dropped (level 6): backup.zip 40 MB (already a ZIP) Metrics after Generate: Files: 1 Level: 6 Saved: 0.0% Original: 40 MB -> Output: 40 MB Fix: extract with /archive-tools/multi-format-extractor, then compress the files.
Free-tier entry cap
The limit is not only size — a free job is also capped at 500 entries. A folder with thousands of tiny files trips the entry limit even when the bytes are small.
Dropped (level 6, Free tier):
node_modules/... 1,840 files, 31 MB total
Result:
Blocked — exceeds the 500-entry free limit.
Fix: upgrade to Pro (50,000 entries) or prune first
with /archive-tools/empty-folder-pruner.Edge cases and what actually happens
No files dropped
RejectedIf you click Generate with an empty drop zone the processor throws "Drop one or more files to compress." Add at least one file. This tool builds an archive from files — it does not read an existing one.
File larger than the tier cap
Tier limitFree jobs are capped at 50 MB, Pro at 500 MB, Pro-media and Developer at 2 GB. Oversized input is blocked before the ZIP completes. The drop zone shows your current "max ... per file" label so you know the active cap.
More than 500 entries on Free
Tier limitThe archive entry-count cap is separate from byte size: Free allows 500 entries, Pro 50,000, Pro-media and Developer 500,000. A folder of many tiny files can hit the entry cap while well under the size cap.
Dropping an already-compressed file
ExpectedJPEG, MP4, MP3, and existing ZIPs are entropy-dense; DEFLATE cannot shrink them and Saved reads near 0%. Set the level to 0 to package them without burning CPU on a futile pass.
Wanting a password on the output
By designThe Smart Compressor produces an unencrypted ZIP — there is no password field. For AES-256 encryption use /archive-tools/encrypted-zip-creator, which adds a password control on top of the same DEFLATE pipeline.
Expecting 7z or tar.gz output
By designThis tool only writes ZIP. To convert to tar.gz or gz after compressing, run /archive-tools/zip-to-tar-gz or /archive-tools/archive-format-converter on the resulting ZIP.
Folder paths in the output
PreservedFiles keep their webkitRelativePath, so a dropped folder rebuilds as folder/sub/file inside the ZIP and extracts back to the same tree. Strip an unwanted top-level folder afterwards with /archive-tools/path-prefix-remover.
Hidden/system files included
ExpectedEvery file the browser exposes is added, including .DS_Store or .git if you dropped them. Clean them out afterwards with /archive-tools/filename-sanitizer or /archive-tools/empty-folder-pruner.
Output not byte-identical across machines
ExpectedEntry timestamps come from each file's lastModified, so two machines can produce different bytes. Pass the ZIP through /archive-tools/timestamp-normalizer at a fixed date for reproducible builds.
Very large job exhausts browser memory
Memory limitzipSync holds all input and output in memory. A multi-hundred-MB job can run the tab out of RAM, especially on mobile. If you only need to build a large ZIP from local files, /archive-tools/streaming-zip-builder keeps memory bounded.
Frequently asked questions
Does the Smart Compressor upload my files?
No. Files are read with the browser File API and compressed in-tab with fflate.zipSync. Open DevTools → Network during a run — there are zero outbound requests for your file data.
What output format do I get?
Always a single ZIP named compressed.zip. This tool does not write 7z, RAR, or tar.gz. Convert afterwards with /archive-tools/zip-to-tar-gz if you need a different container.
What options can I change?
Exactly one: the Compression level slider (0–9, default 6). There are no presets, no format picker, and no password field on this tool.
Why is level 6 the default and not 9?
Level 6 reaches roughly 95% of level 9's ratio in a fraction of the time. The extra effort at 7–9 only pays off on highly compressible text; for everyday files the gain is a rounding error.
What's the maximum file size?
Free: 50 MB. Pro: 500 MB. Pro-media: 2 GB. Developer: 2 GB. The drop zone shows your active cap as "max ... per file".
Is there also a limit on the number of files?
Yes. The per-archive entry cap is 500 on Free, 50,000 on Pro, and 500,000 on Pro-media and Developer. A folder of many tiny files can hit this before the byte limit.
Can I add a password?
Not on this tool — the output is unencrypted. Use /archive-tools/encrypted-zip-creator for AES-256 password protection.
Does it preserve my folder structure?
Yes. Each file keeps its relative path, so a dropped folder rebuilds as folder/sub/file inside the ZIP and extracts to the same tree.
Why did my file barely shrink?
It is probably already compressed — JPEG, MP4, MP3, and existing ZIPs are entropy-dense and resist DEFLATE. Set the level to 0 to package them instantly instead of burning CPU.
Will the ZIP open everywhere?
Yes. It is a standard ZIP with UTF-8 filenames and a ZIP 2.0 central directory — readable by Windows Explorer, macOS Archive Utility, 7-Zip, Keka, and unzip.
Can I make the output reproducible?
Run the compressor, then /archive-tools/timestamp-normalizer with a fixed date (1980-01-01 is the ZIP epoch). That removes the lastModified-driven byte differences between machines.
Which browsers work?
Any browser with WebAssembly and modern File APIs — Chrome, Edge, Firefox, Safari, Brave, Opera. Mobile works too, though very large jobs may exceed device memory.
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.