tools / inspect

ZIP size treemap

A ZIP that is over the limit is almost never evenly over it — one video, a folder of 4000-pixel photos or a forgotten source map does most of the damage. This draws the whole archive as a map so the culprit is the biggest rectangle on screen.

Map a ZIP

Sizes are the uncompressed bytes inside the archive — what ends up in the app — plus the ZIP's own size, which is what the upload limit is checked against.

Drop your site ZIP here, or click to choose .zip · opened in this tab, never uploaded

Why the ZIP size matters more than it looks

The number the builder checks is the zipped size of your site — it re-packs the ZIP without macOS litter and measures the result, which lands within a few percent of your file: 5 MB on the free plan, 18 MB on Pro. But the number your users feel is the unpacked size, because that is what is copied into the APK and read from storage every time the app starts. A ZIP of well-compressed text can be a fifth of its unpacked size; a ZIP of photos and video is barely smaller than the files themselves, because JPEG, MP4 and WebP are already compressed and DEFLATE has nothing left to squeeze.

That is why the tool reports both — and why the "saved by zip" figure is a quick diagnosis on its own. A ratio above 60% means the archive is mostly code and markup; a ratio under 10% means it is mostly media, and media is where the savings are.

How to read the treemap

Each rectangle is one file, and its area is proportional to its size. Colour is the file type: lime for images, violet for JavaScript, blue for CSS, green for HTML, amber for fonts, red for video. The 80 largest files are drawn individually; everything smaller is merged into a single grey "smaller files" block so a site with 3,000 tiny icons still produces a readable picture.

Hover any rectangle to see its full path. The table underneath lists the fifteen largest files with a concrete suggestion for each where one applies — a source map to delete, a WAV to convert, a bitmap that should be WebP.

The usual suspects, in order of how often they turn up

  1. Photos exported at camera resolution. A 4032-pixel JPEG displayed at 400 CSS pixels is carrying about 25 times the pixels it uses. The ZIP image compressor resizes and converts them in one pass.
  2. Background video. Hero videos routinely weigh 10–40 MB. Re-encode at 720p and a lower bitrate, or load it from a URL so it is only fetched when there is a connection.
  3. Source maps and build leftovers. .map files are often as large as the scripts they describe. They are for your debugger, not your users; the junk cleaner strips them along with __MACOSX, .git and node_modules.
  4. Fonts in desktop formats. TTF and OTF are 30–60% larger than WOFF2 of the same face, and many sites ship all four formats "for compatibility" — the WebView only ever needs WOFF2.
  5. Development builds. An unminified React or Vue bundle can be 3–5 times the production build. If a script is several megabytes, confirm you zipped the output of npm run build, not the dev server's files.

Is anything uploaded?

No. The ZIP is opened with JSZip inside this tab; the file never leaves your computer and the page keeps working with the network switched off once it has loaded.

Frequently asked questions

Is the 5 MB limit measured on the ZIP or on the unpacked files?

On the zipped site. The builder re-packs your ZIP (leaving out __MACOSX files) and measures that, which is within a few percent of your archive's size. The unpacked size is still worth watching because it is what gets copied into the APK.

Why is my ZIP barely smaller than the folder?

Because most of it is already-compressed media — JPEG, PNG, WebP, MP4, MP3 and WOFF2 do not shrink further in a ZIP. Text files (HTML, CSS, JS, JSON) typically compress by 70–85%, so a low ratio means the weight is in images, audio or video.

Does the treemap handle very large archives?

Yes, within your browser's memory. Archives of a few hundred megabytes open fine on a desktop; only the file list is read, the contents are not decompressed.

What should I do if I am over the limit only because of one video?

Host the video on your site or a CDN and reference its https URL in the page. It then streams when the phone is online, and the app itself stays small. Everything else still works offline.

Read in the docs

Related tools

Unzip it on a phone today

Upload the ZIP, name the app, pick an icon — and download a signed APK a few minutes later. Free builds, no watermark, no Android Studio.

Convert a ZIP — free site.zip → app-release.apk