eslint-plugin-jsx-a11y

Static ESLint rules that catch JSX accessibility issues before code ships.

Tool
npm
v6.10.2
3,621 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
56 /100 Fair
Development Activity 0
Maintenance 44
Community 80
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
83 /100 Excellent
Architecture 78
Code Quality 78
Innovation 85
Learning Curve 90

eslint-plugin-jsx-a11y is an ESLint plugin providing 39 lint rules that statically analyze JSX for accessibility violations — missing alt text, invalid ARIA roles and props, keyboard-inaccessible interactive elements, and more — directly in the editor and CI, long before a page ever renders.

Widely adopted across the React ecosystem (bundled into eslint-config-airbnb and historically part of Create React App’s default config), it models the WAI-ARIA role and element interaction matrix in pure AST analysis, supports both legacy .eslintrc and flat ESLint config formats, and lets teams enable an entire recommended or strict ruleset with a single config line.

What You Get

  • 39 accessibility lint rules covering ARIA roles/props, alt text, keyboard interaction, labels, language attributes, and more
  • Prebuilt “recommended” and “strict” rule presets for both flat config (eslint.config.js) and legacy .eslintrc setups
  • Per-rule documentation pages under docs/rules/ with rationale, configurable options, and pass/fail code examples
  • Configurable settings for mapping custom components (e.g. a wrapped <Button>) to their native HTML element semantics

Common Use Cases

  • React app accessibility gate in CI — a team adds plugin:jsx-a11y/recommended to fail pull requests when JSX is missing an accessible name or keyboard handler
  • Design-system component audits — mapping custom <IconButton>/<NavLink> wrappers to their native element via the components setting so they get linted like real HTML
  • Legacy codebase remediation — running the plugin without the recommended preset first, then fixing violations rule-by-rule
  • Cross-ESLint-version monorepos — packages still on legacy .eslintrc and others migrated to flat config both lint consistently since the plugin ships both formats

Under The Hood

