ioxide.file 0.3.145

There is a newer version of this package available.
See the version list below for details.
dotnet add package ioxide.file --version 0.3.145
                    
NuGet\Install-Package ioxide.file -Version 0.3.145
                    
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.file" Version="0.3.145" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ioxide.file" Version="0.3.145" />
                    
Directory.Packages.props
<PackageReference Include="ioxide.file" />
                    
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.file --version 0.3.145
                    
#r "nuget: ioxide.file, 0.3.145"
                    
#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.file@0.3.145
                    
#: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.file&version=0.3.145
                    
Install as a Cake Addin
#tool nuget:?package=ioxide.file&version=0.3.145
                    
Install as a Cake Tool

ioxide ioxide.httpclient ioxide.pg ioxide.redis ioxide.file ioxide.Kestrel ioxide.ngtcp2 ioxide.nghttp3

A shared-nothing io_uring runtime for .NET.

One ring per reactor thread - run one per core. Each reactor owns its ring, its SO_REUSEPORT listener, its connections and its clients outright: nothing is shared, so nothing is locked. HTTP, Postgres, Redis and file I/O all submit on the owning ring and resume inline on the same thread. No thread pool on the hot path. No native dependencies - raw syscalls, nothing else.

Linux 6.1+ · .NET 10 / .NET 11 · status 0.2.6 - experimental

Documentation - architecture, guides, and every example below as runnable code you can read side by side.

First-class async/await

Shared-nothing runtimes usually ask you to give up the platform's async model. ioxide keeps it: handlers are ordinary async Task code, and await works everywhere.

  • Ring completions resume their continuations inline on the reactor thread - an awaited recv, query or file read picks up exactly where it left off, with no thread pool hop.
  • A per-reactor SynchronizationContext catches everything that would otherwise escape: timers, HttpClient, Task.Run results - their continuations post back to the owning reactor.
  • Ring operations await through reusable, allocation-free awaitables.

You always wake up on your reactor. That is what makes shared-nothing practical in .NET: connection, pool and handler state stays single-threaded without a lock in sight.

Clients ride the same ring

Every client is opened from the reactor's start hook, which runs on the reactor thread - so the connections it makes belong to that reactor's ring. The handler fetches it back as a reactor service. There is one pool per reactor and no sharing between them, which is why none of it needs a lock.

That holds for a Postgres query, a Redis command, an outbound HTTP call and a positional file read alike: each is submitted on the ring that accepted the request and resumes on the same thread, so a request never leaves the core it arrived on. A reverse proxy built this way keeps both hops - inbound connection and outbound call - on one thread for the life of the request.

Scope

ioxide hands you raw bytes and stays out of HTTP. Request parsing and response bytes are your code; the runtime owns the ring, the connections and the clients. When you want a framework on top, ioxide.Kestrel swaps the transport under an existing ASP.NET Core app - one ring per core, with Kestrel's request loop pinned to the reactor thread, and your endpoints unchanged.

Packages

Package What it does
ioxide The runtime: reactors, TCP/UDP transports, connections, the ring-native client seam, and TLS termination (OpenSSL handshake over the ring, then kTLS - handlers keep writing plaintext).
ioxide.httpclient The ring-native HTTP client: HTTP/1.1, HTTP/2 (h2c) and HTTP/3 behind one API, Alt-Svc negotiation, one set of message types. Bundles the nghttp2 native.
ioxide.ngtcp2 QUIC engine: ngtcp2 + picotls bundled native. Only system dependency is OpenSSL 3.
ioxide.nghttp3 HTTP/3 + QPACK (nghttp3), bundled native. Rides any QUIC connection.
ioxide.http3 Pure-C# HTTP/3: frames, QPACK, Huffman. Zero native code, drop-in for ioxide.nghttp3.
ioxide.pg Postgres driver. A pool per reactor; connect, query and stream rows on the owning ring.
ioxide.redis Redis client. RESP2, pipelining, pub/sub - pooled per reactor.
ioxide.file Static assets. Immutable snapshots, baked responses, positional ring reads.
ioxide.Kestrel ASP.NET Core transport: UseIoxide() and Kestrel runs one ring per core.

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, QUIC, HTTP/3, every client, and the ASP.NET drop-in, side by side.
Playground One project per workload. 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 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.file:

Package Downloads
GenHTTP.Modules.IoxideFiles

Serves static files on the GenHTTP Ioxide engine through ioxide.file - baked native responses, statx-based revalidation, and precompressed (.br/.gz) Accept-Encoding negotiation.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.4.184 0 8/12/2026
0.4.179 0 8/11/2026
0.4.178 49 8/10/2026
0.4.177 45 8/10/2026
0.4.176 46 8/10/2026
0.4.169 62 8/9/2026
0.4.168 49 8/9/2026
0.4.167 49 8/9/2026
0.4.165 51 8/9/2026
0.4.163 59 8/8/2026
0.4.162 50 8/8/2026
0.4.161 61 8/8/2026
0.4.156 49 8/8/2026
0.4.153 48 8/7/2026
0.4.152 49 8/7/2026
0.3.149 61 8/7/2026
0.3.145 79 8/5/2026
0.3.100 87 8/5/2026
0.2.6 96 8/4/2026
0.2.5 90 8/4/2026
Loading failed