Expand description
§axuielement
Safe Rust bindings for Apple’s AXUIElement Accessibility API on macOS.
Status: v0.9 adds an optional executor-agnostic
async_apimodule forAXObservernotifications while keeping the Wave-C Swift bridge over the C Accessibility APIs and coverage across the crate’s ten logical areas:AXUIElement,AXObserver,AXValue,AXTextMarker,AXAttribute,AXAction,AXNotification,AXError,SystemWide, andProcessTrust.
§Quick start
use axuielement::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let Some(system) = system_wide() else {
eprintln!("no system-wide accessibility object");
return Ok(());
};
println!("api_enabled = {}", api_enabled());
println!("is_trusted = {}", is_process_trusted());
if let Some(app) = system.focused_application()? {
println!("focused pid = {}", app.pid()?);
println!("focused attrs = {:?}", app.attribute_names()?);
}
if let Some(focused) = system.focused_ui_element()? {
println!("role = {:?}", focused.string_attribute(axuielement::ax_attribute::AX_ROLE_ATTRIBUTE)?);
println!("title = {:?}", focused.string_attribute(axuielement::ax_attribute::AX_TITLE_ATTRIBUTE)?);
println!("actions = {:?}", focused.action_names()?);
}
Ok(())
}§Covered areas
AXUIElementcreation, attribute reads/writes, hit-testing, batch fetches, parameterized attributes, action metadata, and keyboard-event shims.AXObservercreation, add/remove notification registration, run-loop scheduling, info-dictionary callbacks, andasync_api::AXNotificationStream.AXValueround-tripping for strings, booleans, numbers,CGPoint,CGSize,CGRect,CFRange,AXError, arrays, dictionaries, and binary payloads.AXTextMarkerandAXTextMarkerRangecreation plus byte round-trips.- Generated constant modules for attributes, actions, notifications, roles, subroles, menu-item modifiers, and value constants.
SystemWideElementconvenience helpers for focused application/window/UI-element lookups.ProcessTrusthelpers for API-enabled checks and trust queries.
See COVERAGE.md for the audited SDK surface.
§Raw FFI
The original raw C declarations remain available behind the raw-ffi Cargo feature:
axuielement = { version = "0.9", default-features = false }
# or keep the default `raw-ffi` feature enabled for `axuielement::ffi`The safe API always talks to the Swift bridge. The raw-ffi feature exists for direct low-level interop and compatibility.
§Permissions
Most runtime messaging requires Accessibility permission (System Settings → Privacy & Security → Accessibility). Without it, many calls return AXError::APIDisabled or AXError::CannotComplete.
§Async notifications
Enable the async Cargo feature to use axuielement::async_api::AXNotificationStream, which wraps AXObserver notifications in an executor-agnostic bounded async stream.
axuielement = { version = "0.9", features = ["async"] }§Examples and tests
examples/01_axuielement_basic.rsexamples/02_axobserver_basic.rsexamples/03_axvalue_roundtrip.rsexamples/04_axtextmarker_roundtrip.rsexamples/05_axattribute_catalog.rsexamples/06_axaction_catalog.rsexamples/07_axnotification_catalog.rsexamples/08_axerror_catalog.rsexamples/09_system_wide_snapshot.rsexamples/10_process_trust_status.rsexamples/11_async_notification_stream.rs(requires--features async)
The test suite includes one smoke file per logical area plus the raw-FFI coverage harness.
§License
Licensed under either Apache-2.0 or MIT at your option.
§API documentation
Safe Rust bindings for Apple’s
AXUIElement
Accessibility API on macOS — read attributes, list children, perform
actions, work with text markers, and subscribe to notifications on other
applications’ UIs.
Re-exports§
pub use ax_error::AXError;pub use ax_notification::AXPriority;pub use ax_observer::run_current_run_loop;pub use ax_observer::stop_current_run_loop;pub use ax_observer::AXObserver;pub use ax_observer::AXObserverEvent;pub use ax_text_marker::AXTextMarker;pub use ax_text_marker::AXTextMarkerRange;pub use ax_ui_element::AXCopyMultipleAttributeOptions;pub use ax_ui_element::AXElement;pub use ax_ui_element::AXUIElement;pub use ax_value::AXPoint;pub use ax_value::AXRange;pub use ax_value::AXRect;pub use ax_value::AXSize;pub use ax_value::AXValue;pub use ax_value::AXValueKind;pub use process_trust::api_enabled;pub use process_trust::is_process_trusted;pub use process_trust::is_process_trusted_with_options;pub use process_trust::is_process_trusted_with_prompt;pub use process_trust::make_process_trusted;pub use process_trust::ProcessTrustOptions;pub use system_wide::system_wide;pub use system_wide::SystemWideElement;
Modules§
- async_
api async - Executor-agnostic async streams for Accessibility notifications.
- ax_
action - Standard Accessibility action constants.
- ax_
attribute - Accessibility attribute, role, subrole, and value constants.
- ax_
error - Errors returned by the
axuielementcrate. - ax_
notification - Accessibility notification constants and priorities.
- ax_
observer AXObservernotification support.- ax_
text_ marker - Safe wrappers for
AXTextMarkerandAXTextMarkerRange. - ax_
ui_ element - Safe wrapper for
AXUIElement. - ax_
value - Generic Accessibility values plus typed geometry helpers.
- element
- Compatibility shim re-exporting the v0.6 element APIs.
- error
- Compatibility shim re-exporting the v0.6
AXErrormodule. - ffi
raw-ffi - Raw FFI declarations for
AXUIElement(Apple’s Accessibility API). - observer
- Compatibility shim re-exporting the v0.6 observer APIs.
- prelude
- Common imports.
- process_
trust - Accessibility process-trust helpers.
- system_
wide - System-wide Accessibility helpers.