Skip to content

Commit 52cc0db

Browse files
committed
List AccessLint-only checks and tighten wording in comparison doc
1 parent 296fa7e commit 52cc0db

1 file changed

Lines changed: 19 additions & 10 deletions

File tree

‎AXE_VS_ACCESSLINT.md‎

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# axe vs. AccessLint
22

3-
The a11y scanner ships two built-in scan engines: [axe-core](https://github.com/dequelabs/axe-core) (the default) and [AccessLint](https://github.com/AccessLint/accesslint), a newer, lightweight ruleset. Both run against the live page, report WCAG violations, and share a large core of checks. axe is the mature, well-documented baseline; AccessLint adds extra WCAG 2.2 and best-practice checks. This doc explains what AccessLint adds and which combination to pick.
3+
The a11y scanner ships two built-in scan engines: [axe-core](https://github.com/dequelabs/axe-core) (the default) and [AccessLint](https://github.com/AccessLint/accesslint), a newer, lightweight ruleset. Both run against the live page and report WCAG violations, and the two mostly overlap. axe is the mature, well-documented baseline; AccessLint adds a small set of checks axe doesn't run by default. This doc covers what's different and which to enable.
44

55
> 👉 Pick engines with the `scans` input. They run independently and file their findings as separate issues.
66
@@ -9,14 +9,14 @@ The a11y scanner ships two built-in scan engines: [axe-core](https://github.com/
99
| `scans` | Runs | Best when |
1010
| ------------------------ | --------------- | -------------------------------------------------------------------------------------------------- |
1111
| _(omitted)_ or `["axe"]` | axe only | the mature default; lowest noise |
12-
| `["accesslint"]` | AccessLint only | you want its newer ruleset without axe's duplicates, but you give up axe's maturity and Deque docs |
12+
| `["accesslint"]` | AccessLint only | you want AccessLint's extra checks without axe's duplicates, but you give up axe's maturity and Deque docs |
1313
| `["axe","accesslint"]` | both | maximum coverage, at the cost of duplicate findings |
1414

1515
## At a glance
1616

1717
| | axe-core | AccessLint |
1818
| ----------------- | --------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
19-
| **Strength** | Mature, widely adopted, well-documented baseline | Lightweight second pass with newer WCAG 2.2 and best-practice checks |
19+
| **Strength** | Mature, widely adopted, well-documented baseline | Lightweight second pass; adds a few checks axe doesn't run by default |
2020
| **Coverage** | WCAG 2.0/2.1/2.2 (A/AA/AAA) tags plus best practices; some 2.2 rules are off by default | WCAG 2.2 A/AA plus best-practice rules |
2121
| **Per-rule docs** | Deque University help URL on every finding | Rule IDs + messages; less rich public per-rule docs |
2222
| **Main risk** | Doesn't catch every WCAG issue automatically (~57%) | Newer and less battle-tested; smaller ecosystem |
@@ -25,12 +25,21 @@ Both cover the same large core: alt text, link/button names, form labels, ARIA v
2525

2626
## What AccessLint adds
2727

28-
AccessLint includes checks that may not be surfaced by the scanner's default axe configuration, including some WCAG 2.2 and best-practice checks. Findings link to the [AccessLint rules reference](https://github.com/AccessLint/accesslint/blob/main/core/README.md#rules-1). Examples:
28+
The engines share most of their rules (AccessLint ships ~93, axe ~104, and the bulk map to the same checks). Measured against the scanner's **default** axe run, these are the only AccessLint checks with no axe rule that fires. See the [AccessLint rules reference](https://github.com/AccessLint/accesslint/blob/main/core/README.md#rules-1) for the full catalog.
2929

30-
- **Focus Visible (2.4.7)** — focusable elements without a visible focus indicator.
31-
- **Orientation (1.3.4)** — pages locked to a single screen orientation.
32-
- **Accessible Authentication (3.3.8)** — password fields that block password managers / paste.
33-
- **Audio transcript (1.2.1)** — `<audio>` without a text alternative.
34-
- Best-practice extras such as generic alt wording ("image", "photo") and paragraphs styled to look like headings.
30+
**No axe rule covers these:**
3531

36-
axe has its own 2.1/2.2 and best-practice rules too (for example `avoid-inline-spacing` for text spacing), so expect overlap rather than a clean split.
32+
- **Visible focus indicator** (2.4.7 AA) — `keyboard-accessible/focus-visible`: focusable elements must show a visible focus indicator.
33+
- **Accessible authentication** (3.3.8 AA) — `input-assistance/accessible-authentication`: password fields must not block password managers / paste.
34+
- **Generic alt wording** — `text-alternatives/image-alt-words`: alt text shouldn't be "image", "photo", etc. (axe only flags alt that _duplicates adjacent text_).
35+
- **Presentational element with focusable children** — `aria/presentational-children-focusable` (adjacent to axe's `presentation-role-conflict`, but a separate check).
36+
37+
**axe has the rule, but only as _experimental_, so the scanner's default run skips it:**
38+
39+
- **Orientation lock** (1.3.4 AA) — `adaptable/orientation-lock` ↔ axe `css-orientation-lock`.
40+
- **Paragraph styled as a heading** — `navigable/p-as-heading` ↔ axe `p-as-heading`.
41+
- **Accessible name missing visible label text** (2.5.3) — `labels-and-names/label-content-mismatch` ↔ axe `label-content-name-mismatch`.
42+
- **Focusable element without a semantic role** — `keyboard-accessible/focus-order` ↔ axe `focus-order-semantics`.
43+
- **Large-table data cell without a header** — `adaptable/td-has-header` ↔ axe `td-has-header`.
44+
45+
Everything else overlaps. Even where rule IDs differ the checks coincide — e.g. 1.4.12 text spacing (axe's single `avoid-inline-spacing` vs AccessLint's `letter-spacing` / `line-height` / `word-spacing`) and 1.2.1 audio (axe `audio-caption` vs AccessLint `audio-transcript`).

0 commit comments

Comments
 (0)