Most image compressors ask you to upload first. That means your photos hit someone else's server for a job your laptop can do in milliseconds.
Minikyu flips that: drop images in the browser, compress with the Canvas API, download the result. Files never leave the device.
Constraints that shaped the product
- No signup — friction kills utility tools
- No upload — privacy is the feature
- Batch by default — one-at-a-time compressors feel broken
- Real formats — JPEG, PNG, WebP, AVIF where the browser allows
The core idea
The browser already knows how to decode and re-encode images. We lean on that:
// Pseudocode — draw → export at quality
const bitmap = await createImageBitmap(file);
ctx.drawImage(bitmap, 0, 0, width, height);
const blob = await canvas.convertToBlob({ type, quality });
Everything after that is product work: before/after preview, sensible defaults, and UI that doesn't get in the way.
What I learned
- Privacy is a marketing line until it's architecture. Client-only forces honest limits (and better UX).
- Utility products win on speed-to-value. First compression under a few seconds beats a feature matrix.
- Open source helps trust. People can verify nothing is being sent.
If you care about shipping small tools that feel inevitable, build the constraint into the stack — not the landing page copy.