Website · Quick Start · Formats · Pricing
It happens on every project. An image without alt text. A button made from a div. A form input with no label. A click handler with no keyboard equivalent. A modal that traps focus with no escape.
WCAG 2.1 is the global standard for web accessibility, and lawsuits for non-compliance have increased 300% since 2018. The automated scanner catches it in staging. After the complaint.
AccessLint catches accessibility violations before they leave your machine. Pre-commit hooks. Local scanning. 95+ patterns across HTML, JSX, Vue, and Svelte. Zero data leaves your laptop.
# 1. Install via ClawHub (free)
clawhub install accesslint
# 2. Scan your repo
accesslint scan
# 3. Install pre-commit hooks (Pro)
accesslint hooks installThat's it. Every commit is now scanned for accessibility violations.
One command to scan any file, directory, or your entire repo. 95+ regex patterns detect missing ARIA attributes, semantic HTML failures, keyboard navigation gaps, form accessibility issues, color/visual problems, and dynamic content failures across HTML, JSX, Vue, and Svelte.
Install a lefthook pre-commit hook that scans every staged template file. If an accessibility violation is detected, the commit is blocked with a clear remediation message.
Produce markdown reports with severity breakdowns, WCAG 2.1 success criterion mapping, and remediation steps. Ideal for accessibility reviews and compliance audits.
Analyze component-level accessibility, ARIA coverage, heading hierarchy, landmark regions, and form labeling patterns with the deep audit command.
Define organization-specific policies (required alt text, banned inaccessible patterns, mandatory ARIA labels) and enforce them alongside the built-in 95+ patterns.
Generate comprehensive reports mapping findings to WCAG 2.1 success criteria (Level A, AA, AAA) with executive summaries, detailed findings, and remediation roadmaps.
| Feature | AccessLint | axe-core ( |
pa11y ($0) | WAVE ( |
Lighthouse ($0) | eslint-plugin-jsx-a11y ($0) |
|---|---|---|---|---|---|---|
| Static template scanning | Yes | No (runtime) | No (runtime) | No (runtime) | No (runtime) | JSX only |
| HTML file scanning | Yes | No | Yes | Yes | Yes | No |
| JSX/TSX scanning | Yes | No | No | No | No | Yes |
| Vue SFC scanning | Yes | No | No | No | No | No |
| Svelte scanning | Yes | No | No | No | No | No |
| Missing ARIA detection | Yes | Yes | Partial | Yes | Partial | Yes |
| Semantic HTML checks | Yes | Yes | Partial | Yes | Partial | Partial |
| Keyboard navigation | Yes | Partial | Partial | Partial | Yes | Partial |
| Form accessibility | Yes | Yes | Partial | Yes | Partial | Yes |
| Dynamic content a11y | Yes | Yes | No | Partial | No | No |
| Pre-commit hooks | Yes | No | No | No | No | Yes |
| Zero config scan | Yes | Config needed | Config needed | N/A | N/A | Config needed |
| WCAG criterion mapping | Yes | Yes | Yes | Yes | Partial | Partial |
| Offline license validation | Yes | N/A | N/A | N/A | N/A | N/A |
| Local-only (no browser) | Yes | No | No | No | No | Yes |
| Zero telemetry | Yes | Yes | Yes | No | No | Yes |
| ClawHub integration | Yes | No | No | No | No | No |
| Price (individual) | Free/$19/mo | Free/$400+/yr | Free | Free/$100/yr | Free | Free |
AccessLint detects 95+ accessibility patterns across 4 template formats:
| Check | Severity | WCAG | Description |
|---|---|---|---|
| Missing img alt | Critical | 1.1.1 | Images without alt attribute |
| Missing lang attribute | Critical | 3.1.1 | HTML document without lang |
| Missing document title | High | 2.4.2 | Page without title element |
| Heading hierarchy skip | High | 1.3.1 | Skipping heading levels (h1 to h3) |
| Form input without label | Critical | 1.3.1 | Input elements without associated labels |
| Check | Severity | WCAG | Description |
|---|---|---|---|
| onClick without onKeyDown | High | 2.1.1 | Click handlers missing keyboard equivalent |
| Missing key on list items | Medium | 4.1.1 | Dynamic lists without unique keys |
| aria-hidden on focusable | Critical | 4.1.2 | Hidden elements that remain focusable |
| Icon button without label | Critical | 4.1.2 | Buttons with only icon content, no accessible name |
| Check | Severity | WCAG | Description |
|---|---|---|---|
| v-html accessibility | High | 4.1.1 | v-html may inject inaccessible content |
| Missing template lang | Medium | 3.1.1 | Missing lang on root element |
| @click without @keydown | High | 2.1.1 | Click binding without keyboard equivalent |
| Check | Severity | WCAG | Description |
|---|---|---|---|
| on:click without on:keydown | High | 2.1.1 | Click event without keyboard event |
| Missing a11y attributes | High | 4.1.2 | Interactive elements without ARIA |
| {@html} accessibility | High | 4.1.1 | Raw HTML injection may be inaccessible |
| Feature | Free | Pro ($19/user/mo) | Team ($39/user/mo) |
|---|---|---|---|
| One-shot accessibility scan | 5 files | Unlimited | Unlimited |
| 95+ detection patterns | Yes | Yes | Yes |
| Auto-detect file types | Yes | Yes | Yes |
| Pre-commit hooks | Yes | Yes | |
| Accessibility reports | Yes | Yes | |
| Deep accessibility audit | Yes | Yes | |
| Policy enforcement | Yes | ||
| WCAG compliance reports | Yes | ||
| SARIF output | Yes | ||
| CI/CD integration | Yes |
Add to ~/.openclaw/openclaw.json:
{
"skills": {
"entries": {
"accesslint": {
"enabled": true,
"apiKey": "YOUR_LICENSE_KEY",
"config": {
"severityThreshold": "high",
"wcagLevel": "AA",
"customPolicies": [
{
"regex": "<img[^>]*(?!alt=)",
"severity": "critical",
"description": "All images must have alt attributes"
}
],
"excludePatterns": ["**/test/**", "**/examples/**"]
}
}
}
}
}AccessLint is part of the ClawHub quality suite:
- EnvGuard -- Pre-commit secret detection
- DepGuard -- Dependency vulnerability scanning
- ConfigSafe -- Infrastructure configuration auditing
- APIShield -- API security scanning
- SQLGuard -- SQL query safety & injection risk scanning
- AccessLint -- Web accessibility & WCAG compliance scanning
- 100% local -- no code sent externally
- Zero telemetry
- Offline license validation
- Pattern matching only -- no AST parsing, no external dependencies
MIT