← WORKSHEET 07 / 072025LIVE

Browser Tools

A PDF and image suite that runs entirely in your browser: edit, merge, split, sign. Nothing uploads, because there is no server to upload to.

Role
Solo, end-to-end
Engine
pdf-lib · PDF.js
Canvas
Fabric.js
Server
None, client-side
Timeline
Since 2025, ongoing

0

your file never leaves the tab

CONTEXT

Fifteen tools for working on PDFs and images. A full annotation editor with text, shapes, freehand, highlight, signatures and form filling, plus merge, split, compress, rotate, delete pages, PDF to image, image to PDF, resize, convert, SVG to PNG, and QR generation and reading.

No account, no queue, no upload. Open a page, drop a file, get it back.

THE HARD PART

Every free PDF tool online asks you to upload the document first. For a signed contract, a passport scan, a payslip or a medical report, the upload is the problem. You have handed a stranger the thing you were trying to edit.

Doing the work in the browser removes the question. There is no endpoint to trust, because the architecture has no endpoint in it.

WHAT I BUILT

  • pdf-lib for manipulation, PDF.js for rendering and text extraction, Fabric.js for the annotation canvas.
  • A full editor: text, shapes, freehand drawing, highlighting, signature capture and form filling.
  • Fifteen tools sharing a small set of composables: usePdfLib, usePdfRenderer, useFabricEditor, useSignature, useFileHandler.

REVISIONS · THE CALLS I MADE

A

No server, by construction

A privacy promise you have to take on trust is weaker than one you can check. With no upload endpoint in the architecture, the claim is verifiable in the network tab.

B

Composables organised by capability

Fifteen tools would otherwise each reimplement loading, rendering and download. Putting the behaviour in composables keeps the pages thin, so a new tool is mostly a UI and a call.

C

The PDF.js worker is served locally

Fetching the worker from a CDN would put a third party in the execution path of a document that is supposed to never leave the browser, which would quietly undo the premise.

OUTCOME

  • Zero bytes uploaded. Every operation runs client-side.
  • Fifteen tools live, sharing one set of composables.