fast-a11y
Static HTML accessibility checker with axe-core compatible output. No DOM, no browser, no Playwright. Pass HTML, get violations.
$ npm install fast-a11yWhat it does
fast-a11y checks HTML for accessibility violations without rendering it. It parses the markup directly, runs 86 of axe-core's ~95 WCAG rules, and returns violations in axe-core's format. The 9 rules it skips genuinely require a rendered DOM — things like focus management and computed styles. Everything that can be caught statically is caught.
Usage
import { check } from 'fast-a11y';
const html = '<img src="hero.jpg"><button></button>';
const result = await check(html);
for (const v of result.violations) {
console.log(v.id, v.impact, v.nodes[0].html);
}
// 'image-alt' 'critical' '<img src="hero.jpg">'
// 'button-name' 'critical' '<button></button>' from fast_a11y import check
html = '<img src="hero.jpg"><button></button>'
result = check(html)
for v in result.violations:
print(v.id, v.impact, v.nodes[0].html) Output format
Output matches axe-core's violation schema: id, impact (critical / serious / moderate / minor), description, nodes with html and failureSummary. Drop-in for any tooling that already consumes axe-core results.
Used in Probeo
fast-a11y was extracted from Probeo, where it runs in production as part of the crawl pipeline.