How to tar.gz to zip converter online for free
- Step 1Open the converter — Go to /archive-tools/tar-gz-to-zip. No account is needed for the free tier.
- Step 2Drop your TAR.GZ — Drag a single
.tar.gzor.tgzfile onto the dropzone, or click to pick it. The tool takes one archive at a time — it reads a TAR.GZ and writes a ZIP. - Step 3Confirm it fits your tier — On free tier inputs over 50 MB are rejected before any work starts with a clear per-job limit message. Pro raises this to 500 MB, Pro+Media and Developer to 2 GB.
- Step 4Click Process — fflate gunzips the GZIP layer, parses the TAR entries, and re-zips the regular files at DEFLATE level 6. There are no options to set — the tool runs a fixed, predictable pipeline.
- Step 5Read the result metrics — The result panel shows the source/target labels, the entry count packed into the ZIP, and the output size versus the input.
- Step 6Download the ZIP — Click Download. The file is named after your input with
.tar/.tgzstripped and.zipappended (for examplerelease-1.2.0.tar.gz→release-1.2.0.zip).
What the converter does at each stage
The exact fflate pipeline behind TAR.GZ → ZIP — there are no user-facing options.
| Stage | Engine / call | Behaviour |
|---|---|---|
| Detect format | magic-byte sniff | Confirms GZIP (1F 8B) wrapper, then TAR after gunzip |
| Decompress | fflate gunzipSync | Inflates the outer GZIP layer to the raw TAR bytes in memory |
| Parse TAR | parseTar (512-byte blocks) | Reads each header; keeps regular-file entries (typeflag 0) |
| Re-pack | fflate zipSync, level 6 | Writes every regular file into a fresh DEFLATE ZIP |
| Name output | stem + .zip | Strips .tar / .tgz from the input name, appends .zip |
Tier limits for the archive family
Real per-job ceilings from lib/tier-limits.ts. The input file is size-checked before processing.
| Tier | Max input size | Entry ceiling | 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 |
| Enterprise | unlimited | unlimited | unlimited |
What survives the TAR → ZIP crossing
ZIP cannot express several TAR-only constructs, so the converter drops them.
| TAR construct | In output ZIP? | Why |
|---|---|---|
| Regular file (typeflag 0) | Yes — content identical | ZIP's core entry type |
| Directory header (typeflag 5) | Not as an explicit entry | Folder paths are implied by file paths |
| Symlink (typeflag 2) | No | ZIP has no portable symlink type; entry is skipped |
| Hardlink (typeflag 1) | No | ZIP has no hardlink concept; entry is skipped |
| Unix mode / owner bits | Not forwarded | Re-zip writes a plain entry with no mode bits |
Cookbook
Concrete runs covering the common shapes of TAR.GZ you will actually drop into this tool — a release tarball, a .tgz, a logs roll-up, and an archive that hides symlinks.
A source release tarball
The classic GitHub-style release. Every regular file is carried; the wrapping folder path is preserved because it is part of each file's path.
Input: myapp-1.4.0.tar.gz (TAR.GZ, 412 entries) Process → Output: myapp-1.4.0.zip myapp-1.4.0/README.md myapp-1.4.0/src/index.ts myapp-1.4.0/package.json ... 409 more regular files Entries packed: 412 Source: TAR.GZ Target: ZIP
A .tgz alias
.tgz is just .tar.gz with a short extension. It is detected the same way and the output name swaps the extension cleanly.
Input: build-artifacts.tgz Process → Output: build-artifacts.zip Note: .tgz / .tar.gz are equivalent — same GZIP+TAR pipeline.
A rotated logs roll-up
Text compresses well, so the ZIP can come out close in size to the TAR.GZ. The content is identical line-for-line.
Input: nginx-logs-2026-06.tar.gz (28 MB, 30 .log files) Process → Output: nginx-logs-2026-06.zip (~29 MB) Why similar size: both formats DEFLATE/GZIP the same text payload.
An archive containing symlinks
TARs from Unix often include symlinks (e.g. a latest → versioned target). Those entries are skipped — only real files land in the ZIP.
Input: release.tar.gz bin/app (regular file) -> kept bin/app-latest (symlink -> app) -> skipped Output: release.zip bin/app The symlink does not appear; re-create it after extraction if needed.
Over the free size cap
The size check runs before any decompression, so a too-big file fails instantly without burning CPU.
Input: dataset.tar.gz (640 MB) on Free tier
Result: File "dataset.tar.gz" exceeds the free tier per-job limit
(50 MB). Upgrade for larger files.
Fix: upgrade to Pro (500 MB) / Pro+Media (2 GB) or split upstream.Edge cases and what actually happens
Symlinks in the TAR
SkippedTAR symlink entries (typeflag 2) are not written to the ZIP — ZIP has no portable symlink type. Re-create the link after extraction, or keep the TAR.GZ where symlinks matter.
Hardlinks in the TAR
SkippedHardlink entries (typeflag 1) are also dropped. ZIP cannot represent a hardlink, and the converter does not duplicate the target's bytes — the link simply does not appear in the output.
Explicit directory entries
By designStandalone directory headers (typeflag 5) are not emitted as ZIP entries. Folders still appear when extracting because each file path carries its full directory prefix.
Unix permissions and ownership
Not preservedMode bits, uid/gid and owner names from the TAR header are not forwarded — the re-zip writes plain entries. If you need executable bits, convert back with /archive-tools/zip-to-tar-gz and set them downstream.
Paths longer than 100 bytes
May truncateThe parser reads the standard 100-byte TAR name field and does not interpret GNU longname or PAX extension records, so very long paths can be truncated or appear as odd entries. Most release tarballs stay well under this.
Input is a single .gz, not .tar.gz
Use siblingA plain .gz (one compressed file, no TAR inside) is the wrong shape for this tool. Use /archive-tools/gzip-to-zip, which reads the GZIP inner filename and wraps one file.
Input over the tier size cap
RejectedInputs above your tier ceiling (50 MB free / 500 MB pro / 2 GB pro-media and developer) are blocked before processing with a per-job limit message naming the file and the cap.
Corrupt or truncated GZIP
ErrorIf the GZIP layer cannot inflate (truncated download, bit rot), fflate throws and processing stops. Verify the input with /archive-tools/auto-format-detector, then re-download the tarball.
Empty archive
ExpectedA valid TAR.GZ with no regular files produces a valid but empty ZIP (entry count 0). Nothing fails — there is simply nothing to pack.
Frequently asked questions
Does this upload my TAR.GZ?
No. The whole pipeline — gunzip, TAR parse, re-zip — runs in WebAssembly/JS inside your browser tab via fflate. Open DevTools → Network during a run and you will see no outbound request carrying your file.
What's the maximum file size?
Free: 50 MB. Pro: 500 MB. Pro+Media: 2 GB. Developer: 2 GB. Enterprise: unlimited. The limit is checked on the input file before any decompression begins.
Are there any settings to configure?
No. TAR.GZ → ZIP has no options — it always gunzips, unpacks regular files, and re-zips at DEFLATE level 6. The output is deterministic for a given input's content.
Is the file content changed?
No — every regular file's bytes are identical after conversion. Only the container format changes from TAR.GZ to ZIP, and the compression algorithm switches from GZIP to DEFLATE.
Does it handle .tgz files?
Yes. .tgz is the short spelling of .tar.gz and goes through the exact same GZIP-then-TAR pipeline. The output extension is swapped to .zip.
What happens to symlinks and hardlinks?
They are skipped. ZIP cannot portably represent either, so the converter drops those TAR entries rather than inventing placeholders. Only regular files are packed.
Are Unix file permissions preserved?
No. The re-zip writes plain ZIP entries with no Unix mode bits, so executable flags and ownership are lost. If permissions matter, keep the TAR.GZ or set them after extraction.
Why is the ZIP a similar size to the TAR.GZ?
Both formats compress the same payload — GZIP for TAR.GZ, DEFLATE for ZIP — and they are essentially the same algorithm. Text and source shrink a lot; already-compressed media (JPEG, MP4) barely changes either way.
Which browsers work?
Any modern browser with WebAssembly support — Chrome, Edge, Firefox, Safari, Brave, Opera, and their mobile versions. Very large archives can hit device memory limits on phones.
What if my file is actually a single .gz, not a tarball?
Use /archive-tools/gzip-to-zip for a single-file GZIP (like app.log.gz). This tool expects a TAR inside the GZIP; a one-file GZIP belongs in the GZIP → ZIP wrapper.
Can I go the other direction, ZIP to TAR.GZ?
Yes — use /archive-tools/zip-to-tar-gz. For arbitrary ZIP ↔ TAR.GZ ↔ GZIP routing with a target dropdown, use /archive-tools/archive-format-converter.
Is there an API or CLI?
Programmatic access is on the roadmap (Phase 15). Today the tool is a standalone page; Pro and above can also run archive jobs through the local headless-browser runner. The direct CLI equivalent is tar -xzf in.tar.gz && zip -r out.zip <files>.
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.