PQ Crypta Logo

HTTP/3 Client Implementations Measured

Every HTTP/3 and QUIC implementation driven through the suite: 13 of them, 59 adversarial tests each.

PQ CRYPTA PLATFORM

🏠 Main

📰 News

👤 Account

⟨ QUANTUM ERROR PORTAL ⟩

Navigate the Error Dimensions

Jump to an anomaly59

Every one of these is a page: what the server emits, the clause it is judged against, and how each client answered. The full list carries the verdict tallies too.

Each implementation below was driven through every test by the runner, which spawns the client's own binary. The suite is the judge: it can see what the client did on the wire, which the client cannot honestly report about itself.

A pass rate is over conclusive results only — pass plus fail. The client does not do this, and said so itself — by what it advertised, or by refusing outright. A definite answer about the client, not a failure and not a gap. The suite could not establish what this client does here. That is a shortcoming of the run rather than anything about the client, and every one of these is on our list to remove.

Ordered by how much of the catalogue each client actually answered, not by pass rate. A rate on its own ranks a client that reached half the tests and passed them above one that reached nearly all and passed most — which is an artifact of how thin the driving wrapper is, not a fact about the implementation. Coverage is the harder number, so it sorts first.

ngtcp2

ngtcp2 + nghttp3 (direct) · C · 3c23148

55 Pass4 Fail0 Unsupported0 Inconclusive

93% of 59 conclusive 100% of the catalogue answered

chromium

Chromium QUICHE · C++ · build 1248

54 Pass4 Fail1 Unsupported0 Inconclusive

93% of 58 conclusive 98% of the catalogue answered

quico

quico + lemon-tls · JavaScript · 0.7.0 (npm)

57 Pass0 Fail2 Unsupported0 Inconclusive

100% of 57 conclusive 97% of the catalogue answered

neqo

neqo (Firefox) · Rust · 0.31.1 (cac2b74)

54 Pass3 Fail2 Unsupported0 Inconclusive

95% of 57 conclusive 97% of the catalogue answered

picoquic

picoquic + picotls · C · 8162550

42 Pass14 Fail3 Unsupported0 Inconclusive

75% of 56 conclusive 95% of the catalogue answered

curl

ngtcp2 + nghttp3 · C · libcurl/8.23.0 ngtcp2/1.25.0

38 Pass17 Fail3 Unsupported1 Inconclusive

69% of 55 conclusive 93% of the catalogue answered

quic-go

quic-go · Go · quic-go v0.61.0 (h1:9So2anK4Tp22)

48 Pass6 Fail5 Unsupported0 Inconclusive

89% of 54 conclusive 92% of the catalogue answered

lsquic

LiteSpeed lsquic + BoringSSL · C · 4.9.4 (2b30189)

47 Pass5 Fail7 Unsupported0 Inconclusive

90% of 52 conclusive 88% of the catalogue answered

quiche

Cloudflare quiche · Rust · 0.30.0 (1c8e976)

46 Pass6 Fail7 Unsupported0 Inconclusive

88% of 52 conclusive 88% of the catalogue answered

aioquic

aioquic · Python · 1.3.0 (PyPI wheel)

44 Pass6 Fail9 Unsupported0 Inconclusive

88% of 50 conclusive 85% of the catalogue answered

xquic

Alibaba xquic + BoringSSL · C · 2060a44

43 Pass6 Fail7 Unsupported3 Inconclusive

88% of 49 conclusive 83% of the catalogue answered

msquic

.NET HttpClient + msquic · C# · 2.7.0 (7e6525d)

34 Pass14 Fail11 Unsupported0 Inconclusive

71% of 48 conclusive 81% of the catalogue answered

Self-test, excluded from the comparison

quinn runs on the same stack the suite itself is built on. Its results are a useful check that the harness still works and are not evidence about anybody else's implementation, so they are published in full and left out of every comparative figure on this site — the ranking above, the disagreement counts, and any statement of the form “N of the clients”. The only real fix for a suite judging its own stack is a second, independent implementation, and there is not one.

quinn

quinn + h3 (our fork) · Rust · noq fork (189b0ed)

59 Pass0 Fail0 Unsupported0 Inconclusive

100% of 59 conclusive not ranked

Where they disagree

22 of 59 tests drew both a pass and a fail from independent clients on a clause that permits only one answer. That is the number worth reading: on each of these rows, somebody is wrong.

A further 0 split on discretionary tests, where the RFC allows either behaviour. Clients differing there is the specification working as written, so those are listed but are not disagreements about correctness. Counted together — as they were until 2026-09-19 — the interesting number hides inside the dull one. Verdicts of unsupported and inconclusive are excluded from both: neither is an answer to the clause.