Skip to main content

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 AA

Target
24px minimum
Paint
36px, unchanged
Focus ring
2px
Between controls
8px

This page is built with Setsquare UI. Switch its level: the paint stays put, and every target you can press changes size.

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

Setsquare SDK@setsquare/review-sdk

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.
Read the quick start
This site’s own run at AA, as it printedwcag: 'AA'

  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

Setsquare UI@setsquare/ui

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.

app/layout.tsx
<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.
Read it on npm
  • ContentThe icon and its accessible name.
  • PaintWhat people see: 28 × 28 at both levels.
  • TargetThe button element itself: 28 × 28 at AA.
An icon button drawn as three layers: the content, the paint, and the target, which is the button element.

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.

  1. Wrap your config

    withSetsquare() adds one reporter to the Playwright config you already have. No test edits.
  2. Run your suite

    Every settled page in every test is scanned: signed in, half-filled, in the dark theme.
  3. Fix from the evidence

    Each finding names the rule, the criterion and the element, and says when a person needs to decide.
  4. Build new screens with Setsquare UI

    Components that meet AA or AAA by construction, so the next run has less to find.
playwright.config.ts
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.

Read the evidence
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

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

Start in a minute. No account.

Both packages are Apache-2.0 licensed, and local runs keep working for as long as you like without signing up.

The SDK
npm i -D @setsquare/review-sdknpx setsquare initnpx playwright test
Setsquare UI
pnpm add @setsquare/ui react-aria-components @internationalized/date