ioxide.ngtcp2 0.4.165

dotnet add package ioxide.ngtcp2 --version 0.4.165
                    
NuGet\Install-Package ioxide.ngtcp2 -Version 0.4.165
                    
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.ngtcp2" Version="0.4.165" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ioxide.ngtcp2" Version="0.4.165" />
                    
Directory.Packages.props
<PackageReference Include="ioxide.ngtcp2" />
                    
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.ngtcp2 --version 0.4.165
                    
#r "nuget: ioxide.ngtcp2, 0.4.165"
                    
#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.ngtcp2@0.4.165
                    
#: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.ngtcp2&version=0.4.165
                    
Install as a Cake Addin
#tool nuget:?package=ioxide.ngtcp2&version=0.4.165
                    
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.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on ioxide.ngtcp2:

Package Downloads
ioxide.httpclient

The ring-native HTTP client for the ioxide io_uring runtime: HTTP/1.1, HTTP/2 and HTTP/3 behind one API, with the protocol chosen per origin via Alt-Svc. One package - the h1 parser, the nghttp2 and nghttp3 bridges, client-side TLS (SNI, ALPN and certificate verification) for https:// origins, and the negotiating client - sharing one set of message types. Every response resumes the awaiting handler inline on its own reactor thread.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.4.165 0 8/9/2026
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 32 8/7/2026
0.4.152 42 8/7/2026
0.3.149 43 8/7/2026
0.3.145 50 8/5/2026
0.3.100 42 8/5/2026
0.2.6 48 8/4/2026
0.2.5 44 8/4/2026
0.2.4 61 8/3/2026