C++ Asynchronous System Call Layer for Linux, Powered by io_uring and C++20 Coroutines
Condy is designed to provide an intuitive, high-performance coroutine runtime on top of io_uring:
-
Comprehensive io_uring Integration Designed to integrate and maintain support for most io_uring features, with ongoing updates to track kernel and liburing advancements.
-
Low Overhead Efficient template-based abstractions and precise lifetime management eliminate nearly all heap allocations outside coroutine frames, resulting in extremely low runtime overhead.
-
Intuitive Programming Model Write asynchronous code in a direct, readable style using C++20 coroutines—no callbacks. Friendly APIs, high-level combinators, and channels make complex async flows easy to express.
-
Ready for std::execution Condy's senders satisfy the standard sender concept and compose directly with the C++26 execution ecosystem.
// hello.cpp
#include <condy.hpp>
condy::Coro<> co_main() {
std::string msg = "Hello, Condy!\n";
co_await condy::async_write(STDOUT_FILENO, condy::buffer(msg), 0);
}
int main() { condy::sync_wait(co_main()); }# Make sure liburing (>=2.3) is installed on your system
# On Ubuntu: sudo apt install liburing-dev
c++ hello.cpp -o hello -std=c++20 -luring -I./include
./hello
# Hello, Condy!See Documentation for more details.
When a std::execution implementation is available, Condy's operations become standard senders and can be used from execution-style code. See Building and Usage for how to enable an implementation.
// hello_execution.cpp
#include <condy.hpp>
#include <string>
#include <thread>
// C++26; otherwise <stdexec/execution.hpp> or <beman/execution.hpp>
#include <execution>
namespace ex = /* ... */ ;
int main() {
condy::Runtime runtime;
std::jthread runtime_thread([&] { runtime.run(); });
std::string msg = "Hello, Condy!\n";
auto [r] = ex::sync_wait(ex::starts_on(
condy::get_scheduler(runtime),
condy::async_write(STDOUT_FILENO, condy::buffer(msg), 0))).value();
runtime.allow_exit();
return r < 0;
}- Online Docs (GitHub Pages)
- Building and Usage: How to build and integrate Condy in your project.
- User Guide: Step-by-step introduction to Condy’s concepts and usage.
- Benchmarks: Performance comparison between Condy and other frameworks.
- Examples: Practical Condy code samples.
- Async Operation Types: Overview and classification of supported io_uring async operation variants.
- For questions, bug reports, or feature requests, please open an issue.
- Pull requests are welcome!