DEV Community

Cover image for How I Built 11 Free File Tools That Run Entirely in the Browser
Ahmad Faraz
Ahmad Faraz

Posted on

How I Built 11 Free File Tools That Run Entirely in the Browser

Every time I needed to edit a PDF or convert an image online, the same thing happened. Upload my file to some random server, create an account, hit a paywall after two tries, and wonder who's looking at my documents.

I got tired of it. So I built my own.

Meet ConvertKr

It's a set of 11 free browser-based tools for working with PDFs and images. The catch? There is no catch. No signups, no watermarks, no file limits.

But the part I care about most — your files never leave your device. Everything runs locally in your browser using JavaScript. My server never sees your documents. Not temporarily, not for processing, not at all.

The tools

  • PDF Editor — text, images, signatures, highlights, redactions
  • Merge PDF and Split PDF
  • PDF to Image and Image to PDF
  • Image Convert, Compress, Crop and Resize
  • Image Watermark
  • Background Remover
  • QR Code Generator

How is this possible without a server?

Modern browsers are way more powerful than most people give them credit for.

PDF.js handles PDF rendering — the same library Firefox uses internally. pdf-lib generates new PDFs with your edits baked in. The Canvas API handles all image operations — converting formats, compressing, cropping, watermarking. For background removal, an ML model runs directly in the browser.

No frameworks either. Just vanilla JavaScript. Each tool is a standalone page that loads fast and does one thing well.

The hardest part

The PDF editor was by far the most complex. You're essentially building a layer system on top of a rendered PDF page. Every annotation — text, image, signature, drawing — needs to be positioned in CSS pixels on screen, then converted back to PDF coordinate points when generating the final file. Getting that math wrong by even a few pixels means signatures end up in the wrong spot.

I also spent way too long debugging an ArrayBuffer detachment issue. When PDF.js reads your file, it detaches the buffer so pdf-lib can't use it anymore. The fix was simple once I found it — store the data as a Uint8Array immediately and pass copies to both libraries — but finding the cause was painful.

Why I'm sharing this

Two reasons. First, I genuinely think more developers should consider client-side processing for file tools. The browser can handle it, your users get real privacy, and you save on server costs. It's a win all around.

Second, I want feedback. I'm not a designer and I built this mostly alone. If something looks off, feels broken, or could be better — I want to know.

I'm also actively adding more tools. If there's something you wish existed that doesn't upload your files to the cloud, tell me. I might build it next.

Check it out at convertkr.com — would love to hear what you think.

Top comments (0)