1 unstable release
Uses new Rust 2024
| 0.1.0 | Apr 13, 2026 |
|---|
#15 in Accessibility
34KB
597 lines
axl
axl is a Rust workspace for accessibility linting of JSX/TSX code.
Current v0.2 focus:
- runnable CLI (
axl_cli) - parser/discovery pipeline (
axl_parser) - shared diagnostics/rule engine interfaces (
axl_core) - initial ARIA/name/focus rules (
axl_rules,axl_aria) - early contrast and pattern analysis scaffolding (
axl_contrast,axl_patterns)
Workspace crates
axl_cli: command line entry point and output formattingaxl_parser: TSX/JSX target collection and OXC parse validationaxl_core: shared lint data model (Diagnostic,Rule,Severity, etc.)axl_aria: ARIA role and accessible-name helpersaxl_rules: active lint rules and rule registryaxl_config:axl.config.jsonloadingaxl_contrast: WCAG contrast math and color helpers (scaffold)axl_patterns: UI pattern detector API + dialog placeholder (scaffold)
Quick start
Requirements:
- Rust toolchain (
cargo)
Run checks:
cargo test
Detailed docs:
docs/testing.mddocs/publishing.md
Lint current directory:
cargo run -p axl_cli -- .
JSON output:
cargo run -p axl_cli -- . --format json
Filter categories:
cargo run -p axl_cli -- . --only roles,naming,focus
Use explicit config path:
cargo run -p axl_cli -- src --config axl.config.json
Apply basic autofix (currently focus/tabindex-positive only):
cargo run -p axl_cli -- . --fix
Current implemented rules
roles/abstract-role-usage(error)naming/empty-accessible-name(error)focus/tabindex-positive(warning)
Configuration
axl loads axl.config.json by default (or the file from --config).
Supported top-level fields (minimal v0.1 support):
extends: string arraycomponents: object maprules: object mapignore: glob patterns to skip files
Example:
{
"extends": ["recommended"],
"components": {
"Link": "a"
},
"rules": {
"focus/tabindex-positive": "warn"
},
"ignore": ["**/*.test.tsx"]
}
Scope limitations (v0.2)
- no full AccName 1.2 implementation
- no context-dependent implicit role algorithm
- no CSS parsing/resolution
- no cross-file component tree analysis
- limited autofix scope (currently
focus/tabindex-positiveonly)
Dependencies
~19MB
~335K SLoC