Compress your image — without uploading it.
Passport photos, ID copies, screenshots — never leave your phone. JPG · PNG · HEIC · WebP. Type your exact KB target.
Your file stays on your device. Compressed locally via WebAssembly.
Verify it yourselfDrop your image here
JPG · PNG · WebP · HEIC · max 25MB
What exactly happens to your file?
Click to see the full data path. No surprises.
What exactly happens to your file?
Click to see the full data path. No surprises.
- 1
You drop the file
Browser reads the file from your local disk into a `File` / `Blob` JavaScript object. This is the standard browser File API — same as any web upload form, except we stop there.
No upload here.
Other tools insert an upload step at this point. We don't — there is no server endpoint in our codebase that receives file content.
- 2
Browser compresses it
WebAssembly modules + Canvas APIs run on your device. For PDFs we use pdfjs-dist + pdf-lib (both ~3MB lazy-loaded once). For images we use the browser's built-in JPEG/PNG/WebP encoders + a libheif fallback for older HEIC support. All execution happens in your browser process.
- 3
You download the result
The compressed blob lives in browser memory. When you click Download, the browser triggers a local file save. No HTTP request goes out — the only network calls during a compression are loading the engine (cached on first use).
Verify any of this for yourself: open DevTools (⌘ ⌥ I on Mac · Ctrl Shift I on Windows / Linux), open the Network tab, then run a compression. You'll see the engine load on first use, then nothing during the actual compression. We have a full live demo at /privacy/verify.
You just compressed without uploading.
Here's what you didn't do — and why it matters.
iLovePDF, TinyPNG, Squoosh uploaded your image
Their server received your photo, processed it, and (depending on which tool) held it temporarily. Your face, ID, or screenshot transited the public internet.
FormReady processed your image locally
A Web Worker on your device compressed it via the browser's built-in encoders. Your image never touched any FormReady server — and EXIF metadata (location, camera, timestamps) was naturally stripped during re-encoding.
Our promise — verifiable
Four architectural commitments. Every one provable.
No upload endpoint
Our codebase contains zero server routes that receive file content. Architectural, not policy.
Audit the routesOpen-source compression engine
Fork it, audit it, run it offline. We open-source the compression logic under MIT.
View on GitHubNo file fingerprinting
We don't log file names, hashes, sizes, or any derived metadata. We log nothing about your file.
Read the privacy policySelf-verifiable
Every claim above is checkable by you in 30 seconds, in any modern browser, with the built-in DevTools.
Run the live demoCommon use cases
What people compress with this tool
Real scenarios with their typical KB targets. Click a guide if it matches what you're doing.
Naukri profile photo
Job board photo upload
100 KB
LinkedIn profile photo
Square crop · public profile
200 KB
Aadhaar photo update
UIDAI self-service portal
50 KB
Open guidePassport application
Passport Seva Kendra upload
240 KB
WhatsApp display picture
Business profile, status images
200 KB
Resume photo
Word, Google Docs, PDF resumes
100 KB
FAQ
You really can't see my image?
Correct. Image processing runs in a Web Worker on your device — JPEG/PNG/WebP encoders are built into your browser, and our HEIC fallback decoder loads as WASM only when needed. There is no server endpoint that receives your image. Open DevTools → Network during a compression to verify zero outbound requests.
Will my photo's EXIF metadata leak?
No. The compression engine reads your image into a canvas and re-encodes from pixels — EXIF (GPS, camera model, etc.) is naturally stripped during this process. So even if your phone embedded location in the original photo, the compressed output won't carry it. This is a side benefit of how the engine works, not a separate feature.
My iPhone photo is HEIC. Will this work?
Yes — modern browsers can decode HEIC natively. We auto-convert HEIC to JPG (or WebP) during compression so it's upload-ready. On older browsers (Brave / Firefox / Chrome on older Android), our libheif-wasm fallback decodes locally — still no upload.
Will my photo lose quality?
It will lose some quality — that's how compression works. We protect against unacceptable loss by stopping quality reduction at 50% (below that JPEG artifacts get visible). For tight targets, we offer to reduce dimensions instead, which preserves perceived quality much better than aggressive quality drops.
Should I pick JPG, PNG, or WebP?
JPG: most universally accepted (every form portal). WebP: 25-35% smaller at same quality (great for tight targets). PNG: lossless, best for screenshots and line art (much larger files). Default is "Same as input" — we keep your original format unless you choose otherwise.
What's the maximum file size?
Up to 25MB input. RAW formats (CR2, NEF, ARW) are not supported — convert to JPG/PNG first.