Production-grade QUIC + HTTP/3 in Rust. Built from scratch. Every layer visible, every byte accounted for.
cargo add nhttp3Packets, frames, TLS 1.3 via rustls, streams, flow control, loss detection, NewReno + CUBIC + BBR, QLOG, endpoint I/O loop.
Frame codec, pseudo-header validation, HTTP crate types, error codes per RFC 9114.
Static table (99 entries), dynamic table, encoder/decoder. 50% compression on realistic headers.
PyO3 + custom async bridge. No pyo3-asyncio. Tokio runtime on background thread.
wasm-bindgen. Browser via WebTransport, non-browser via raw UDP.
Opaque handles, callback-based async, error codes. Runtime managed internally.
| RFC | Title | Status |
|---|---|---|
| 9000 | QUIC Transport | ACTIVE |
| 9001 | Using TLS to Secure QUIC | ACTIVE |
| 9002 | Loss Detection + Congestion Control | ACTIVE |
| 9114 | HTTP/3 | ACTIVE |
| 9204 | QPACK Header Compression | ACTIVE |
| 9218 | Extensible Priorities | ACTIVE |
| 9221 | QUIC Datagrams | ACTIVE |
Reviewed against 200+ issues from aioquic + quiche. Zero unsafe blocks.
nhttp3.serve(app, port=4433)
No uvicorn. No proxy. Rust QUIC server calls your ASGI app directly via PyO3. Proven with FastAPI.
serve(4433, handler)
napi-rs addon with embedded quinn. JS callback for each request. QPACK compression included.
HTTP/3 server with demo + proxy modes. Client with verbose timing. Native QUIC inference server for token streaming.
--proxy http://localhost:8000
Put HTTP/3 in front of Express, Django, Rails, anything. Helps remote clients (saves 2.5 RTTs).
| Client | How | Docs |
|---|---|---|
| nhttp3-client | Built-in Rust client with timing and verbose output | cargo run -p nhttp3-server --bin nhttp3-client -- URL |
| curl | curl 7.88+ with --http3 flag. Parallel with --parallel |
curl guide |
| Browser | Auto-negotiates via Alt-Svc. Standard fetch() works. WebTransport for streams. |
browser guide · live demo |
| Python | conn = await ep.connect("host", 443) |
python guide |
+-------------------+
| Application |
+--------+----------+
|
+--------v----------+
| nhttp3-h3 | HTTP/3 frames, headers
+--------+----------+
|
+--------------+--------------+
| | |
+--------v--------+ | +---------v--------+
| nhttp3-qpack | | | Extensions |
| QPACK codec | | | Datagram / Prio |
+-----------------+ | +------------------+
|
+--------v----------+
| nhttp3-quic | Endpoint, TLS, streams
| | loss, congestion, QLOG
+--------+----------+
|
+--------v----------+
| nhttp3-core | VarInt, CID, errors
+-------------------+
| Example | What | Links |
|---|---|---|
| Python | nhttp3.serve(app) — native ASGI, no uvicorn (tested, working) | guide · example · source |
| Node.js | serve(port, handler) — native addon via napi-rs (tested, working) | guide · source |
| Rust Server | HTTP/3 server + client + benchmarks (5 e2e tests, 0.12s) | source |
| Browser | Fetch API, WebTransport, SSE streaming client | live demo · source |
| curl | curl --http3 reference: streaming, parallel, timing | guide · reference |
| Reverse Proxy | --proxy http://localhost:8000 (for any existing HTTP server) | guide |