Fork of github.com/odilia-app/atspi with Tilo patches (branches optional-async-io*)
  • Rust 98.9%
  • Shell 0.6%
  • Python 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Arnold Loubriat 1bb087c019
Some checks failed
CI / find-msrv (push) Successful in 11s
CI / typos (push) Successful in 24s
CI / rustfmt (push) Successful in 25s
CI / check-true-minimal-versions (push) Successful in 27s
CI / run-test-atspi-p2p (push) Failing after 55s
CI / cargo-deny (push) Failing after 51s
CI / no-unused-dependencies (push) Successful in 50s
CI / wasm-compatible-common-crate (push) Successful in 1m2s
CI / nightly Clippy (push) Failing after 1m35s
CI / benchmarks (push) Has been skipped
CI / tests (push) Has been skipped
CI / rustdoc (push) Has been skipped
CI / semver-compliance (push) Has been skipped
CI / msrv-compliance (push) Has been skipped
CI / coverage (push) Has been skipped
Bump the minimum supported Rust version to 1.87.0 (#380)
2026-07-27 05:53:50 -06:00
.githooks CI: Add git hooks (#303) 2025-09-13 16:11:29 +02:00
.github/workflows ci: Optimize test-atspi-p2p duration. (#375) 2026-07-04 08:42:30 -06:00
atspi Bump crate versions (#366) 2026-06-29 11:57:42 -06:00
atspi-common Make zbus-lockstep a dev dependency (#377) 2026-07-06 21:46:34 +02:00
atspi-connection Bump crate versions (#366) 2026-06-29 11:57:42 -06:00
atspi-proxies Bump crate versions (#366) 2026-06-29 11:57:42 -06:00
.gitignore Feature: Peer-to-Peer for atspi. (#267) 2025-07-29 16:25:22 +02:00
.gitmessage CI(all): add git commit template (#305) 2025-09-24 22:29:09 +02:00
Cargo.lock deps: crossbeam-epoch 0.9.18 -> 0.9.20 (#379) 2026-07-08 19:26:32 +02:00
Cargo.toml Bump the minimum supported Rust version to 1.87.0 (#380) 2026-07-27 05:53:50 -06:00
codecov.yml ci: add codecov gates to stop minor PRs from tripping (#370) 2026-06-29 08:28:48 -06:00
deny.toml build: Ensure reproducible builds (#276) (#279) 2025-07-15 14:29:36 -06:00
LICENSE-APACHE2.txt Add licenses 2022-11-22 18:59:45 -07:00
LICENSE-MIT.txt Add licenses 2022-11-22 18:59:45 -07:00
README.md refactor(proxies): fix interface defaults, overhaul proxy docs and deprecate legacy interfaces (#348) 2026-06-12 11:59:26 +02:00
RELEASE-CHECKLIST.md Add initial release checklist 2023-08-02 14:46:36 -06:00
rustfmt.toml build: Ensure reproducible builds (#276) (#279) 2025-07-15 14:29:36 -06:00
type_validation.md feat(common): zero-copy AT-SPI2 event bodies during user facing event conversion (#230) 2025-03-28 15:35:18 +01:00
UPDATE_LOG.md docs: fix typos 2026-06-27 10:29:53 -06:00

AT-SPI for Rust

crates.io badge docs.rs badge CI badge Code coverage badge

Higher level, asynchronous, pure Rust AT-SPI2 protocol implementation using zbus.

Part of the Odilia screen reader project.

Design

  • Fully documented, with #[deny(missing_docs)]
  • Or at least, it will be by 1.0
  • Fully safe, with #[deny(unsafe_code)]
  • Fantastic code style with #[deny(clippy:all, clippy::pedantic, clippy::cargo)]

This crate makes use of the zbus crate for dbus communication. We use the asynchronous zbus API, so to use atspi, you will need to run an async executer like tokio or smol.

Feature Flags

Flag Default Description
proxies Yes Re-exports the atspi-proxies crate, letting you actively communicate with (query) D-Bus.
connection Yes Re-exports the atspi-connection crate, providing convenient abstractions over D-Bus for receiving. Note that active queries still require proxies.
p2p Yes Extends AccessibilityConnection with peer-to-peer capabilities: direct, per-application connections that bypass the bus for queries. Events remain bus broadcasts.
wrappers Yes Enables the event wrapper enums (e.g. Event, ObjectEvents) and the conversions between the generic Event type and the user-facing event structs.
tokio No Enables support for the tokio runtime. Rather than starting its own runtime, zbus spawns its task on the host runtime.
tracing No Enables support for the tracing logger.
x11-legacy No Enables the deprecated X11-era interfaces DeviceEventController and DeviceEventListener.

Note: atspi is not compatible with the glommio runtime, as it uses its own types unrelated to how other runtimes work. (PRs welcome!)

D-Bus type validation

Atspi is used to send and receive data to and from applications. Sender and recipient need to agree on the shape of the data type for fruitful communication. Our best bet is to keep our types in sync with the protocol descriptions.

We employ zbus-lockstep to match types against those defined in the AT-SPI2 protocol descriptions.

Not all types can be validated (easily) with zbus_lockstep because types may not exist in the protocol descriptions, for example because they are deprecated (but still in use) or we have chosen a different representation.

A (partial) review of type validation may be found here

Contributing

This repository offers contributors hooks and a commit message template. We kindly request contributors to set both up locally.

git hooks

This repository offers basic pre-commit and pre-push scripts in the .githooks directory. This command will configure git to use the hooks from the .githooks directory for this repository.

git config core.hooksPath .githooks

git commit message template

The git commit message template helps contributors follow conventional commits for atspi. This command will configure git to use the commit message template from the .gitmessage file for this repository.

git config commit.template .gitmessage

License

The atspi library is licensed as Apache 2.0 or MIT.