The problem
What follows is what we actually do about it. We claim only what has shipped: the second list below is the work that does not exist yet, and it stays there until it does.
We ship you the JavaScript on every page load, so we could ship malicious JavaScript tomorrow. No amount of client-side engineering removes that.
In place today
- A strict Content-Security-Policy in the editor: script-src 'self' 'wasm-unsafe-eval'. No inline script, no third-party origin, and no JavaScript eval. The one addition, 'wasm-unsafe-eval', permits WebAssembly compilation and nothing else — without it PDFium and qpdf cannot start at all, so this is a requirement rather than a relaxation. A test fails the build if any cross-origin source ever appears in this policy.
- The editor is cross-origin isolated, with COOP same-origin and COEP require-corp. That is also what makes WebAssembly threads available.
- No third-party code runs in the document that touches your file. This is the narrow, defensible version of the claim — not “no third-party code ever”. Advertising is planned for the content pages, and pretending otherwise would be the same dishonesty we are selling against.
- Reproducible dependency resolution: a pinned toolchain, exact versions, and a frozen lockfile in CI.
Not built yet
Listed because a transparency page that omits its own gaps is marketing.
- A signed build manifest: a hash of every first-party file, signed and published to a public transparency log, so a release is immutable and auditable. The endpoint currently returns a stub.
- A verifier extension that checks the page you loaded against that manifest on every visit.
- Public source, and a third-party audit. Both are prerequisites for any paid tier rather than something that follows one.
- A desktop build — the real answer for high-assurance users, since it does not change underneath you.
Why in that order
The list is cheapest-first, and each item is worth something on its own. A strict policy does not stop a malicious release, but it does stop an accidental one, and it makes a deliberate one visible in a diff.
The manifest and the transparency log are what turn “trust us” into “check us”. That is why they gate a paid tier rather than following one: charging for privacy before you can verify it would be the wrong way round.