Scanners
Which engines Equall aggregates, what they cover, and when to opt out.
Equall ships four scanners, all enabled by default. They run in parallel per file; failures in one scanner never affect the others. A scanner that fails is reported on diagnostics and its criteria are not credited as tested. A file a scanner could not parse or analyse is listed on unchecked (see Output format) instead of passing silently.
When two engines flag the same problem on the same element — a missing alt is both axe-core's image-alt and eslint's alt-text — the findings are merged into a single issue instead of being counted twice. The merged issue keeps the source line and credits every agreeing engine in its scanners field; the fingerprint of the absorbed finding is kept on merged_fingerprints. Merging is deliberately conservative: when several occurrences in a file make the match ambiguous, both findings are kept — over-counting is visible, dropping a real finding would not be.
axe-core
Covers: most of the WCAG Level A and AA rules that can be checked on static HTML: ARIA validity, accessible names, form labels, landmark structure, image alt text. Color contrast is not checked: without a rendered page there is no resolved CSS, so 1.4.3 is reported as "Not evaluated — assisted", like 1.4.1 and 2.5.8, which need the layout.
Runs on: .html, .htm, and extracted HTML from JSX/TSX/Vue/Svelte/Astro. On component files, a finding on an element whose name or content depends on props, runtime expressions or a component is reported for review, not counted.
Why bundled: the de facto standard for automated a11y testing — same engine Deque's own tools use.
eslint-plugin-jsx-a11y
Covers: component-level rules for React JSX and TSX — things like alt-text, anchor-is-valid, click-events-have-key-events.
Runs on: .jsx, .tsx, .astro. On .astro it reads the template through the Astro parser, so the same jsx-a11y rules catch component-pattern issues axe misses. It does not run on .vue or .svelte.
Note: on TSX files without @typescript-eslint/parser, this scanner returns zero issues. Equall bundles the parser automatically.
readability
Covers: WCAG 3.1.5 Reading Level (AAA). Uses the Flesch-Kincaid grade formula via text-readability.
Runs on: .html, .vue, and .astro files with readable prose content.
⚠ English-only. The formula is calibrated on English corpora. Files whose <html lang="..."> attribute is set to a non-English language are skipped automatically — they don't contribute issues, but they also don't lower coverage.
Disable globally: --no-readability opts out entirely. Useful for non-English projects that don't want the disclaimer message.
error-identification
Covers: WCAG 3.3.1 (Error Identification) and 3.3.3 (Error Suggestion). Checks forms for proper labels, error feedback, and required-field semantics.
Runs on: .html, .vue, .svelte, .astro.
Opting out
The generic disableScanners option in RunScanOptions accepts a list of scanner names. The CLI currently exposes this via --no-readability; future scanner-specific flags will follow the same --no-<name> convention (commander's --no-* pattern).