You do not have to take my word for it

—Your files never leave your device— is a testable claim. This page explains what the browser is doing, what the service worker caches, and how to watch the network traffic yourself in about thirty seconds.

No upload endpoint Local JavaScript + WebAssembly Output via Blob download

The three steps, without hand-waving

  1. Read.

    You pick a file. The browser gives the page a File object — a handle to bytes on your disk. The tool reads those bytes into memory with arrayBuffer() or streams them. No network request is involved.

  2. Transform.

    JavaScript or a WebAssembly engine does the work. pdf-lib builds a new PDF, pdf.js renders pages, ffmpeg.wasm encodes video, tesseract.js recognises text. The original bytes are treated as input; the original file on disk is never written to.

  3. Save.

    The result is wrapped in a Blob, given a temporary blob: URL, and offered as a download. Your browser writes a new file wherever downloads go. The temporary URL is revoked when the page is done with it.

There is no fourth step where the file is —sent for processing—. That step does not exist in the code, which is why the site can work with the network cable unplugged.

The 30-second proof

This works in Chrome, Edge, Firefox and Safari, with slightly different menu names.

  1. Open the tool you want to test.

    For example, Merge PDF or Compress Image. Let the page finish loading first.

  2. Open DevTools and select the Network tab.

    Press F12, or right-click — Inspect — Network. Click the clear button (the circle with a slash) so the list starts empty. Leave —Preserve log— off.

  3. Process a file.

    Drop a test file, press the button, let the result download. Watch the Network list.

  4. Look at what appears.

    You will see the page—s own assets if they were not already cached — HTML, CSS, JavaScript, fonts, maybe a WebAssembly engine the first time. What you will not see is a request whose body is your file. The request list may be empty after the tool is loaded; that is the normal result.

If you want a stronger test, disconnect from the internet after the tool has loaded and process the file again. A tool that needed a server would fail. A local tool keeps working. This is also how the offline mode is tested.

One caveat, stated honestly: a browser extension with permission to read page data can see what the page sees. That is true of every website and every local app. Use extensions you trust, or test in a private window with extensions disabled. PocketPDF itself loads no extensions and no third-party scripts.

What is actually running

JobEngineWhere it runs
Read and build PDFspdf-lib, pdf.jsJavaScript in the tab (with a worker for rendering)
PDF encryption / decryption@pdfsmaller/pdf-encrypt, pdf-decryptJavaScript in the tab
Video and audioffmpeg.wasmWebAssembly worker
OCRtesseract.jsWebAssembly worker, language data cached locally
ImagesCanvas, heic2any, UTIF, piexifjsJavaScript and the browser—s image decoder
Archives and spreadsheetsJSZip, fflate, SheetJSJavaScript in the tab

All of these files are served from this domain, with one disclosed exception: the ffmpeg core used by video and audio tools is larger than Cloudflare Pages allows, so the pages.dev build fetches that single file from the project's own GitHub Pages mirror. There is no runtime CDN call, no remote font, and no third-party script that could observe the page. The about page lists the licences and credits.

What the service worker caches

On the first visit, the site registers a service worker. It stores a small app shell — the home page, category pages, CSS, JavaScript, fonts and the offline page — and then caches pages and engines as you use them. That is what makes a second visit work without a connection.

A tool you have never opened may not work offline, because its engine was never downloaded. The offline page explains what to do when that happens. Clearing site data removes the cache; a private window generally starts with an empty one.

What does leave your device

Honesty is more useful than an absolute slogan, so here is the complete list:

That is the whole list. There is no analytics beacon, no error-reporting service, no ad auction, no —anonymous usage statistics— and no file telemetry.

Why local processing has limits

The same architecture that makes the privacy claim true also explains the rough edges:

For a 4 GB video or a 5,000-page archive, a desktop application is the right tool. For the everyday documents this site was built for, the browser is enough — and the file never leaves the room.

Keep reading

The security page covers encryption, threat models and responsible disclosure. The privacy policy lists the exact local-storage keys and hosting-log caveat. The guide How browser-based file tools actually work goes deeper into the File API and WebAssembly.

Feedback

Send a message

Messages, reviews and bug reports go to a private feedback log on this site. Nothing is published, and your files are never uploaded.

For a broken tool: the tool name, browser, and the steps that led to it are the most useful things. Do not paste passwords, keys or a sensitive file.

Files are never uploaded. Only this message is stored.

PDF

Tool preview

A short description of the tool.

Runs entirely in your browser. The file never leaves this device.

Open tool