# Nothing leaves your browser: how Edit My PDF is built — Edit My PDF

> 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.

Canonical: https://editmypdf.dev/blog/nothing-leaves-your-browser/
Published: 2026-09-30

30 September 2026 · 3 min read

"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](https://editmypdf.dev/compare/) 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.

[28 October 2026 · 4 min read

### Exporting edits as real text, in the page's own font

How Edit My PDF removes the original strings from a page's content stream, embeds a subset of the font pdf.js decoded, and writes your edit as positioned text rather than a picture.

 [export] [fonts] [pdf-lib]Read](https://editmypdf.dev/blog/exporting-real-text/)[21 October 2026 · 3 min read

### What the editor leaves alone

Covered text, tables, Type 3 fonts, form XObjects, phantom spaces and the lines you did not touch: the deliberate limits of editing a PDF in place.

 [limits] [design]Read](https://editmypdf.dev/blog/what-the-editor-leaves-alone/)[14 October 2026 · 4 min read

### Editing a paragraph that mixes bold, italic and regular as one block

A textarea holds one font. A paragraph with a bold lead-in needs a contentEditable editor that owns its DOM, maps every edit into styled spans and keeps the page's line layout.

 [editor] [fonts]Read](https://editmypdf.dev/blog/mixed-face-paragraphs/)

[Try it on a PDF](https://editmypdf.dev/app/) [All posts](https://editmypdf.dev/blog/)

---

Markdown version of https://editmypdf.dev/blog/nothing-leaves-your-browser/. Every page of Edit My PDF has one at the same address with .md appended; the index is https://editmypdf.dev/llms.txt.
