wcagcheckr

For developers who already run axe

axe-core tests your page once, standing still. Your bugs live in the states.

You run axe in CI and it comes back green — then a keyboard user hits a focus state with 2:1 contrast that axe never saw, because axe tests the page at rest. wcagcheckr drives every component through 30+ interaction states (hover, focus, focus-visible, active, disabled, ARIA, light/dark/forced-colors, LTR/RTL, breakpoints) and runs the same axe-core engine at each one.

It’s not that axe is wrong — it’s that a single static snapshot can’t see a contrast failure that only exists on :focus, or a target that only collapses below 768px. The states are exactly where real users get stuck, and they’re exactly what a rest-state scan skips.

We don’t replace axe — we pin axe-core 4.11.4 and run it across the matrix, plus twelve analyzers for the things axe can’t check at all (reading order, tab order, reflow, APCA, tokens).

Why one scan can’t catch the states

axe-core runs on the DOM as it’s served — one snapshot, in one state. Testing how a component looks on :focus or :hover is hard enough that Deque tracked it as its own axe-core issue (#809, opened 2018); but a normal run still evaluates your UI at rest. The failures that only appear on focus, on disabled, in dark mode, or at a narrow breakpoint need the component driven into each state and re-audited — that state driver, wrapped around the same axe-core engine, is what we built. It’s not that axe is wrong; one snapshot just can’t be in thirty states at once.

Deque axe-core issue #809, “Test contrast of focused / hovered elements” (opened 2018).

Sources:  axe-core issue #809

Start free — see what the rest-state scan missed

Install the extension and run it on your real components. No account, no card.

  • A multi-state matrix (configurable preset) — axe-core run across interaction states, not just at rest
  • Delta-only reporting — see only the NEW violations since your last run
  • The CLI runner (@wcag-checkr/ci) with SARIF + JUnit and threshold exits
  • The visualizer overlays — reading order, tab order, target size, vision sims
Install free

Reproducible, not magic

axe-core is pinned at 4.11.4, so a green run today is a green run next week — bumping the engine would shift baselines, and we don’t do that silently. The matrix is deterministic: same component, same states, same verdicts.

Run axe across every state, not just at rest. Free to start.

No checkout here — on purpose. Install free, run it on your real site, and unlock the rest inside the app when the evidence is worth it to you.