Your files never leave your device.
Something you can check yourself in 30 seconds.
The short version
Your PDF opens and gets edited on your own computer, inside this browser tab. The file is never sent to us, so there is nothing for us to see, store, or lose.
You don't have to take that on trust. The site ships with a rule your browser itself enforces that blocks this page from sending data to any site but our own. And our own server has no endpoint that accepts a file. Even a bug on our side would have nowhere to send it.
The quickest check: open the editor, turn off your Wi-Fi, and keep working. Everything you have already loaded still runs, because your file never needed the internet. The technical proof, and ways to verify it from outside, are further down this page.
While you work, the bar at the bottom of the editor keeps a running count of how much has left your device. Click it for the details. The page produces that count itself, so treat it as a readout rather than proof; the browser-enforced policy is still the real safeguard.
Where your file goes
A quick map of what happens to a file you open here, and the one case where a request touches our server.
| What you do | Where your file goes |
|---|---|
| Edit, merge, split, sign, and the page tools | Stays in your browser. Nothing is uploaded. |
| Compress, OCR, and convert files | Stays in your browser. The engines run locally as WebAssembly. |
| Recent files and unsaved-work recovery in the editor | Kept in your browser on this device only, so you can reopen and recover work. Never uploaded. Clear it anytime. |
| Sign in, license, and contact form | A request goes to our server, but it never carries your file. |
| Future opt-in paid features that need a server | Would send your file to a server, clearly labeled first, and only if you choose them. Cloud AI, advanced OCR, and high-fidelity conversion read your file to do their work. Encrypted share links and template sync do not: your browser encrypts the file before it leaves, and we never hold the key. |
What we do (and don't) collect
"We" on this page means one person: discreetpdf.com is an independent, single-developer service. The pages themselves are static HTML, JS, and CSS, served from Cloudflare. In front of them runs one small Cloudflare Worker: it hands out those files, keeps a daily count of page views, and handles sign-in, licensing, and the contact form. It has a key-value store behind it for those things: accounts, sessions, licenses, short-lived anti-abuse counters, and counts. What it does not have is any endpoint that accepts a file. There is no analytics script on the page either (the CSP would block one anyway). The hosting provider logs basic request metadata like IP address, user agent, and response status, for the usual reasons: abuse mitigation and traffic shaping. That metadata never includes PDF content, because PDF content never reaches the host in the first place.
We do like to know, roughly, how many people use the site and how they found it. When a page is served, the site records a single row holding four things: which page, a label for where the visit came from (google, reddit, direct; never the linking URL), the two-letter country, and the number one. That is the whole row. No IP address, no user-agent, no cookie, no visitor ID. And because there is no visitor ID, no two rows can ever be linked to the same person. We read them back as daily totals, and we also read aggregate daily totals from the same Cloudflare request logs described above. There is still no analytics script, no cookie, and no beacon on the page. Open your developer tools and you'll see the page make no such request; the same Content-Security-Policy that blocks an analytics script blocks one here too. We build no profiles and don't track you across other sites. Since we set no tracking cookies and build no cross-site profile, there's no consent banner to click; what's kept on your device is your own working data (recent files, unsaved work, saved signatures and recipes) plus small preferences like theme and language, all of it clearable anytime.
If you sign in, we store an account record: your email, the ID and display name your sign-in provider gives us, when the account was created, when each provider was last used, and any license IDs. If you add a passkey, that record gains one entry per passkey: its public key and credential ID, a code for which kind of authenticator created it, how it connects (built in, USB, and so on), which optional features it supports, a signature counter, whether your device reports it as backed up, and when it was added and last used. The private key never leaves your device, and neither does your PIN, fingerprint, or face. A public key can only check a signature, never create one, and this one is useless on any site but ours. Buying a pass adds a billing record: the Paddle customer and subscription IDs, which pass it was, and when it runs out. Each sign-in also keeps a session row: when it started, when it was last used, and a copy of your browser's user-agent string (capped at 200 characters), which is what lets you tell your sessions apart on the account page, where you can sign out of all of them at once. That is the whole list. Nothing in it records which tools you open, no device fingerprints, and no profile built from your behavior. The page counts described above are separate: they are never linked to your account, because no identifier exists that could join them.
Stored on your device
The editor keeps a private, on-device copy of your recent files and any unsaved work in your browser's local storage (IndexedDB). It's what powers the Recent files list and crash recovery, so a closed tab or a browser crash doesn't cost you your work. That copy lives only in this browser on this device. It is never uploaded, and the same Content-Security-Policy above still blocks anything from sending it anywhere.
Clear recent files anytime from the editor’s start screen, or clear this site’s data in your browser to wipe everything at once. Only a handful of the most recent documents are kept, older ones are dropped automatically, and private/incognito windows keep nothing after you close them.
For the technical reader
Proof rather than promises: how the block is enforced, how to check it yourself, and independent scanners. Each section expands.
How the claim is enforced
The site ships with a Content Security Policy header that tells the browser exactly where the page is allowed to send data. The relevant directive is connect-src 'self'. It allows fetch, XHR, and WebSocket requests only to discreetpdf.com itself, and there is no endpoint there that accepts your file. Account, license, and contact actions make same-origin requests too, but they only ever carry credentials and form text, never your file's contents. Even if a future bug or a bad dependency tried to send your PDF to another site, the browser would block the request before it left your device; on our own origin, the safeguard is the one just stated: no endpoint accepts a file.
The full header, served on every page:
Content-Security-Policy: default-src 'none'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' blob: data:; font-src 'self' data:; manifest-src 'self'; connect-src 'self'; worker-src 'self' blob:; frame-src 'self' blob:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'Verify it yourself
- Open this page in any browser.
- Open DevTools (F12) and switch to the Network tab.
- Filter by
Fetch/XHR. - Open the editor and drop in a PDF. Edit it, save the result.
- Watch the Network panel: every request you see is a static asset, or a small same-origin sign-in check (/auth/me), from
discreetpdf.com. Your PDF's bytes never appear in any outbound request, ever.
Other security headers
Defense in depth. Each of these is verifiable by inspecting the response headers on any page of the site:
- Strict-Transport-Security: forces HTTPS for two years across all subdomains; prevents a network attacker from downgrading the connection to serve a tampered version of the site.
- Cross-Origin-Opener-Policy / Cross-Origin-Embedder-Policy: isolate the page in its own browser process so other tabs can't read its memory.
- X-Frame-Options: DENY + frame-ancestors 'none': block other sites from embedding this one in an iframe, which defeats clickjacking attacks that could trick you into uploading a file to a hostile wrapper.
- Referrer-Policy: sends no referrer at all on outbound links, so an external site learns nothing about where you came from.
- Permissions-Policy: explicitly denies camera, microphone, geolocation, and the ad-targeting and attribution APIs built into the browser (Topics, Protected Audience, Attribution Reporting).
Signing in uses Google or GitHub OAuth
The editor remains untouched by any third party. When you sign in, you authenticate with Google or GitHub. They see that you signed into discreetpdf.com and hand us your verified email, a stable account ID, and your display name. We request nothing beyond that basic profile: no contacts, no repos, nothing else. Signing in is optional: every tool works without an account, and using the tools stays anonymous.
Source of truth
If anything on this page disagrees with the actual _headers file the host ships, the headers win, because they're what the browser enforces. Check them directly:
curl -sI https://discreetpdf.com/ | grep -i policyCheck this site with independent scanners
Every claim on this page can be checked from outside. These scanners are run by third parties, not by us, and each link runs a live scan against discreetpdf.com:
- securityheaders.com: grades the HTTP response headers, including the Content-Security-Policy shown above.
- HTTP Observatory: MDN's header and TLS scanner, run by Mozilla.
- SSL Labs: inspects the HTTPS/TLS configuration in depth.
- Blacklight: The Markup's privacy inspector; it looks for ad trackers, third-party cookies, and session-recording scripts.
- security.txt: how security researchers can reach us (RFC 9116).
Read next
- My privacy pledge: the version-stamped promise about your files and any future paid features.
- How I make money: no ads, no data sale, and how the site is actually funded.
All PDF tools
All free, all in your browser. Pick the task you need.
Popular
- PNG to PDFCombine PNGs (screenshots, diagrams, scans) into one PDF.
- JPG to PDFCombine multiple JPG images into a single PDF.
- PDF to PNGRender every page as a lossless PNG. Sharp text, transparency kept.
- Unlock PDFRemove the password from a PDF you can open. Nothing uploaded.
- Word to PDFTurn a Word .docx into a PDF with real, selectable text.
- Merge PDFsCombine several PDFs into one file with drag-to-reorder.
- Compress PDFShrink a PDF down to email size. Three quality levels.
- Split a PDFCut one PDF into many by page ranges or every N pages.
Convert & scan
- PNG to PDFCombine PNGs (screenshots, diagrams, scans) into one PDF.
- JPG to PDFCombine multiple JPG images into a single PDF.
- PDF to PNGRender every page as a lossless PNG. Sharp text, transparency kept.
- Word to PDFTurn a Word .docx into a PDF with real, selectable text.
- PDF to JPGRender every page of a PDF as a JPG image.
- OCR a PDFMake scanned PDFs searchable. The OCR runs in your browser.
- Excel to PDFTurn an Excel .xlsx into a clean, printable PDF.
- PDF to textExtract the text content of a PDF as a plain .txt file.
- PDF to WordTurn a PDF into an editable Word document with paragraphs, headings, and styling recovered from the text.
- PDF to ExcelExtract the tables in a PDF into an Excel spreadsheet, one sheet per page.
- HTML to PDFConvert HTML markup or a saved webpage into a PDF document.
Organize pages
- Merge PDFsCombine several PDFs into one file with drag-to-reorder.
- Split a PDFCut one PDF into many by page ranges or every N pages.
- Organize PDFReorder, delete, rotate, and duplicate pages in one place.
- Split pages in halfCut every page down the middle. Turns two-up book scans into real pages.
- Remove blank pagesFind and drop the empty pages a duplex scan leaves behind. You confirm each one.
- Interleave PDFsCombine two half-scans into one correctly ordered PDF, alternating pages.
- Delete pagesRemove unwanted pages and save a clean copy.
- Extract pagesPull a selection of pages out into a new PDF.
- Reorder pagesDrag pages into the order you actually want.
- Rotate pagesTurn sideways or upside-down pages the right way up.
- Duplicate pagesCopy any page as many times as you need.
- Reverse pagesFlip the page order so the last page comes first.
Edit & sign
- EditorOpen the full editor: text, shapes, drawings, and more.
- Read a PDFRead any PDF in your browser. Search, select, copy. Nothing uploaded.
- Fill a PDF formFill interactive form fields: text, checkboxes, dropdowns.
- Sign a PDFDraw or type a signature and place it on any page.
- Edit PDF textReplace text in place. Fix typos, update names and dates.
- Add image to PDFDrop logos, photos, or stamps onto any PDF page.
- Remove annotationsDelete comments, highlights, and markup for a clean copy.
Security & privacy
- Unlock PDFRemove the password from a PDF you can open. Nothing uploaded.
- Protect PDFAdd an AES-256 password to a PDF. Encrypted in your browser.
- Redact PDFPermanently remove text from a PDF. Destroyed, not covered. All in your browser.
- PDF metadataSee who a PDF says wrote it, then edit or strip it all.
- Clean before sharingStrip metadata, scripts, comments and form data before you send a PDF.
- Sanitize PDFStrip embedded scripts, auto-run actions, and files hidden inside a PDF.
Compress & fix
- Compress PDFShrink a PDF down to email size. Three quality levels.
- Flatten PDFBake form fields and annotations into the page for good.
- PDF RecipesSave a set of steps and run it over many PDFs at once. Nothing uploaded.
- Resize PDFResize pages to A4, Letter, or any scale, proportions kept.
- Crop PDFTrim margins off every page, and actually delete what you cut.
Stamp & number
- Court filing prepBates-number a whole production, stamp it, and lock it, all in one pass.
- Watermark a PDFStamp text across every page: DRAFT, CONFIDENTIAL, your name.
- Header & footerStamp text into the margins: CONFIDENTIAL, dates, filenames, page counts.
- Bates numberingSequential legal numbering across a whole document set. No file cap.
- Add page numbersNumber every page. You pick the corner and the format.