MIT Open Source antidrift

fast-a11y

Static HTML accessibility checker with axe-core compatible output. No DOM, no browser, no Playwright. Pass HTML, get violations.

Node.js · Python
86 WCAG rules
5MB install size
30ms per page
0 runtime deps
$ npm install fast-a11y

What 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.

Install size Per page Requires
axe-core 500MB 5s Playwright / browser
fast-a11y 5MB 30ms plain HTML string

Usage

Node.js
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>'
Python
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.