Architecture The entry point (src/index.js) aggregates every rule module from src/rules/*.js into a flat allRules map, then exports both a legacy config (configs/legacy-config-base.js) and a flat config (configs/flat-config-base.js) so the plugin works across ESLint’s config formats and major versions (3 through 9). Each rule is a self-contained module implementing ESLint’s meta + create(context) visitor interface, and nearly all of them lean on a shared layer of utility modules under src/util/ — getElementType, isInteractiveElement, getImplicitRole, isHiddenFromScreenReader, and similar helpers — that encode JSX/ARIA semantic knowledge once and reuse it everywhere; this utility layer is the load-bearing abstraction, since changing it would ripple through most of the 39 rules. Configuration (polymorphicPropName, components, attributes) flows through ESLint’s context.settings, keeping rule modules stateless and purely functional.

Tech Stack Plain JavaScript (no TypeScript), built via Babel (@babel/cli, babel-preset-airbnb) into lib/ for publishing. Runtime dependencies include jsx-ast-utils and ast-types-flow for AST attribute inspection, aria-query and axobject-query for ARIA semantics tables, an embedded axe-core reference for its ruleset knowledge, language-tags for lang validation, damerau-levenshtein for typo suggestions, and a set of ES-spec polyfills (array-includes, array.prototype.flatmap, object.fromentries, string.prototype.includes, safe-regex-test) consistent with the Airbnb ecosystem’s conventions. It peer-depends on eslint across a wide version range and optionally types some internals with Flow. CI runs via GitHub Actions.

Code Quality Tests run on tape (not Jest or Mocha) through a custom __tests__/__util__/RuleTester.js wrapper around ESLint’s own RuleTester, paired with parserOptionsMapper and ruleOptionsMapperFactory helpers that replay each rule’s test cases across multiple parsers (default espree, babel-eslint, TypeScript) and both legacy/flat config shapes — a deliberately engineered harness given the combinatorial surface of 39 rules times several parser and option variants. Coverage is tracked via Coveralls. Errors surface through ESLint’s own context.report() diagnostic mechanism rather than thrown exceptions. The project lints itself with eslint-plugin-eslint-plugin, and CI runs lint, Flow, unit tests, and example-project checks on every push.

What Makes It Unique Rather than a generic linter, it encodes the WAI-ARIA role/element interaction matrix precisely enough in pure static analysis to catch cases like a <div role="button"> that isn’t focusable or lacks an accessible name — without ever touching a rendered DOM. Its public API favors low ceremony: adding a single extends line enables an entire curated ruleset, rule ids are consistently namespaced and documented, and both legacy and flat ESLint configs are supported so adoption doesn’t require a config rewrite.

Used by 65 apps in this directory

TypeScript
100%
Other

Activepieces

AI Assistants · Automation · Mcp

24,756

Open-source AI automation platform that converts 280+ workflow integrations into MCP servers for LLMs, with no-code builders and TypeScript extensibility.

View details
92
Repo Health
85
Technical
64
Dependency
Built with
TypeScript 100%
Updated 1 weeks ago
Python
99%
MIT

Agent Lightning

AI Development

18,515

A Microsoft-built training framework that optimizes AI agents with reinforcement learning, automatic prompt optimization, or supervised fine-tuning — with near-zero code changes to your existing agent, in any framework.

View details
85
Repo Health
68
Technical
69
Dependency
Built with
Python 99%
Updated 1 weeks ago
Python
89%
Apache 2.0

Apache Airflow

Data Engineering

46,995

Define, schedule, and monitor complex data workflows as Python code — with a powerful UI, 80+ provider integrations, and battle-tested scalability across thousands of production deployments.

View details
96
Repo Health
89
Technical
64
Dependency
Built with
Python 89%
Updated 1 weeks ago
TypeScript
72%
AGPL 3.0

APITable

Databases · Low Code Platforms

15,623

API-first collaborative spreadsheet-database platform that auto-generates REST APIs and lets teams build internal tools, CRMs, and dashboards without code.

View details
71
Repo Health
77
Technical
60
Dependency
Built with
TypeScript 72%
Java 22%
Updated 1 months ago
TypeScript
96%
Other

Amplication

AI Code Assistants · Automation · Developer Tools

16,015

Create production-ready backend services with your organization's standards baked in — generating NestJS, Prisma, and GraphQL code that you own and control.

View details
58
Repo Health
84
Technical
60
Dependency
Built with
TypeScript 96%
Updated 3 months ago
Go
61%
Apache 2.0

Apache Answer

Community

15,683

Open-source Q&A platform for communities, help centers, and knowledge bases with AI assistant and plugin extensibility

View details
90
Repo Health
78
Technical
68
Dependency
Built with
Go 61%
TypeScript 36%
Updated 2 weeks ago
TypeScript
99%
Apache 2.0

Bubble Lab

AI Development · Automation

1,094

Open-core workflow engine for building AI-powered automations in TypeScript that run natively inside Slack — no context switching required.

View details
35
Repo Health
78
Technical
71
Dependency
Built with
TypeScript 99%
Updated 5 months ago
Rust
67%
MIT

Bun

Developer Tools

96,068

An all-in-one JavaScript and TypeScript toolkit — one Rust-and-JavaScriptCore binary that replaces Node.js, npm, a bundler, and a test runner with faster equivalents.

View details
92
Repo Health
91
Technical
64
Dependency
Built with
Rust 67%
C++ 19%
TypeScript 10%
Updated 1 weeks ago
TypeScript
53%
Other

Chaskiq

CRM · Customer Support

3,574

Self-hosted live chat, video calls, help center, and marketing automation — a full-stack Intercom alternative you run on your own infrastructure.

View details
57
Repo Health
66
Technical
66
Dependency
Built with
TypeScript 53%
Ruby 36%
Updated 3 months ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers