Automated accessibility scanning across the five engines - axe-core (primary), pa11y, Lighthouse a11y, WAVE, and IBM Equal Access. Authors and runs axe-core scans via the `axe.run()` JavaScript API or the @axe-core/playwright / @axe-core/cli wrappers, parses `violations[]` into per-rule severity, configures rule disable / disable-by-tag patterns, and emits CI-gateable output; references/ carry the pa11y CLI (htmlcs + axe runners), Lighthouse CI `categories:accessibility` assertions, the WAVE API / overlay, and IBM Equal Access (Section 508) with their verified CLI / API / config. Use for any automated a11y scanner setup - axe-core for JS/TS UI test suites on every PR, and the references for CLI-only, Lighthouse-pipeline, WebAIM-branded, or Section 508 scanning.
75
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
axe.run() resolves to an object with four arrays (axe-core):
| Field | Meaning |
|---|---|
violations | Definite issues - block this in CI. |
incomplete | Items needing human review (axe couldn't determine). |
passes | Successful checks. |
inapplicable | Rules that don't apply to this page. |
Each violation has:
| Field | Meaning |
|---|---|
id | Rule ID (e.g. color-contrast, label, aria-required-attr). |
impact | critical / serious / moderate / minor. |
tags | Includes wcag2a, wcag22aa, etc. - for severity-by-SC tagging. |
description | One-line explanation. |
help | Longer remediation guidance. |
helpUrl | Direct link to Deque's rule documentation. |
nodes | Array of failing elements with target (selector), html, failureSummary. |
Triage with jq:
# Top violations by impact
jq -r '.violations[] | "\(.impact): \(.id) - \(.description)"' axe-results.json
# Just the failing selectors per rule
jq -r '.violations[] | "\(.id):", (.nodes[].target | tostring)' axe-results.jsonaxe ships rules tagged with conformance levels:
new AxeBuilder({ page }).withTags(['wcag2a', 'wcag2aa', 'wcag22aa'])Common tag sets:
| Tag set | Coverage |
|---|---|
['wcag2a', 'wcag2aa'] | WCAG 2.0/2.1 A + AA. Default for most teams. |
['wcag2a', 'wcag2aa', 'wcag22aa'] | Adds WCAG 2.2 AA criteria. |
['wcag2aaa'] | AAA-only (rarely the gate). |
['best-practice'] | Non-WCAG good practices. |
['experimental'] | Beta rules. |
new AxeBuilder({ page }).disableRules(['color-contrast'])For per-page disabling (e.g. a known false positive on a specific component):
new AxeBuilder({ page })
.exclude('.legacy-component') // selector exclusion
.analyze();For per-rule severity in CI gating (e.g. block on critical /
serious only): handle in a11y-violation-gate using the impact
field.