Accessibility testing that tells you what it can't tell you.
SureA11y is an open-source family of accessibility testing packages built around one deterministic WCAG testing engine. You run it in your own test suite, CI pipeline, or from the command line.
It automates what can be determined objectively and makes the limits of that automation explicit. Instead of hiding uncertain cases, it distinguishes between what fails, what passes, what can't be determined automatically, and what doesn't apply.
Website & documentation · Getting started
@surea11y/core is the foundation of the ecosystem. Every other package is built on it.
- Deterministic results. The same input produces the same output.
- Explicit uncertainty. Cases that require human judgement are reported as
cantTell, not silently ignored. - Conservative findings.
failis reserved for objective, normative violations. - Standards traceability. Rules map to the applicable WCAG Success Criterion whenever appropriate.
- ACT validation. Rules with a W3C ACT counterpart are verified against ACT's published test corpus, with a public implementation report.
- Stable, machine-readable output for testing and CI workflows.
- Zero runtime dependencies.
Automate what can be determined objectively. Never pretend to automate what cannot.
Install the package that matches how you already test. Each one pulls in @surea11y/core for you and uses the same result model.
| Environment | Package |
|---|---|
| Playwright | @surea11y/playwright |
| Cypress | @surea11y/cypress |
| Puppeteer | @surea11y/puppeteer |
| Selenium | @surea11y/selenium |
| WebdriverIO | @surea11y/webdriverio |
| Jest / Vitest | @surea11y/test-matchers |
| CLI / CI | @surea11y/cli |
| A DOM you already have | @surea11y/core |
Every rule produces one of four explicit outcomes:
fail: a violation provable from the DOM.pass: the rule's specific condition is met.cantTell: a human has to decide, and the result says what was ambiguous.notApplicable: the rule's precondition is not present.
A pass is not a claim that a page is accessible. Automated testing covers only what can be determined from the information available to the engine.
Results and reports · Known limitations
npm install @surea11y/coreThe engine needs a DOM to read but never creates one. You supply it, whether that is jsdom, a browser automation page, or the live document. To scan static HTML without writing any code:
npx @surea11y/cli scan ./index.htmlThe Getting Started guide covers installation and usage for each package.
SureA11y is an independent open-source project, developed in the open. @surea11y/core is licensed under MPL-2.0, and the integration packages under MIT. Every package is published on npm.
Issues and contributions are welcome. See CONTRIBUTING.md, or core's own guide before working on a rule.