Back to all posts

Squeeze — a privacy-first file compressor in the browser

Compress PNG, JPG, PDF, DOCX, XLSX and ZIP — entirely client-side, nothing uploaded.

Squeeze — a privacy-first file compressor in the browser
Tech stack
Next.js 15TypeScriptTailwind v4OffscreenCanvaspdf-libjszipZustand

A universal file compressor that runs 100% in the browser. Files never leave the device — there is no server. It handles images, PDFs, Office documents and ZIP archives using Web APIs, shipped as a static Next.js 15 export.

The problem

Most online compressors upload your files to a server you don't control — a privacy risk for anything sensitive. I wanted a tool that compresses files without a single byte leaving the browser.

How I built it

Everything runs on Web APIs: Canvas / OffscreenCanvas for images, pdf-lib for PDFs, jszip for archives, and browser-image-compression for tuning. State is managed with Zustand. It's a Next.js 15 static export with COOP/COEP headers enabled so heavy work can run off the main thread.

What I learned

You can do a surprising amount of real work in the browser with no backend at all. The hard parts were memory management for large files and getting cross-origin isolation (COOP/COEP) right so OffscreenCanvas and workers behave.