Charan.
All posts
2 min read

Building Minikyu: image compression without the upload

  • minikyu
  • privacy
  • canvas
  • nextjs

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

  1. No signup — friction kills utility tools
  2. No upload — privacy is the feature
  3. Batch by default — one-at-a-time compressors feel broken
  4. 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.