This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Affected surfaces
ReleasePort's take
Moderate signalRelease v0.9.0 adds wasm runtime support for HTTP/3 and QUIC clients/servers and fixes several bugs including a critical retry‑token validation panic.
Why it matters: The new 'wasm' runtimeMode enables native addon‑free HTTP/3 and raw QUIC usage; the security fix prevents panics triggered by i64::MIN inputs, addressing severity 80 issues.
Summary
AI summaryUpdates WASM runtime, Correctness, and CI and infrastructure across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | High |
Fixes retry-token validation panic on i64::MIN input by using u64::abs_diff. Fixes retry-token validation panic on i64::MIN input by using u64::abs_diff. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Feature | Medium |
Adds runtimeMode: 'wasm' for HTTP/3 and raw QUIC clients without native addon. Adds runtimeMode: 'wasm' for HTTP/3 and raw QUIC clients without native addon. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Feature | Medium |
Adds Node-only server-side runtimeMode: 'wasm' support for Http3SecureServer and QuicServer. Adds Node-only server-side runtimeMode: 'wasm' support for Http3SecureServer and QuicServer. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Bugfix | Medium |
Fixes buffer_pool right-sized pool checkin bucketing bug causing mis‑classified buffers. Fixes buffer_pool right-sized pool checkin bucketing bug causing mis‑classified buffers. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Bugfix | Medium |
Fixes Http3EventSource reconnect path lacking internal error handling. Fixes Http3EventSource reconnect path lacking internal error handling. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Bugfix | Low |
Fixes Linux‑only Rust compile failure by adjusting TxDatagram field visibility. Fixes Linux‑only Rust compile failure by adjusting TxDatagram field visibility. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Bugfix | Low |
Fixes npm-audit-and-sbom CI job choking on optional dependencies with --no-optional. Fixes npm-audit-and-sbom CI job choking on optional dependencies with --no-optional. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Bugfix | Low |
Fixes Docker build contexts missing crates/ after http3-wasm workspace change. Fixes Docker build contexts missing crates/ after http3-wasm workspace change. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Bugfix | Low |
Fixes flaky high‑connection‑count interop test by establishing connections concurrently. Fixes flaky high‑connection‑count interop test by establishing connections concurrently. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Refactor | Low |
Replaces void asyncCall with drainable task registry to observe detached operation rejections. Replaces void asyncCall with drainable task registry to observe detached operation rejections. Source: llm_adapter@2026-07-16 Confidence: high |
— |
Full changelog
WASM runtime (client and server)
- Added
runtimeMode: 'wasm'for HTTP/3 and raw QUIC clients
(connect()/connectAsync()/connectQuic()/connectQuicAsync()),
backed by awasm32-wasip1build of the same quiche + BoringSSL
protocol core used natively (crates/http3-wasm'sh3c_*/qc_*
extern-C ABI) — no native.nodeaddon required in the process. - Added Node-only server-side
runtimeMode: 'wasm'support
(Http3SecureServer.listen()/QuicServer.listen()), via the same
crate'shs_*/qs_*ABI.ConnectionMap/QuicConnectionMap's
retry-token HMAC moved fromringtoboring::hash::hmac_sha256so
the server-side connection-routing/token logic compiles for wasm too. - Verified the full native x wasm x client x server x QUIC x HTTP/3
matrix (8 cells), including a wasm client talking to a wasm server
over real loopback UDP with no native code involved at all. - Verified the client build running inside real Cloudflare workerd
(wrangler devandwrangler deploy --dry-run) — see
examples/workerd-client. The only remaining blocker to a real
workerd deployment is outside this package: Workers has no outbound
UDP client socket API yet (cloudflare/workerd#4463). - See
docs/WASM_RUNTIME.mdfor the usage
guide and current Node/workerd support matrix, and
docs/WASM_CLIENT_PLAN.mdfor the
design and decision log.
Correctness
- Fixed
buffer_pool.rs's right-sized pool checkin bucketing: it
reused the checkout-side "smallest class>=request" classification
instead of "largest class<=capacity," so a buffer whose capacity
fell strictly between two class thresholds was filed into a bucket
whose declared capacity it didn't meet — the same bug class as an
earlierchunk_pool.rsfix, now caught by a Kani proof of the
general property rather than by inspection. - Fixed a retry-token validation panic: the clock-skew check cast a
parsed (attacker/corruption-controlled) timestamp toi64and took
.saturating_sub(..).abs(), which can panic oni64::MINfor a
hostile byte pattern. Replaced withu64::abs_diff, proven correct
over the entireu64domain. - Fixed
Http3EventSource's reconnect path (_startConnection())
having no internal error handling, unlike its sibling
_finalizeClose()— a_closeSession()rejection or a synchronous
connect()throw would have escaped as an unhandled promise
rejection instead of triggering the class's own reconnect/error flow. - Replaced
void asyncCall()throughoutlib/(constructors,
event-handler callbacks, timers kicking off background work) with a
drainable task registry (lib/run-detached.ts): every detached
operation's rejection is now observed, andHttp3ClientSession,
QuicClientSession, andHttp3SecureServerawait all of theirs
before their ownclose()/destroy()completes, instead of leaving
background work to finish unobserved after shutdown.
Formal verification and fuzzing
- Added Kani proofs for
chunk_pool/buffer_poolsize-class
arithmetic (largest-class-<=-capacity, and that every checkout
allocation is accepted back on checkin) and for retry-token
mint/parse (round-trip correctness, no panic on arbitrary bytes, and
the clock-skew regression above, all proven rather than just
example-tested). - Extracted the retry-token payload build/parse logic (previously
duplicated verbatim betweenconnection_map.rsand
quic_worker.rs) into a single sharedproof_coremodel. - Added a
retry_token_roundtripfuzz target exercising the real
HMAC-integratedConnectionMapmint/validate path under libFuzzer's
coverage-guided mutation.
CI and infrastructure
- Fixed a Linux-only Rust compile failure (
TxDatagram'sdata/
payload_lenfields neededpub(crate)visibility after their
extraction into an always-compiled module). - Fixed the
npm-audit-and-sbomCI job choking on optional
dependencies that are fully resolved in the lockfile but skipped via
--no-optional(pnpm licenses listneeds them actually installed
to inspect). - Fixed the Docker build contexts (
Dockerfile,Dockerfile.test,
Dockerfile.runtime-test) missingcrates/after
crates/http3-wasmbecame a Cargo workspace member. - Fixed a flaky high-connection-count interop test
(quic-high-conn.test.ts): it connected clients strictly
sequentially, so under CI thread-scheduling contention a handful of
slow handshakes serialized into a very long stall instead of racing
concurrently; connections are now established concurrently, matching
the test's own stream-handling phase.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Http3
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]