mrkeyoor.com_
Tue 01 Sept 17:43 UTC
Dev Toolsevaluationupdated 26 Aug 2026

quiche review

quiche is Cloudflare's Rust implementation of the QUIC transport protocol and HTTP/3, with a C interface for integration into other languages. It handles protocol and connection state while leaving sockets, the event loop, timers, and production server architecture to the application embedding it.

+3stars / 7d
Verdict

Our quiche run built in 216 seconds and passed all 1,386 cargo tests, the cleanest result in this group. Use it when experienced network engineers need direct control over QUIC or HTTP/3 and can own the event loop around it. For ordinary HTTP/3 clients or servers, a higher-level library leaves far less protocol-sensitive application code to maintain.

We ran it

Lab card: what happened when we ran quicheScreenshot of quiche (docs.quic.tech/quiche)
Install✓ · 77s434 packages
Build✓ · 216s
Tests✓ · 167s1386 passed · 0 failed of 1386 (cargo test)
Repo2146 files~143,391 lines of source · 7.8 MB · 5 CI workflows · Dockerfile

Answers from our run

Does quiche build from source?

Dependencies installed in 77 seconds (434 packages), and the build succeeded in 216 seconds. We cloned commit 0b1a89a into a clean Debian container with 3 CPUs and no project-specific setup.

Do quiche's tests pass?

Yes: 1386 of 1386 passed when we ran the project's own test command (cargo test). Some failures need services or credentials a bare container does not have.

Who should not use quiche?

Application developers who only want to make HTTP/3 requests: the README says quiche is low level and makes the caller provide sockets, timers, and an event loop.

What are the alternatives to quiche?

Quinn, s2n-quic, ngtcp2. Our quiche run built in 216 seconds and passed all 1,386 cargo tests, the cleanest result in this group.

Setup3/577-second install; native build passed with BoringSSL toolchain
Docs4/5Clear packet loop, timer, pacing, FFI, and build guidance
Community5/511,792 stars with August 2026 issue activity
Maturity5/51,386 tests passed; deployed by Cloudflare, Android, and curl

Discussed on

  1. hnQuiche – An implementation of the QUIC transport protocol in Rust177 points
  2. hnAsync QUIC and HTTP/3 made easy: Tokio-quiche is now open-source10 points
  3. hnExperiment with HTTP/3 using Nginx and quiche8 points
  4. hnCloudflare/quiche: Savoury implementation of the QUIC transport protocol3 points
  5. hnCloudflare Makes Open-Source the Rust Code to Tokio-Quiche3 points

Who it’s for

Network engineers building a custom QUIC or HTTP/3 client, server, proxy, or edge service.
Rust teams that want a low-level transport library proven in Cloudflare's edge network.
C or C++ projects prepared to integrate a Rust-built static library through a thin C API.
Protocol implementers who need explicit control over flow limits, congestion control, pacing, paths, and connection state.

Who it’s NOT for

Application developers who only want to make HTTP/3 requests: the README says quiche is low level and makes the caller provide sockets, timers, and an event loop.
Teams looking for a ready production server binary: the included client and server are examples with no performance, security, or reliability guarantees.
Builders who expect safe defaults for every connection limit: several stream and flow-control values default to zero and must be selected for the workload.
Projects that cannot carry a native toolchain: builds require Rust 1.88 or newer, CMake for BoringSSL, and NASM on Windows.
Servers relying on built-in short-lived Retry tokens without their own policy: issue 2663 says tokio-quiche tokens contain no timestamp or expiry and use one process-lifetime signing key.

Setup reality

Our sandbox installed 434 Rust packages in 77 seconds. The build succeeded in 216 seconds, then all 1,386 cargo tests passed in 167 seconds. The 7.8 MB checkout at commit 0b1a89a grew into a real native build because Cargo compiled BoringSSL and the Rust workspace.

Building needs Rust 1.88 or newer and CMake; Windows also needs NASM. C and C++ consumers enable the FFI feature and link a static library. Android and iOS add their NDK or Xcode toolchains and platform packaging.

Integration costs more than compilation. The caller owns UDP I/O, connection lookup, timers, pacing, certificates, flow-control limits, backpressure, shutdown, and observability. The example binaries are explicitly excluded from production use.

quiche implements QUIC and HTTP/3 without owning network I/O

quiche implements IETF QUIC and HTTP/3, but the most important sentence in its README is about what it does not do. The library processes packets and manages connection state. Your application supplies UDP sockets, an event loop, timers, pacing, and the surrounding server or client design. That boundary gives network engineers control and keeps quiche independent of one runtime, but it makes the library a poor fit for developers who simply want faster web requests.

Cloudflare's production use is the strongest reason to take it seriously. quiche powers HTTP/3 on Cloudflare's edge, Android uses it in the DNS resolver for DNS over HTTP/3, and curl can be built against it. These are meaningful deployments across server, mobile, and command-line environments. The BSD 2-Clause license is also friendly to commercial integration.

The API is available directly in Rust and through a thin C layer. A Cargo build can produce a standalone static library for C and C++ consumers when the ffi feature is enabled. That broad reach distinguishes quiche from Rust-only choices, especially for existing proxies, embedded networking components, or language bindings that can call C.

