As a response to BreadX, here is something even more powerful: x11rb
- x11rb supports all the X11 extensions for which the libxcb project provides XML project (BreadX so far only supports the core X11 protocol that is older than I am)
- Basically: All X11 extensions that are still relevant are supported
- x11rb can be used as 100% safe Rust (with
- When the
allow-unsafe-codefeature is enabled (which it is by default), you additionally gain access to an FFI-based libxcb interop. All the serializing / unserializing still happens in safe Rust and only the "on-the-wire bytes" are exchanged with libxcb
- On Unix, x11rb also supports FD-passing. This allows to exchange file descriptors with the X11 server. For example, this is used by the shared memory extension to exchange shared memory in a safe way.
- Also supports Windows (and this is even tested in CI) (but I guess BreadX also works on Windows)
- Besides the pure protocol, there are also a couple of helpers to load cursor files, simplify image handling, and to access the X11 resource database (Xrm)
To be fair, the first commit to BreadX happened in June (half a year ago), while x11rb was started in September 2019 (15 months ago).
The only downside to x11rb is that you cannot opt-out
Sync. However, I am also curious to see numbers for BreadX's claim "generally faster". Is
Mutex really that bad for a network protocol? If so, one could easily add a variant to x11rb that uses
RefCell instead of
Since BreadX's README also says that its "dependencies are either safe or verified":
- On Unix, x11rb depends on
- On Windows, x11rb depends on
winapi-wsapoll(smaller wrapper crate that exposes a safe API to winapi's
- With the
allow-unsafe-codefeature, the libxcb FFI needs
libc::free()and some type definitions from
I do not know what "verified" refers to, but I would say these dependencies are reasonable. The
gethostname dependency is needed to properly deal with
~/.Xauthority files, which is something that BreadX does not support yet.