A collection of audits that are designed to complement static analysis tools like axe-core and HTML_CodeSniffer. They work by simulating user interaction through a real web browser, allowing them to test against WCAG success criteria that static analysis tools cannot.
Made with ❤️ by the A11y Pulse team in New Zealand.
| Success criterion | A11y-Pulse/audits | axe-core | pa11y (HTML_CodeSniffer) |
|---|---|---|---|
| 1.1.1 Non-text Content (A) | ✅ | 🟡1 | ➖2 |
| 1.4.1 Use of Color (A) | ✅ | 🟡3 | ➖2 |
| 1.4.10 Reflow (AA) | ✅ | ❌ | ➖2 |
| 1.4.12 Text Spacing (AA) | ✅ | 🟡4 | ➖2 |
| 2.1.2 No Keyboard Trap (A) | ✅ | ❌ | ➖2 |
| 2.4.1 Bypass Blocks (A) | ✅ | 🟡5 | ➖2 |
| 2.4.6 Headings and Labels (AA) | ✅ | ❌ | ➖2 |
| 2.4.7 Focus Visible (AA) | ✅ | ❌ | ➖2 |
| 2.4.11 Focus Not Obscured (AA) | ✅ | ❌ | ❌ |
| 3.2.1 On Focus (A) | ✅ | ❌ | ➖2 |
2. Manual review only: emits a note asking a human to check the criterion.
3. The `link-in-text-block` audit only checks that links are distinguishable from the surrounding text.
4. The `avoid-inline-spacing` audit only flags inline `!important` spacing declarations.
5. The `bypass` audit only checks that a bypass mechanism exists, not that it works.
The @a11y-pulse/audit-runner package is a simple command line tool to run the audits against a single URL:
npx @a11y-pulse/audit-runner https://example.com/It also serves as an implementation reference for integrating the audits in your own automation pipeline. Individual audits can also be used on their own - see the README in each package for details.
| Package | What it checks |
|---|---|
| @a11y-pulse/focus-appearance-audit | WCAG 2.4.7 Focus Visible: tabs through a page and detects a visible focus indicator. Also flags indicators that rely on colour alone (WCAG 1.4.1 Use of Color) |
| @a11y-pulse/focus-not-obscured-audit | WCAG 2.4.11 Focus Not Obscured (Minimum): tabs through a page and detects focused elements entirely hidden behind other content |
| @a11y-pulse/context-change-on-focus-audit | WCAG 3.2.1 On Focus: tabs through a page and detects focus-triggered context changes (new windows, auto-submits, navigation, focus theft/removal) |
| @a11y-pulse/keyboard-trap-audit | WCAG 2.1.2 No Keyboard Trap: tabs through a page, detects focus confined to part of it, and tries the standard keyboard exits before reporting a trap |
| @a11y-pulse/filename-alt-text-audit | WCAG 1.1.1 Non-text Content: flags image alt text that is the image's own filename, a camera file name or placeholder text |
| @a11y-pulse/focus-order-audit | WCAG 2.4.3 Focus Order: tabs through a page and flags focus that repeatedly jumps a long way against the reading order, for human review |
| @a11y-pulse/orphaned-tab-roles-audit | WCAG 1.3.1 Info and Relationships and 4.1.2 Name, Role, Value: flags tabs with no tab panel, tab panels with no tab, and navigation links given the tab role |
| @a11y-pulse/suspicious-accessible-name-audit | WCAG 2.4.6 Headings and Labels, 2.4.4 Link Purpose and 1.1.1 Non-text Content: flags accessible names that are code, an unrendered template token or placeholder text |
| @a11y-pulse/reflow-audit | WCAG 1.4.10 Reflow: narrows to 320px and checks for content that requires horizontal scrolling |
| @a11y-pulse/skip-link-audit | WCAG 2.4.1 Bypass Blocks: verifies that skip links are present and functional |
| @a11y-pulse/text-spacing-audit | WCAG 1.4.12 Text Spacing: applies extra spacing and detects clipped or overlapping text |
| @a11y-pulse/browser-adaptor | Shared browser adaptor primitives (BrowserAdaptor, PuppeteerAdaptor) and DOM helpers (getSelector, truncateHtml) used by audit packages |
| @a11y-pulse/tab-orchestrator | Orchestrator that drives a page once so multiple tab-driven audits can share a single tab loop |
| @a11y-pulse/audit-runner | CLI that runs axe-core and all A11y Pulse audits |
The packages in this repository are split into two licence categories:
- The audit packages are PolyForm Shield 1.0.0. This means they are source-available and can be used freely, including commercially and in your own internal monitoring, as long as you are not building something that competes with A11y Pulse.
- The plumbing packages are MIT.
browser-adaptor,tab-orchestrator, andaudit-runnercan all be used freely with almost no restrictions.
Please read the LICENSE.md file for each package to understand the specific terms of use.
Adaptors, new criteria and accuracy fixes are all welcome. See CONTRIBUTING.md for Changesets and pull-request expectations, and the open issues for work that is ready to pick up.
Requires Node.js >=22.
git clone https://github.com/A11y-Pulse/audits.git
cd audits
npm install
npm test # typecheck + unit tests
npm run test:integration # real Chromium via Puppeteer
npm run lintA11y Pulse is a web accessibility monitoring platform. It scans websites for accessibility issues using real web browsers, making it easier to reach WCAG compliance and maintain accessibility over time. A11y Pulse combines these audits with other open-source accessibility testing frameworks to provide more coverage than most other tools.