The caller owns sockets, timers, pacing, and flow limits

Connection setup starts with a configuration object covering protocol version, application protocols, congestion control, timeouts, flow control, and TLS. Several important stream and data limits default to zero because the library cannot infer a sensible value for every application. That is correct for a transport toolkit, but an incomplete configuration can establish far less useful behavior than a newcomer expects. Capacity planning and protocol knowledge begin before the first packet is accepted.

Incoming datagrams go into recv(), and the application repeatedly calls send() to obtain outgoing packets. It tracks the timeout returned by the connection, calls on_timeout() when needed, and drains any resulting transmissions. Stream data uses another set of send, receive, and readiness calls. Pacing hints tell the application when a packet should leave, but the caller must implement the delay using platform facilities such as Linux SO_TXTIME or user-space timers.

This design can fit a specialized proxy or edge runtime beautifully. It also means mistakes in scheduling, packet routing, flow limits, or backpressure become application bugs. quiche is not the dependency that removes transport engineering; it is the dependency that lets qualified teams do transport engineering without reimplementing QUIC itself.

The repository now includes tokio-quiche for asynchronous integration, yet that layer should not be mistaken for a beginner API. Issue #2299 describes a user struggling with callback contracts, missed reads, and a possible 100 percent CPU loop when callbacks are implemented incorrectly. Issue #2551 reports a server handshake failure on Linux network interfaces without GSO because one reply path unconditionally attached a UDP segmentation control message. These are specific edge cases, not proof of general instability, but they show the level at which adopters will debug.

What happened when we ran it

Our sandbox installed 434 Rust packages in 77 seconds. The build succeeded in 216 seconds, and Cargo then passed all 1,386 tests in 167 seconds. The checkout at commit 0b1a89a contained 2,146 files, about 143,391 source lines, and 7.8 MB before dependencies.

The clean result matters because this is network and cryptographic code with a large protocol state space. It does not prove interoperability with every peer or throughput on production hardware. We did not benchmark connections, packet rate, latency, memory, loss recovery, or HTTP/3 behavior across other implementations.

Our run used a fresh unprivileged Debian container with 3 CPUs, 12 GB of RAM, and the lab Rust image. Cargo built the native dependencies required by the selected workspace. The repository has 5 CI workflow files and a Dockerfile, while tests live alongside Rust modules rather than in a root tests directory.

Native builds require Rust 1.88, CMake, and BoringSSL

The standard command is cargo build --examples. BoringSSL provides the TLS handshake code and is built automatically, but CMake must be present. Windows adds NASM. A custom BoringSSL tree can be selected for organizations that control their crypto build, and the FFI feature produces the static library used by C or C++ applications.

Mobile integration raises the cost. Android needs an NDK, cargo-ndk, Rust targets, and API level 21 or newer. iOS needs the Apple toolchain and packaging work.

The command-line client and server are learning and interoperability tools. The README denies them production performance, security, or reliability guarantees, and the included certificate is self-signed. A public service needs its own admission controls, resource ceilings, certificate rotation, logging, and abuse handling.

The July 2026 release fixed three memory-exhaustion paths

Release 0.29.3 arrived on July 14, 2026, with three security-focused fixes. It bounded path-event growth from peers changing source ports, limited HTTP/3 frame allocations earlier, and corrected field-section accounting so many small fields could not bypass the configured size ceiling. The release also set a 32 KiB default HTTP/3 field-section limit and fixed connection-ID retirement and timer arithmetic. That is the kind of defensive maintenance a network-facing library needs.

The repository was last pushed on August 14, and quiche-specific issues were still being opened and discussed in August. GitHub reports 339 open issues and pull requests combined, a substantial queue for a large protocol project rather than 338 confirmed defects. Contribution history is spread across several high-volume maintainers, and the project dates back to 2018. Both activity and deployment evidence support a high maturity score, even though the crate remains on a 0.x version.

Documentation is strong at the protocol-loop level. The README explains packet flow, timers, pacing, streams, HTTP/3, FFI, and builds, while generated Rust documentation covers the API surface. What it cannot provide is an application architecture for every caller. quiche is a confident recommendation for experienced networking teams that value explicit control and proven deployment. Everyone else should first ask whether a complete HTTP client, server, or higher-level async QUIC library solves the actual problem with much less risk.

Alternatives

ProjectWhat it isPick it when
QuinnAn async-friendly pure Rust QUIC implementation built around Tokio-era application patterns.pick this instead when Rust-native async ergonomics matter more than quiche's C interface and Cloudflare lineage.
s2n-quicAWS's Rust QUIC implementation with configurable providers and an application-facing API.pick this instead when its provider model and AWS production ecosystem fit your deployment better.
ngtcp2A C implementation of QUIC with HTTP/3 libraries and interoperability tools.pick this instead when a C-native dependency is preferable to linking a Rust library through FFI.

What people are saying

  1. [github-trending] cloudflare/quiche

Sources

  1. quiche README
  2. quiche 0.29.3 release
  3. Retry token validity report
  4. Connection close behavior report
  5. quiche API documentation

More dev tools reviews

workmux · v2rayNG · SecLists · hashcat · eslint · fastfetch · the whole board →