Skip to content

Feature comparison

Updated 2026-07-28 (rows reconciled to the current README / source, 2026-08). Sources: project READMEs, source code inspection, RFC compliance tracking. Mirrors the standalone feature_comparison.md.

Feature RFC quic-go quiche s2n-quic quicz Gap
QUIC v1 transport 9000
QUIC v2 9369 quiche/s2n-quic V1 only
TLS 1.3 9001 ✅(Go crypto/tls) ✅(BoringSSL) ✅(s2n-tls/rustls) ✅(pure Zig)
0-RTT (early data) 9001
Loss detection & recovery 9002
Connection migration 9000
Path validation 9000
Retry + address validation 9000
Stateless reset 9000
Key update 9001
Version negotiation 9368
DATAGRAM extension 9221 ✅(unstable)
Multipath draft
ECN 9000 ✅ (rx only) quiche does not send ECN
PMTU discovery 8899
GSO/GRO quiche defers to app-layer I/O
Connection pool
Async I/O runtime (multi-conn) ✅(goroutine) ✅(tokio) ✅(tokio) ✅(std.Io) std.http model: accept + per-conn handler
qlog draft ✅(feature-gated) ❌(event subscriber)
Fuzz targets ✅(OSS-Fuzz)
NewReno 9002 s2n-quic: CUBIC+BBR only
CUBIC 9438
BBR removed 2026-08 in favor of CUBIC (see README)
HyStart++ draft slow-start RTT-monitor early exit
PTO jitter 9002 avoids timeout synchronization
Fast retransmission 9002
App-limited (RFC 8312 §5.8) 8312 3×MTU threshold
Packet pacing 9002
AES-128-GCM 9001
AES-256-GCM 9001
ChaCha20-Poly1305 9001
X25519 ECDH 8446
X25519Kyber768 (PQ) draft
HTTP/3 9114 full connection mgmt, SETTINGS, GOAWAY, stream state machine
QPACK static table 9204
QPACK dynamic table 9204 dynamic table + encoder/decoder instructions + header block
HTTP Datagrams 9297 Quarter Stream ID + payload frame format
WebTransport draft full session mgmt, uni/bidi frames, CLOSE capsule, datagram
Stream reset partial delivery draft opt-in enable_reset_partial_delivery
External interop ✅ all three
Pure-language TLS (no C)
FIPS 140-3 ✅(Go 1.26+) quic-go only
XDP zero-copy I/O ✅(unstable) s2n-quic only
Metric quic-go quiche s2n-quic quicz
Transport (19 items) 19/19 14/19 14/19 19/19
Congestion (8 items) 6/8 6/8 7/8 7/8
Cipher suites (5 items) 5/5 5/5 5/5 5/5
Application layer (6 items) 6/6 3/6 0/6 6/6
Platform (3 items) 2/3 0/3 1/3 1/3
Total (41 items) 38/41 28/41 27/41 40/41

quicz ships every transport, cipher, and application-layer feature; the open items are BBR (deliberately removed) plus the platform-only FIPS / XDP rows.

Mandatory gaps (all three have) — ALL CLOSED:

  1. AES-256-GCM — DONE (675e7ca)
  2. X25519Kyber768 — DONE (675e7ca)

Recommended (2/3 have) — ALL CLOSED:

  1. QPACK dynamic table — DONE (c8e605c)
  2. Complete HTTP/3 connection management — DONE (a15d22d)

Optional (1/3 or fewer):

  1. HTTP Datagrams (RFC 9297) — DONE (da6a670)
  2. Complete WebTransport session — DONE (a961f3e)
  3. Stream reset partial delivery — DONE (8d0ef2c)
  4. FIPS 140-3 — quic-go only
  5. XDP zero-copy I/O — s2n-quic only

quicz’s own measured numbers (first-party: real-handshake throughput, latency, loss recovery, CPU) live on the Performance page.

See Production tuning for recommended configuration values, PTO-jitter guidance, congestion-control selection, and initial-RTT tuning per deployment.