Loading…
Loading…
Dataset 20260827-2142-2f1b575 · measured 2026-08-27 21:42 UTC
Conformance · methodology
Every number in this section comes from one procedure, run the same way every time. This page is that procedure — including the parts that make the number smaller.
The Web Platform Tests are the suite browsers are judged by. Most of the layout ones are reftests: a pair of files that must render identically if the engine is correct. The test file uses the feature under test; the reference draws the same picture with simpler primitives that are already known to work. Neither file says what “correct” looks like in prose; the pair defines it.
That is what makes the suite usable for a PDF engine at all. We render both files with our own engine — no browser anywhere in the loop — rasterise the PDFs and compare them pixel by pixel, honouring the allowance the test declares for itself in <meta name="fuzzy">. A pair that matches is a pass; a pair that does not is a failure, and the differing pixels are published with it.
WPT reftests assume an 800×600 CSS-pixel viewport, so the page is rendered at 600×450 pt with no margins and only the first page is compared — content past the fold is clipped, exactly as a browser screenshot would clip it. A test that declares its own @page is treated as a print reftest instead: rendered at its natural size, with every page compared in order.
A PDF engine has no JavaScript, no events, no network and no clock. Tests that need any of them cannot be passed or failed by it — counting them either way would be a decision dressed as a measurement, so they are recorded as not judged, with the reason kept:
Draft-spec entries are the uncomfortable ones and they stay on the list: those are tests for features whose specification is still moving and which no shipping browser implements either. They are excluded from the strict rate and counted against us in the raw rate, so both readings are available.
Strict — passes over tests the engine can be judged on: 17,590 / 19,554 = 89.96%. Measurement ties are in the denominator as failures. They differ only by anti-aliasing at the raster resolution, and we do not move them into the numerator.
Raw — passes over the entire corpus: 17,590 / 23,994 = 73.31%. Every skip counts against the engine. It is the number a sceptic should quote, and it is published for exactly that reason.
We wrote 98 reftests of our own for paged media — running headers, footnotes, leaders, named strings, cross-references — because the web suite barely covers printing. They are run in the same harness and judged the same way, and they are not counted in the headline figures. We wrote that corpus, so it measures our regressions rather than our conformance; mixing it in would inflate the figure by a couple of points. Current state: 98 of 98 passing (100%).
It is not a comparison with browsers. A browser runs the whole suite, including everything we skip, and the corpus contains features that have no meaning on paper. The figure is useful in one direction only: us against us, over time, and as an address for any specific claim about what the engine renders correctly. That is why every test is published individually — a summary can be curated, 19,554 verdicts cannot.
The dataset this section is built from is served as plain JSON from the same domain:
This page was built from dataset 20260827-2142-2f1b575f-ad980fe6, engine bbd75e5f. Back to the results.