Architecture
How Relief gets from Chromium’s accessibility tree to an action and back.
Pipeline
- Chromium computes the accessibility tree of each frame: roles, names, states, actions, positions. Relief does not build a second tree from the DOM.
- Fork adapter (C++, in Relief’s own directory) observes the accessibility updates of each tab in the browser process and keeps its own copy per frame. It does not switch on the operating system’s accessibility bridge; screen readers keep their own path.
- Bridge hands every update as a compact delta to the Rust runtime.
- Semantic model (Rust, browser-free): nodes with provenance, the page type, functional groups, the primary action and modal state per frame.
- Interaction (Rust, browser-free): parses a command, resolves the target, rates the risk and produces a validated action plan.
- Back into Chromium: the plan becomes an accessibility action on the node. Relief checks the effect in the next update instead of assuming it.
Why this way
- The accessibility tree already contains what assistive technology needs. Building on it keeps Relief consistent with what screen readers get.
- A small patch set keeps the fork maintainable across Chromium releases.
- A browser-free core can be tested without a browser, against recorded pages, and shared with other accessibility tools.
Shared building blocks
Relief uses the accessibility crates of barrierlab — perception of the tree, accessible-name computation, rules and reports — and contributes back what a second tool needs as well.