Cross-platform Rust library for asynchronous I/O (io_uring on Linux, kqueue on macOS and BSD family).
Rust
81
2,020 commits
updated Aug 1, 2026
This library is meant as a low-level library safely exposing different OS's abilities to perform non-blocking I/O.
On Linux A10 uses io_uring, which is a completion based API. For the BSD family of OS (FreeBSD, OpenBSD, NetBSD, etc.) and for the Apple family (macOS, iOS, etc.) this uses kqueue, which is a poll based API.
To support both the completion and poll based API most I/O operations need
ownership of the data, e.g. a buffer, so it can delay deallocation if needed.
2 The input data can be retrieved again by using the [Extract] trait.
Additional documentation can be found in the io_uring(7) and kqueue(2)
manuals.
Examples can be found in the examples directory of the source code.
The name A10 comes from the A10 ring road around Amsterdam, which relates to the ring buffers that io_uring uses in its design. ↩
Delaying of the deallocation needs to happen for completion based APIs
where an I/O operation Future is dropped before it's complete -- the
OS will continue to use the resources, which would result in a
use-after-free bug. ↩
2,020 commits
Rust
99.7%
Cross-platform Rust library for asynchronous I/O (io_uring on Linux, kqueue on macOS and BSD family).
Rust
81
2,020 commits
updated Aug 1, 2026
This library is meant as a low-level library safely exposing different OS's abilities to perform non-blocking I/O.
On Linux A10 uses io_uring, which is a completion based API. For the BSD family of OS (FreeBSD, OpenBSD, NetBSD, etc.) and for the Apple family (macOS, iOS, etc.) this uses kqueue, which is a poll based API.
To support both the completion and poll based API most I/O operations need
ownership of the data, e.g. a buffer, so it can delay deallocation if needed.
2 The input data can be retrieved again by using the [Extract] trait.
Additional documentation can be found in the io_uring(7) and kqueue(2)
manuals.
Examples can be found in the examples directory of the source code.
The name A10 comes from the A10 ring road around Amsterdam, which relates to the ring buffers that io_uring uses in its design. ↩
Delaying of the deallocation needs to happen for completion based APIs
where an I/O operation Future is dropped before it's complete -- the
OS will continue to use the resources, which would result in a
use-after-free bug. ↩
2,020 commits
Rust
99.7%