Target matrix
Supported screen reader engines
virtual Headless & In-process (Cross-platform). A complete software screen reader
engine that computes the ARIA accessibility tree
and announcement sequence in memory or headless Chromium. Requires zero system permissions,
operates identically across macOS, Windows, and Linux, and executes in milliseconds inside unit tests or CI pipelines.
voiceover macOS Native Assistive Technology. Automates Apple's built-in VoiceOver through
AppleScript and Guidepup.
Interacts with the real operating system accessibility API and can record synchronized video to .mov files.
nvda Windows Open-Source Assistive Technology. Automates the NVDA screen
reader on Windows through Guidepup and native platform hooks. Captures spoken speech output and supports .mp4 screen recording.
Every response from an a1 sr command includes precise provenance metadata:
target: The requested engine (virtual,voiceover, ornvda).targetType:realfor native OS screen readers orsimulatedfor virtual mode.engine: For virtual sessions, reportsbrowser(headless Chromium running live client JavaScript) orjsdom(in-memory DOM).
Automation defaults
Target selection & fallback hierarchy
When you invoke a1 sr start without specifying an explicit --sr flag,
a11ied intelligently selects the appropriate target based on your current operating system
and environment readiness:
- Platform detection: On macOS, it defaults to
voiceover. On Windows, it defaults tonvda. On Linux, CI containers, and Docker environments, it defaults tovirtual. - Readiness check: If native VoiceOver or NVDA is detected but
a1 doctorreports that required system permissions or preference bundles are missing (requires-setup), the session automatically falls back tovirtual. - Transparent notice: When a fallback occurs,
a11iedemits a clear warning in the output stating that a virtual simulation ran rather than native assistive technology, along with thea1 doctorcommand to configure native support.
Headless simulation
Virtual screen reader
The virtual screen reader is engineered for maximum speed and deterministic reproducibility. Because native screen readers take control of system focus and audio, running them in automated watch loops or shared CI workers is often impractical.
When starting a virtual session explicitly on macOS or Windows, pass --sr virtual:
a1 sr start --sr virtual http://localhost:3000/checkout Execution modes:
- Browser engine (Default for URLs): When passed an HTTP/HTTPS URL, the virtual reader spins up a headless Chromium instance. All client-side JavaScript, custom elements, CSS transitions, and dynamic DOM mutations (such as modal popups and live status updates) execute exactly as they do in production.
- JSDOM engine (In-memory testing): When testing raw HTML strings or running isolated unit tests without a local web server, the virtual reader operates in-memory using jsdom for sub-millisecond execution.
Because the virtual engine requires no audio hardware and produces structured JSON logs, it is the primary target used by AI coding assistants via the Model Context Protocol (MCP) server.
Operating system fidelity
Real OS screen readers (VoiceOver & NVDA)
Real screen readers interact directly with the operating system's accessibility tree and speech synthesizer.
When you start a session targeting voiceover or nvda, a11ied launches
your system browser, brings its window to the foreground, and attaches Guidepup automation:
a1 sr start --sr voiceover http://localhost:3000/checkout
a1 sr next Window management: If you switch windows while inspecting tests, run a1 sr focus
to restore the test browser to the foreground. You can also target specific processes using --app,
--bundle-id, --process, or --window-title.
One-time machine setup: Before running native screen readers for the first time,
run a1 setup to install necessary preference bundles and verify OS permissions:
a1 setup On macOS, this enables AppleScript control within VoiceOver settings and installs the Guidepup testing preferences bundle. To record video demonstrations of tests in action, grant Screen Recording permissions to your terminal or host app in macOS System Settings. See the recording guide.
VoiceOver command sets: When controlling VoiceOver, a11ied defaults to
semantic VoiceOver Commander commands (direct AppleScript IPC, layout-independent, fast and deterministic),
while also supporting physical VoiceOver Keycodes (OS-level simulated modifier chords).
See the VoiceOver Commander vs. Keycodes guide for an in-depth comparison.
Architecture guide
Choosing the right target
a11ied/vitest; running pull request validation in Linux CI/CD pipelines;
running fast TDD watch loops during development; or connecting AI coding agents via MCP.
Virtual testing is instantaneous, headless, and identical across developer machines.
