privacy · architecture

Nothing leaves your browser: how Edit My PDF is built

pdf.js in a web worker, pdf-lib for writing, IndexedDB for storage and no server at all. What that architecture buys, what it costs, and how to verify it.

"Your files are safe with us" is a sentence a PDF service has to say because it has your files. Edit My PDF does not have them. This post explains the architecture that makes that true, what it costs, and how you can check it yourself.

There is no server

Edit My PDF is a single-page application built with React and Vite. When you open it, your browser downloads the app's JavaScript, stylesheets, fonts and icons, and from then on everything happens in the tab:

Reading
pdf.js parses the PDF and renders pages to canvases inside a web worker bundled with the app.
Editing
Edits are a list of changes kept in memory next to the file: a text patch, a pencil stroke, a shape.
Saving
The file's bytes and the edit list are written to IndexedDB in your browser, so the document's link keeps working after a refresh.
Downloading
pdf-lib builds the new PDF in the tab; the browser saves it from a temporary blob URL.

There is no upload endpoint because there is no backend. The repository has no server code at all. The only fetch call in the application loads the emoji images from the app's own files when an emoji is exported.

What the app does ask the network for

Honesty requires the whole list. The app requests its own static files from wherever it is hosted. The host sees what any web server sees for those requests: your IP address, your browser's user agent and the page address. It never receives your document, your edits or your file's name, because the app does not send them. There is no analytics script, no error reporting service, no account system and no third-party embed on the editor pages.

What this architecture buys

  • No limits that exist to sell an upgrade. There is no file counter, no size cap and no watermark. The only limit is your browser's memory.
  • No waiting on an upload. A 50-megabyte scan opens as fast as your disk can read it.
  • Documents that stay where you put them. Each PDF you open gets its own link in this browser. You can keep several open in tabs, and a refresh restores each one with its edits.

What it costs

  • No OCR and no conversion. Recognising text in a scan, or turning a PDF into a Word file, needs large models or engines that are better run on a server. Edit My PDF does not pretend to do them; the comparisons say which tools do.
  • One browser, one machine. Your documents are not synced anywhere. Open the same link on another computer and it will not know the document.
  • Memory. Everything is in RAM. A very large file is limited by what the browser will hold.

How to check for yourself

Open your browser's developer tools, choose the Network tab, then open a PDF in Edit My PDF, edit a line and download the result. You will see requests for the app's own files and nothing else. No request carries your PDF.

If you read code, the editor's source is public. The reader is src/pdf.ts; the writer is src/exportPdf.ts; storage is src/session.ts. Search the src directory for fetch and you will find the emoji loader and nothing more.

Things we cannot promise

The browser is yours, and so is everything in it. A browser extension can read the pages you have open. Your downloads folder is as safe as your computer. And the host that serves the app can see that you loaded it. Those are the limits of what a client-side application can promise, and we would rather state them than pretend they do not exist.