WCAG 2.2 conformance, for every site
The web is for everyone.
The Setsquare SDK checks the site you already have against WCAG 2.2, up to AAA, from the Playwright tests you already run, and shows you what to fix. Starting something new? Setsquare UI gives you components that meet AA or AAA from the first screen, in your own look. Both are free and Apache-2.0 licensed.
SpecimenSetsquare UI at AAAAA
- Target
- 2444px minimum
- Paint
- 3636px, unchanged
- Focus ring
- 23px
- Between controls
- 812px
01Why
Conformance is something you build, not a certificate you buy.
Compliance asks whether you were covered on the day of the audit. Conformance asks whether every page, every state and every width works for the person using it, and keeps working after the next merge. Setsquare is built for the second question.
- people live with a significant disability: 1.3 billion of us
- 1 in 6
- From the WHO’s Disability fact sheet, March 2023.
- of the top million home pages have WCAG 2 failures a tool can detect, up from 94.8% a year before
- 95.9%
- From The WebAIM Million, March 2026.
02Fix what you have
Your tests already reach every screen. Now they’re evidence.
The SDK rides inside the Playwright suite you already have: the signed-in screens, the half-filled forms, the dark theme. Every settled page is checked against WCAG 2.2, up to AAA, and every finding names the rule, the criterion and the element to fix. Where a person is needed, it says so.
- Not a crawlerIt scans what your tests drive, at the sizes they drive it. One line in your config and no test edits.
- No model decidingDeterministic rules on axe-core 4.13.0 and Setsquare’s own checks. Needs a person is never a pass and never a fail.
- Nothing leaves your machineThe SDK has no network client at all: a summary in your terminal and a JSON evidence file on disk.
Setsquare — accessibility evidence
PLAYWRIGHT
91 passed
4 skipped
ACCESSIBILITY — WCAG 2.2 AAA
6 surfaces scanned in 2 themes
6 rule–surface pairs failing — 2 rules across 5 surfaces
210 needing a judgement — a person decides
722 we could not measure — our debt, not yours
61,596 checks passed, across 61 distinct rules
Quote the 6 above rather than the 42 failing elements behind them, which the report
carries. A rule–surface pair is a property of the code and moves when the code does;
a failing-element count is a count of what was on the page at the time, so the same
code over a table with fewer rows reports fewer failing elements without anything
having been fixed. The report lists them as 6 rows: elements that measured the same
are one row, however many surfaces they were found on.
CONFORMANCE — WCAG 2.2
Includes every 2.0 and 2.1 criterion. Automated checks cover only part of WCAG, so
this is evidence about what was scanned, never a conformance claim.
Level A no failures detected in what was scanned
Level AA no failures detected in what was scanned
2 Level AAA failures detected — 2 criteria failing
1 2.4.12 Focus Not Obscured (Enhanced) FAIL on 1 of 6 surfaces (17%)
setsquare-focus-obscured-enhanced
5 3.1.5 Reading Level FAIL on 5 of 6 surfaces (83%)
setsquare-reading-level
To clear the detected Level AAA failures, fix: 2.4.12, 3.1.5.
32 criteria: every automated rule passed — evidence, not conformance
7 criteria automation could not decide — see the two sections above
30 criteria: checks ran, nothing to check on these pages (no such content)
11 criteria no automated rule can decide — what you still owe an auditor
1 criteria compare pages against each other — fewer than two pages carried the evidence
3 criteria not automatically checked in this run
A surface counts as failing if it fails in any scanned state or theme.
Which rules, on which surfaces, with the selectors and the criteria grid: in the
report below. SETSQUARE_VERBOSE=1 prints all of it here instead, for a CI log with no
report to open.The opening of the summary. The rest says what else to look at and where the files are.
Setsquare — accessibility evidence
PLAYWRIGHT
36 passed
ACCESSIBILITY — WCAG 2.2 AA
6 surfaces scanned in 2 themes
0 rule–surface pairs failing — 0 rules across 0 surfaces
180 needing a judgement — a person decides
36,938 checks passed, across 48 distinct rules
CONFORMANCE — WCAG 2.2
Includes every 2.0 and 2.1 criterion. Automated checks cover only part of WCAG, so
this is evidence about what was scanned, never a conformance claim.
Level A no failures detected in what was scanned
Level AA no failures detected in what was scanned
Level AAA not assessed — AAA is opt-in; run with wcag: 'AAA' to include it.
No Level AA violations detected across 6 surfaces (automated checks only).
23 criteria: every automated rule passed — evidence, not conformance
5 criteria automation could not decide — see the two sections above
23 criteria: checks ran, nothing to check on these pages (no such content)
2 criteria no automated rule can decide — what you still owe an auditor
1 criteria compare pages against each other — fewer than two pages carried the evidence
1 criteria not automatically checked in this run
Which rules, on which surfaces, with the selectors and the criteria grid: in the
report below. SETSQUARE_VERBOSE=1 prints all of it here instead, for a CI log with no
report to open.The opening of the summary. The rest says what else to look at and where the files are.
03Prevent the next one
Choose AA or AAA. Keep your look.
Building something new? Start with components that already meet your level, so there’s less to fix. They’re React Aria components on Tailwind 4, with shadcn’s token names: one attribute moves a whole product from AA to AAA, and your colours, type and corners stay yours.
<html lang="en" data-conformance="aaa">- Three layers, one lookThe target is the real element and the paint is what people see. At AAA the target grows to 44px and the paint doesn’t move.
- Your brand, not oursBring your own colours and fonts. The conformance tokens stay where they are.
- Guards in the boxLint rules and Playwright page checks ship with the package, so a layer that comes apart in your own code gets reported.
- ContentThe icon and its accessible name.
- PaintWhat people see: 28 × 2828 × 28 at both levels.
- TargetThe button element itself: 28 × 2844 × 44 at AAAAA.
04Together
Fix what you have. Prevent what’s next.
Start with the site you already run: the SDK finds what stands in the way. Then build what comes next with components that won’t add to the list.
Wrap your config
withSetsquare() adds one reporter to the Playwright config you already have. No test edits.Run your suite
Every settled page in every test is scanned: signed in, half-filled, in the dark theme.Fix from the evidence
Each finding names the rule, the criterion and the element, and says when a person needs to decide.Build new screens with Setsquare UI
Components that meet AA or AAA by construction, so the next run has less to find.
import { defineConfig } from '@playwright/test';
import { withSetsquare } from '@setsquare/review-sdk';
export default withSetsquare(
defineConfig({ testDir: './e2e' }),
{ wcag: 'AAA' },
);05This site
We scan this site with the SDK we sell.
At WCAG 2.2 AA and at AAA, in both themes, at every width the suite runs. We publish all of it, including the rules this copy fails and everything the engine couldn’t decide. The figures here are for the level you’re reading at.
- rules failing
- 0
- None detected on this run
- elements that need a person
- 180
- Across six rules, listed on the evidence page
- scans
- 36
- six pages at three widths, in both themes
- cookies set
- 0
- And no third-party request: asserted on every page by this site’s own tests
Run of 3 October 2026, 09:23 UTC
- rules failing
- 2
- 2.4.12 Focus Not Obscured (Enhanced); 3.1.5 Reading Level
- elements that need a person
- 932
- Across seven rules, listed on the evidence page
- scans
- 42
- six pages at four widths, in both themes
- cookies set
- 0
- And no third-party request: asserted on every page by this site’s own tests
Run of 3 October 2026, 09:22 UTC
06What it isn’t
Honest about its edges.
A tool that measures conformance has to be precise about what it can’t measure.
Not an overlay
Nothing is injected into your users’ pages. The SDK is a dev dependency, and the components are code you ship yourself.
Not a model deciding
No language model decides conformance. Rules decide what rules can, and the rest is reported as needing a person, with the reason.
Not a conformance claim
Automated evidence is not conformance. Deque measured automated tests finding 57% of issues in first audits, so we show which criteria no rule can decide.
Not a percentage
We don’t know your route inventory, so we won’t invent a denominator. You get the whole table instead.
07Start