ioxide 0.4.163

dotnet add package ioxide --version 0.4.163
                    
NuGet\Install-Package ioxide -Version 0.4.163
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ioxide" Version="0.4.163" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ioxide" Version="0.4.163" />
                    
Directory.Packages.props
<PackageReference Include="ioxide" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ioxide --version 0.4.163
                    
#r "nuget: ioxide, 0.4.163"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package ioxide@0.4.163
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=ioxide&version=0.4.163
                    
Install as a Cake Addin
#tool nuget:?package=ioxide&version=0.4.163
                    
Install as a Cake Tool

ioxide

nuget license net linux

A shared-nothing io_uring runtime for .NET.

One ring per reactor thread, one reactor per core. Each reactor owns its ring, its SO_REUSEPORT listener, its connections and its clients outright, so nothing is shared and nothing is locked - a request never leaves the core it arrived on, inbound and outbound alike. What makes that practical in .NET is that you do not give up the platform's async model to get it: handlers are ordinary async Task code, ring completions resume their continuations inline on the reactor thread, and a per-reactor SynchronizationContext catches everything that would otherwise escape - timers, HttpClient, Task.Run. You always wake up on your reactor, so connection, pool and handler state stays single-threaded without a lock in sight.

ioxide hands you raw bytes and stays out of HTTP; when you want a framework on top, ioxide.Kestrel swaps the transport under an existing ASP.NET Core app with your endpoints unchanged.

Linux 6.1+ · .NET 10 / .NET 11 · 0.4.153 - experimental

Documentation - architecture, guides, and every example as runnable code side by side.

Packages

Every package shares one version and depends only on the runtime. Start with ioxide - reactors, TCP/UDP transports, connections, the ring-native client seam, and TLS termination (OpenSSL handshake over the ring, then kTLS, so handlers keep writing plaintext) - then add exactly what you use.

Protocols. HTTP/2 and HTTP/3 each come twice: a bundled native, or the same surface in pure C#.

Package What it does
ioxide.ngtcp2 QUIC. ngtcp2 + picotls as one bundled native; only system dependency is OpenSSL 3.
ioxide.nghttp3 HTTP/3 + QPACK (nghttp3), bundled native. Rides any QUIC connection.
ioxide.http3 HTTP/3 in pure C# - frames, QPACK, Huffman. Zero native code, drop-in for ioxide.nghttp3.
ioxide.nghttp2 HTTP/2 (nghttp2), bundled native. h2c, or h2 over TLS via ALPN.
ioxide.http2 HTTP/2 in pure C# - framing, HPACK, flow control. Zero native code, drop-in for ioxide.nghttp2.

Clients. One pool per reactor, opened on the reactor thread, so every call rides the ring that accepted the request.

Package What it does
ioxide.httpclient HTTP/1.1, HTTP/2 and HTTP/3 behind one API, protocol chosen per origin via Alt-Svc, with client-side TLS for https://.
ioxide.pg Postgres. Connect, query and stream rows on the owning ring.
ioxide.redis Redis. RESP2, pipelining, pub/sub.
ioxide.file Static assets. Immutable snapshots, baked responses, positional ring reads.

Serving.

Package What it does
ioxide.Kestrel ASP.NET Core transport: UseIoxide() and Kestrel runs one ring per core, its request loop pinned to the reactor thread.

Where the code is

Nothing here is pseudocode. Every pattern above exists as something you can run:

What you get
Documentation The examples browser - TCP with and without kTLS, HTTP/2, QUIC, HTTP/3, every client, and all nine proxy combinations, side by side.
Playground One project per workload, grouped by topic. Each Program.cs is a complete server - config, reactors, threads, handler - so you can copy the file out and run it.
Examples.AspNet UseIoxide() measured against a stock Kestrel baseline.
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed.  net11.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.
  • net11.0

    • No dependencies.

NuGet packages (17)

Showing the top 5 NuGet packages that depend on ioxide:

Package Downloads
ioxide.file

File serving for the ioxide io_uring runtime: immutable asset snapshots with baked responses, pooled positional ring reads, atomic reloads.

ioxide.pg

Postgres driver for the ioxide io_uring runtime: pooled ring-native connections per reactor, ring-native connect and handshake, inline completion resume.

ioxide.tls

TLS for the ioxide io_uring runtime: OpenSSL handshake driven over the ring, then kernel TLS (kTLS) transmit offload - handlers keep writing plaintext through the same connection API. Requires Linux kTLS (tls module) and OpenSSL 3.

ioxide.redis

Redis client for the ioxide io_uring runtime: pooled ring-native connections per reactor, full RESP2 protocol, a generic command API plus typed helpers (strings, keys, hashes, lists, sets, sorted sets, pub/sub, transactions, scripting), and pipelining. Inline completion resume.

ioxide.Kestrel

ASP.NET Core Kestrel transport backed by the ioxide io_uring runtime: one reactor (ring) per core, SO_REUSEPORT load-balanced, with Kestrel's HTTP request loop pinned to the reactor thread. Drop-in via UseIoxide().

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.4.163 0 8/8/2026
0.4.162 0 8/8/2026
0.4.161 0 8/8/2026
0.4.156 0 8/8/2026
0.4.153 35 8/7/2026
0.4.152 31 8/7/2026
0.3.149 56 8/7/2026
0.3.145 101 8/5/2026
0.3.100 102 8/5/2026
0.2.6 110 8/4/2026
0.2.5 112 8/4/2026
0.2.4 123 8/3/2026
0.2.3 138 7/24/2026
0.2.2 131 7/23/2026
0.2.1 133 7/23/2026
0.1.1 332 7/20/2026
0.0.17 517 6/23/2026
0.0.16 123 6/21/2026
0.0.15 117 6/21/2026
0.0.14 120 6/21/2026
Loading failed