kron
Engine · Kotlin · engine: io_uring
kron — edixoi on Kotlin/Native: kron, the native port of the ioxide io_uring runtime, on its raw recv/send API and nothing above it. One reactor per core, each owning its ring and its share of the SO_REUSEPORT listeners; multishot accept and recv into provided buffer rings, the ring driven by hand from Kotlin over the kernel's own io_uring header through cinterop (no liburing, no JVM, no JIT: one native binary). Handlers are Kotlin suspend functions that the reactor resumes inline on the thread that took the completion, with no dispatcher and no thread pool. The HTTP/1.1 handling (request line, query string, case-insensitive headers, Content-Length and chunked bodies, keep-alive, pipelining, reads fragmented across recv boundaries) is edixoi's, ported to Kotlin — no framework, no router. One handler answers on both doors: plaintext on :8080, and TLS on :8081 for json-tls and the 8gbit echo, terminated with BoringSSL linked statically into the binary, with kernel TX offload where the kernel has the tls module and BoringSSL receive. The async profile's wait is an IORING_OP_TIMEOUT on the reactor's ring, so a held connection costs a kernel deadline rather than a thread. Companion to edixoi (C#) and edixoi-kt (the JVM port), which serve the same profiles.
Composite rank
Each profile of a family is worth 100 to the entry that leads it, and the composite is the sum over the family, less 2.5% for each of routing, middleware, request and response the entry does not do for you - its completeness factor, which the WebSocket and gRPC families do not carry. The field is this entry's own league: engines and reverse proxies are scored apart from frameworks. How it works.
| Family | Rank | Composite |
|---|---|---|
| HTTP/1.1 | 4 of 43 | 6443 |
Every result
Alpha Round, 7 runs. Requests per second is the best of three; latency, CPU and memory come from that run.
| Category | Profile | Conns | Req/sec | Avg | p99 | CPU | Memory |
|---|---|---|---|---|---|---|---|
| Connection | Baseline | 4,096 | 4,027,532 | 1.02ms | 1.69ms | 6420.7% | 1.3GiB |
| Connection | Short-lived | 4,096 | 2,690,422 | 1.39ms | 2.06ms | 5964.9% | 1.4GiB |
| Concurrency | Async Delay | 32,000 | 2,604,298 | 12.19ms | 49.70ms | 5839.3% | 1.7GiB |
| Efficiency | Latency-10K | 1,024 | 9,982 | 81.5us | 115.0us | 30.7% | 1.3GiB |
| Efficiency | Latency-1M | 1,024 | 997,515 | 97.7us | 162.0us | 2286.9% | 1.3GiB |
| Workload | JSON TLS | 4,096 | 1,802,467 | 1.32ms | 33.17ms | 5946.2% | 1.5GiB |
| Workload | 8Gbit | 512 | 49,355 | 101.5us | 121.0us | 194.4% | 3.4GiB |
Compared with
The Kotlin entries around kron on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs kron | |
|---|---|---|---|
| ktron | 7557 | +17% | head to head |
| edixoi-kt | 6803 | +6% | head to head |
| genhttp-kt-netty | 5539 | -14% | head to head |
| ktor-tuned | 3879 | -40% | head to head |
Compare kron with any Kotlin entry · Compare kron with any entry, in any language · Every Kotlin entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry