tools / repair

ZIP junk cleaner

Everything in the ZIP ships inside the APK — and anyone can unzip an APK. This removes the files that should never have been in there: operating-system litter, development folders, source maps and, most importantly, any .env or key file that slipped in.

Clean a ZIP

Choose the categories to remove. The list of matched files updates before anything is rebuilt, so you can see exactly what goes.

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

An APK is a ZIP anyone can open

Rename any .apk to .zip and double-click it: your site is sitting in assets/web/, file for file. That is not a flaw of ZIP-based apps — every Android app's resources are readable this way — but it changes what "harmless leftovers" means. A .git folder in an APK is your full commit history, including every file you ever deleted. A .env is whatever API keys were in it. A source map is your original, unminified source code with comments.

The other reason is size. node_modules alone can be hundreds of megabytes; a macOS-made ZIP carries a __MACOSX shadow copy of the resource forks of every file. None of it runs; all of it counts against the upload limit.

What each rule removes

RuleDefaultWhy
OS litterOnCreated by Finder and Explorer, never referenced by a page.
Secrets & keysOnPrivate keys, keystores and environment files must never ship. If one did, treat the secret as leaked and rotate it.
Version controlOnThe full history of the project, including deleted files.
DependenciesOnA built site has already bundled what it needs from these folders.
Source mapsOnDebugger data mapping minified code back to source. Useful on your machine, a liability in an APK.
Editor & toolingOnSettings for VS Code, JetBrains, GitHub Actions, linters and formatters.
Project manifestsOffHarmless but useless at runtime. Off by default because a hand-written site might fetch a .json file with one of these names.
Design & source filesOffPhotoshop, Figma, TypeScript and Sass sources. Off by default so a site that serves .ts files as data is not broken.
Repository docsOffREADMEs and changelogs. Licence files are always kept — many open-source licences require them to travel with the code.

Keeping the ZIP clean at the source

On macOS, zip -r site.zip . -x "*.DS_Store" -x "__MACOSX/*" -x "*.map" from inside the site folder produces a clean archive directly. On Windows, the built-in "Compressed (zipped) folder" does not add litter of its own, but it happily includes Thumbs.db and anything hidden. The most reliable habit is to zip the build output folder only, never the project root.

Frequently asked questions

Is it safe to delete source maps?

Yes. Browsers only request a .map file when DevTools is open; the app never loads them. Keep them in your project for debugging, just not in the ZIP.

I found a .env file in my ZIP. What now?

Remove it, and assume anything in it is public: rotate the API keys, database passwords or tokens it contained. A key that has shipped in an APK — or been uploaded anywhere — cannot be un-shipped.

Why are licence files kept?

Many open-source licences (MIT, BSD, Apache) require the licence text to accompany copies of the code. Shipping it inside the app is the easiest way to comply, and it costs a few kilobytes.

Does cleaning change any of my site's files?

No. Files are either removed or copied byte for byte. The new ZIP is recompressed at maximum DEFLATE level, which can make it slightly smaller even when nothing is removed.

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