a11y-kit
The accessibility semantics layer for the estate — the keystone nobody in the ecosystem funds (ADR-0004 §2; measured Oct 2026: AccessKit runs on one maintainer's spare time, has no web adapter, and no project ships an a11y CI gate).
use ;
let mut tree = new;
let window = tree.push;
let toolbar = tree.push;
tree.push;
assert!;
The gate
tree.audit() enforces five rules headlessly in CI:
- ids are unique;
- parents and relation targets resolve;
- no parent cycles;
- every interactive role carries an accessible name;
- at most one focused node, and it lives inside a
Windowsubtree — the "focus is somewhere the screen reader can't see" bug.
Every failure names the node (AuditError::MissingAccessibleName(NodeId(5))),
because a gate that cannot be acted on is not a gate.
Properties
- L1 substrate — dependency-free by default (
thiserroronly); AccessKit transport conversion lands behind theaccesskitfeature (Wave 2.1) so the audit layer stays headless and any CI can run it. - Toolkits lower into this model; none of them own the gate.
Licensed under MIT OR Apache-2.0.