A few months ago I needed to merge two bank statements and password-protect the result. Every "free online PDF tool" I found wanted me to upload those files to their servers first. For a document full of account numbers, that felt completely wrong — I have no idea what happens to a file after it's uploaded, how long it's kept, or who can see it.
So I built the thing I actually wanted: PDF WithMe, a set of PDF tools where your files never leave your device. Everything runs in your browser — no upload, no server, no account. Here's how it works and what I learned.
The core idea: no backend at all
The design flips the usual model. Instead of "send your file to my server, I process it, I send it back," the browser does 100% of the work. Your PDF is read, edited, and saved entirely on your own machine. Nothing is transmitted anywhere — and that single decision (no backend) shaped everything else in a good way.
The stack
Modern browsers are far more capable than people give them credit for. Almost everything I needed already existed as a JavaScript or WebAssembly library:
- pdf-lib handles the structural work — merging, splitting, rotating, reordering and removing pages, page numbers, watermarks and signatures.
- pdf.js (Mozilla's PDF engine) renders pages, which powers PDF-to-image conversion.
- qpdf compiled to WebAssembly does real AES-256 encryption and decryption — that's what lets you password-protect a PDF, or remove a password from one you own, right on your device.
- Tesseract.js (also WebAssembly) runs OCR to pull text out of scanned documents.
- JSZip bundles multiple outputs (like split pages) into one download.
WebAssembly is the quiet hero. qpdf and Tesseract are mature C/C++ projects; compiling them to WASM means desktop-grade capabilities in a browser tab, with zero install and zero server.
A nice side effect: it works offline
Because there's no server to call, the app doesn't actually need the internet after it loads. A service worker precaches the app and its libraries, so it's a PWA — turn off your Wi-Fi, merge a PDF, and it just… works.
The trade-offs (it's not all free)
- Memory is the limit. A server can stream a huge file; a browser tab holds it in RAM, so very large PDFs are constrained by the device.
- Bundle size. WASM binaries aren't tiny, so I lazy-load each tool's dependencies only when you open that tool.
- Some problems are genuinely hard client-side. PDF-to-Word is the best example — reconstructing editable layout is messy, so I ship two modes: a best-effort "editable" rebuild, and an "exact look" fallback that drops each page into Word as an image.
Why it was worth it
Beyond privacy — which is why I started — no backend has lovely properties: nothing to run so it costs almost nothing to keep online, no database of user files to breach or subpoena, and "your files never leave your device" isn't a slogan I have to defend, it's just how the architecture works. You can verify it by watching your network tab.
If you want to try it, it's free with no sign-up: pdfwithme.com. It's early, so I'd genuinely love feedback — on the tools, the client-side approach, or what to build next.
Thanks for reading!


Top comments (0)