finds.dev← search

// the find

tokio-rs/io-uring

★ 1,665 · Rust · Apache-2.0 · updated Apr 2026

The `io_uring` library for Rust

Low-level Rust bindings for Linux's io_uring async I/O interface, sitting just above the raw syscalls. This is the foundation layer — not an async runtime integration, just the submission/completion queue mechanics exposed in safe-ish Rust. For systems programmers who want to drive io_uring directly rather than through tokio-uring.

The unsafe surface is deliberately narrow and well-marked — you opt in per-operation rather than having the library silently manage lifetime guarantees you don't understand. Architecture-specific syscall tables (x86_64, aarch64, riscv64, loongarch64, powerpc64) are split into separate files rather than one ifdef nightmare. Opcode coverage is broad: futex, epoll, buf_ring, sqpoll, fixed buffers — the less-used io_uring features that most wrappers skip are here. CI tests against multiple kernel versions, which matters more for this crate than almost anything else.

Still at 0.7 despite being three-plus years old and backed by the Tokio org — the version number signals the API isn't considered stable, which is a real adoption risk for anything you want to ship. The README example requires you to manually ensure buffer and fd lifetimes are valid across the async gap; the crate documents this but does nothing to help you not get it wrong. There's no higher-level abstraction for the common patterns (fixed-file registration, buffer rings, multishot ops) — every user reinvents that glue code. If you want Tokio integration, this isn't it — you want tokio-uring instead, and the relationship between the two crates is not explained anywhere.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →