How it works
How it works
Compress runs entirely in your browser. There's no upload, no server, and no account. Your images stay on your device.
The simple version
When you drop an image into Compress, your browser opens it directly. It never travels across the internet, and nothing is sent to our servers.
We then re-save the image using a tighter recipe — the kind of careful repacking that makes a file much smaller without making it look obviously worse. You pick the quality and the output format, and your browser does the rest. When it's done, you download the smaller file straight from your own device.
Under the hood
Compression runs on a set of open-source codecs ported from the Squoosh project to WebAssembly. They ship in the jSquash family of packages:
@jsquash/jpegWraps MozJPEG, Mozilla's tuned JPEG encoder. Lossy. The quality slider maps directly to MozJPEG's 1–100 scale; 75 is a good default for photographs.
@jsquash/pngWraps oxipng, a Rust-based lossless optimizer. PNG output is rewritten with the smallest matching deflate stream. The quality slider does not apply here — PNG is always lossless.
@jsquash/webpWraps Google's libwebp encoder. Lossy. Produces files around 25% smaller than equivalent-quality JPEG for most photos.
@jsquash/avifWraps libavif from the Alliance for Open Media. AV1 still encoder, producing the smallest files of the four formats. Slowest to encode — marked 'experimental' in the UI for that reason.
Each codec is a WebAssembly module — compiled code running at near-native speed inside your browser. We load all four inside a dedicated Web Worker, so the encoding work happens off the main thread. That's why the page stays responsive when you compress a batch of large photos.
Nothing leaves the worker except the compressed bytes, which are wrapped into a Blob and offered to you as a download. No network request carries your image data at any point in this flow.
Open source
Compress is open source. The worker, the codec adapter, the dictionary of 16 languages, and the privacy-first UI all live in one repository:
View on GitHub