All case studies
2026
PDF Editor - Client-Side Document Editor
Browser PDF editor that annotates, reorders and exports documents without a server. Files never leave the device, which removes the privacy question entirely rather than answering it.
- Client-side, no upload
- 100%
- Undo steps
- 50
- Backend services
- 0

Stack
- React
- Vite
- JavaScript
- PDF.js
- pdf-lib
- CSS
Problem
Most online PDF tools require uploading the document to a stranger’s server. For anything sensitive that is a non-starter, so this does the work in the browser.
Architecture
PDF.js renders pages to canvas, a transparent overlay holds absolutely positioned annotations in React state, and pdf-lib embeds them into the original bytes on export.
What it does
- Annotation tools for text, highlights, rectangles and erasing, with per-page isolation
- Page management: delete single pages or a range, with a thumbnail sidebar
- Zoom from 30% to 250%, fit-to-width and 90-degree rotation
- Undo and redo across 50 steps with keyboard shortcuts
- Export embeds annotations into the PDF itself and drops deleted pages
Challenges & learnings
- PDF.js web workers detach the ArrayBuffer they are given, so the original bytes must be cloned and kept aside or export has nothing to write into.
- Undo history is capped at 50 entries per page: unbounded history is a memory leak with a friendly name.