xa11y
A Playwright-style library for driving native desktop apps on macOS, Windows, and Linux. Built for end-to-end tests, computer-use agents, and assistive tools.
Use cases: end-to-end desktop testing, computer-use agents, MCP tools, assistive technology.
Documentation | Rust API | Python API
Quick Example
use *;
use Duration;
Installation
[]
= "0.12"
On macOS, grant your terminal two permissions in System Settings > Privacy & Security:
- Accessibility, required for all accessibility API access.
- Screen & System Audio Recording (macOS 26+), required to read window content. Without it, only menu bars are visible.
Restart your terminal after changing permissions.
On Linux, AT-SPI2 must be running (the default on GNOME and most desktop environments). Nothing else to grant.
Windows works as installed.
Selector Syntax
Query accessibility trees with CSS-like selectors:
| Pattern | Meaning |
|---|---|
button |
Elements with role Button |
button[name='OK'] |
Button named exactly "OK" |
textfield[name^='Search'] |
Text field whose name starts with "Search" |
textfield[name*='email'] |
Text field whose name contains "email" |
group > button |
Buttons that are direct children of a group |
window button |
Buttons anywhere inside a window |
button:nth(2) |
The 2nd button match |
Supported Actions
| Action | Description |
|---|---|
press |
Click / activate |
focus / blur |
Move or remove keyboard focus |
toggle |
Toggle a checkbox or switch |
expand / collapse |
Expand or collapse a disclosure |
select |
Select an item |
set_value |
Set a text field's value |
type_text |
Type text into an element |
increment / decrement |
Adjust a slider or stepper |
show_menu |
Open a context menu |
Platform Support
| Platform | Backend |
|---|---|
| macOS | AXUIElement |
| Linux | AT-SPI2 (D-Bus) |
| Windows | UI Automation |
Contributing
&&
See the development docs for architecture and setup.
License
MIT. All dependencies are permissively licensed (MIT, Apache-2.0, BSD, or similar), enforced via cargo-deny.