In a sentence
We publish what we measure. Every tool page shows what the tool did to a sample file you can open yourself; the engine is run every week over thousands of real PDFs, the broken and the strange included; and the checks that read a result back before you send it were measured on files with faults planted in them.
A library of real files, every week
The engine that runs the browser tools is run over three public collections: the test corpus of pdfium (the PDF engine of Chrome, with its crash and fuzzer files), the corpus of veraPDF (the PDF/A validator, with the Isartor and BFO test suites), and the PDF 2.0 examples of the PDF Association. Each file goes through the operations in turn: opening, compressing, splitting, merging, rotating, watermarking, flattening, text and picture extraction, and the rest.
| Latest run | 2026-10-28, commit 04a6005 |
|---|---|
| Files | 2,500 |
| Operations run | 12,316 |
| Completed | 12,270 |
| Refused with a clear reason | 46 |
| Crashes | 0 |
| Timeouts | 0 |
| Slowest operation | compress on isartor-6-1-12-t01-fail-a.pdf, 106.3 s |
“Refused” means the engine said no, with a reason: a file that is not a PDF, one encrypted with a password or a method we do not support, or one of the fuzzer files made to be unreadable. A refusal shows as a message; a crash would be a failure of ours, and the run fails if there is one. The run is a workflow in our repository (corpus.yml) and its report is kept with each run.
Checked before you send: measured on planted faults
After Compress, Redact and Edit, the result is read back by two independent readers, compared with the original as pictures, counted and inventoried, and each check reports Passed, Needs review or Failed. To know whether those checks catch what matters, we took sample files, planted a fault in each (a page dropped, text changed, a redaction that covered but did not remove, a picture replaced) and ran the checks on the faulty and the clean files alike.
| Tool | Faulty files | Caught | Clean files | False alarms |
|---|---|---|---|---|
| Compress PDF | 35 | 35 | 35 | 0 |
| Redact PDF | 35 | 35 | 35 | 0 |
| Edit PDF | 30 | 30 | 30 | 0 |
| All | 100 | 100 | 100 | 0 |
Measured on 2026-10-18, commit 3865f53, with a fixed random seed so the run repeats. A check that passed is not a proof: it says the two readers found the same text, the same page count and the same look, within what the report shows.
Every tool page shows its measurements
Each tool’s page carries a “Measured on our sample file” section: the input, the output, the figures (size, time, words recognised, changes found) and a picture of the result, measured in a real browser on 2026-10-29 at commit dd84427, and the “What it cannot do” list beside it. The sample files are the ones you can try from the page.
What runs on every change
- The engine’s unit tests, the server’s, the worker’s and the site’s, with the Office conversions and text recognition run on a machine that has LibreOffice, Ghostscript, Poppler and Tesseract installed.
- The browser suite: every tool used as a person would, on a desktop and on a phone, with the files it refuses as well as the ones it takes; accessibility checks on every public page; security checks on every write.
- Every page of the site, in all nine languages, opened at a phone’s width to see that nothing overflows or overlaps.
- The dependency audit and the code scanners named on the security page.
Nothing reaches the live site unless all of it passes. Each release is listed on the changelog; the security page says where files go and how they are protected. If a tool gives you a wrong result, write to us from the About page: a wrong result is a bug we want.