mrkeyoor.com_
Fri 16 Oct 19:46 UTC
Dev Toolsevaluationupdated 17 Sept 2026

quiche review

quiche is Cloudflare's Rust implementation of the QUIC transport protocol and HTTP/3. It handles packets, connections, streams, recovery, and HTTP/3 framing, while your application supplies the sockets, event loop, and timers. It is for building a networked product, rather than installing a ready-made web server.

+24stars / 7d
Verdict

Our quiche run passed all 1,386 tests, but its 434-package install and 216-second build make it a substantial transport dependency rather than a quick server install. Use it when you need low-level QUIC or HTTP/3 control and have engineers who can own the event loop, tuning, and network soak tests. Choose Quinn for a more natural async Rust surface, or a finished server when transport internals are outside your product's job.

We ran it

Lab card: what happened when we ran quicheScreenshot of quiche (docs.quic.tech/quiche)
Install✓ · 13s434 packages
Build✓ · 265s
Tests✓ · 231s3050 passed · 0 failed of 3050 (cargo test)
Repo2151 files~146,926 lines of source · 8 MB · 6 CI workflows · Dockerfile

Answers from our run

Does quiche build from source?

Dependencies installed in 13 seconds (434 packages), and the build succeeded in 265 seconds. We cloned commit 96e7dd5 into a clean Debian container with 3 CPUs and no project-specific setup.

Do quiche's tests pass?

Yes: 3050 of 3050 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?

Teams seeking a deployable HTTP/3 server: the README calls the bundled client and server demonstration tools and rules them out for production.

What are the alternatives to quiche?

Quinn, MsQuic, ngtcp2. Our quiche run passed all 1,386 tests, but its 434-package install and 216-second build make it a substantial transport dependency rather than a quick server install.

Setup3/5All checks passed, but 434 packages and BoringSSL make setup slow
Docs5/5Clear Rust, C, mobile, Docker, pacing, and HTTP/3 guidance
Community5/511,833 stars, a September 2026 push, and active issue traffic
Maturity5/5Used by Cloudflare and Android, with security fixes in 0.29.3

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

Rust teams building QUIC or HTTP/3 into a product that needs direct control over transport behavior.
C and C++ developers willing to enable quiche's thin FFI layer and link its static library.
Network engineers who can tune flow control, congestion control, pacing, and timeouts for a known workload.
Organizations that value a BSD-2-Clause implementation used in Cloudflare's edge, Android's DNS resolver, and curl integrations.

Who it’s NOT for

Teams seeking a deployable HTTP/3 server: the README calls the bundled client and server demonstration tools and rules them out for production.
Developers who do not want to own UDP I/O, an event loop, timers, and transport tuning: quiche deliberately leaves all of those in application code.
Build environments pinned below Rust 1.88 or unable to provide CMake for BoringSSL, with NASM also required on Windows.
Operators unable to soak-test their traffic patterns: open issue 2696 reports a flow-control accounting error on the measured revision during a 32-stream lossy-WAN run.

Setup reality

Our sandbox install succeeded in 77 seconds and pulled 434 packages. The build succeeded in 216 seconds, then all 1,386 tests passed in 167 seconds. We measured 2,146 files, about 143,391 source lines, and a 7.8 MB checkout at commit 0b1a89a.

No hosted account, service, or secret is required. The documented build needs Rust 1.88 or newer and CMake because the default Cargo path builds BoringSSL. C and C++ consumers must enable the disabled-by-default ffi feature, while Windows builders also need NASM.

The Cargo commands are short, but a working library is only the first layer. Your application must provide sockets, timers, and an event loop, and several stream and flow-control limits default to zero. The included command-line apps use a self-signed certificate and are explicitly unsuitable for production.

quiche supplies the protocol engine and leaves the server to you

Version 0.29.3 keeps a deliberate boundary: your application owns UDP sockets, I/O, an event loop, and timers. quiche accepts incoming packets, advances connection state, exposes readable streams, and produces outgoing packets with pacing hints. That boundary is the main decision. You get the transport machinery behind QUIC and HTTP/3, while connection dispatch, scheduling, certificates, and operational behavior remain part of the product you build around it.

The codebase is large enough to reward that separation. We cloned commit 0b1a89a, whose checkout had 2,146 files and about 143,391 lines of source in 7.8 MB. It covers the Rust API, an HTTP/3 layer, recovery and congestion work, command-line examples, and a thin C interface. The BSD-2-Clause license is friendly to commercial integration, but the amount of protocol code makes upgrading and regression testing an engineering job, not a casual crate bump.

Six zero defaults put transport policy in your application

In version 0.29.3, the configuration guide lists six stream and flow-control setters that applications will usually need because several defaults are zero. Those values decide how much data and how many streams a peer may use. QUIC version, application protocols, idle timeouts, congestion control, and TLS settings also sit in the configuration object. A successful handshake therefore says little about whether the connection policy suits your service.

The 0.29.3 security notes made one such policy visible by setting the default maximum HTTP/3 field section to 32 KiB. The release also bounded path events and tightened frame parsing after memory-exhaustion risks were found. These are sensible fixes, and they show why applications need explicit limits. Our 434-package install succeeded, but dependency resolution cannot choose safe request sizes or stream counts for your traffic.

What happened when we ran it

Our sandbox installed quiche in 77 seconds and pulled 434 packages. The build then completed successfully in 216 seconds. Our measurement setup used commit 0b1a89a in an unprivileged container with 3 CPUs and 12 GB of RAM, without secrets. Nothing in the recorded install or build log failed.

Cargo test finished in 167 seconds with 1,386 passed and 0 failed. That is unusually persuasive evidence for a protocol library because the suite exercised far more than a smoke test. It is still repository evidence, not a latency or throughput benchmark. We did not measure requests per second, packet loss recovery, memory use, or interoperability under production traffic, so the result should not be stretched into those claims.

Rust 1.88 and CMake are the real build floor

Current documentation requires Rust 1.88 or newer. CMake must also be present because Cargo builds and links BoringSSL for the QUIC TLS handshake. Windows adds NASM. Mobile builds branch into separate toolchains: Android needs an NDK and cargo-ndk, while iOS needs Xcode tools, target toolchains, and cargo-lipo. The basic Cargo command is accurate, though each target brings its own native build chain.

The C and C++ path has another switch. Cargo produces a static library, but consumers must enable the ffi feature because it is off by default. That is manageable in a controlled build, yet the 216-second sandbox compilation is a warning for CI design. Cache the Rust and BoringSSL outputs, pin the toolchain, and budget rebuild time before this library sits under several applications.

The bundled apps are demonstration tools

Release 0.29.3 includes a QUIC client and server, plus example certificates, so you can make a connection before writing an integration. The README says those programs provide no production performance, security, or reliability guarantees. The server certificate is self-signed. Treat the apps as executable API documentation and interoperability aids, not as a service you can put behind a load balancer.

Our scan found 5 CI workflow files and a Dockerfile, but no conventional tests directory. That last detail does not mean quiche lacks tests because Cargo ran 1,386 of them successfully. It means the tests live elsewhere in the Rust project structure. The Docker images and examples lower the cost of evaluation, while production still needs certificate handling, connection routing, observability, graceful shutdown, and limits chosen for the application.

September commits and July security fixes show active maintenance

GitHub recorded a push on September 16, 2026, one day before this review. Release 0.29.3 arrived on July 14 with three security fixes plus connection-ID, flow-control, and timeout work. GitHub search returned 134 open issues and 180 open pull requests on September 17. That is a busy queue, so judge it alongside the fresh push and detailed release work rather than reading the combined count as a bug total.

Two September reports also show the kind of validation adopters need. The issue 2696 flow-control report describes double-counting on commit 0b1a89a after a 32-stream, roughly 700 Mb/s lossy-WAN soak. The issue 2698 BBRv2 report describes a state that can remain in PROBE_RTT under a specific window configuration. Neither report changes our 1,386 passing tests. They identify traffic patterns that a unit suite did not settle.

Quinn is the easier Rust choice when async ergonomics matter

Quinn describes itself as an async-friendly Rust QUIC implementation, which fits applications already built around async tasks and streams. MsQuic is a cross-platform C library with C++, C#, and Rust surfaces. ngtcp2 is another C implementation and gives integrators choices around TLS. All three are active repositories, so language, runtime shape, HTTP/3 needs, and operating environment should decide the shortlist.

Pick quiche when packet-level control, its HTTP/3 module, or compatibility with an existing quiche integration justifies owning the surrounding network service. Our 216-second build and 167-second test run bought a clean result across all 1,386 tests. The remaining work is the part the README assigns to you: set the limits, drive the timers, test long connections under your loss profile, and ship a server around the library rather than mistaking the examples for one.

Alternatives

ProjectWhat it isPick it when
QuinnAn async-friendly Rust QUIC implementation built around Tokio-style application code.pick this instead when an idiomatic async Rust API matters more than quiche's low-level packet interface and HTTP/3 module.
MsQuicMicrosoft's cross-platform C QUIC library with bindings for C++, C#, and Rust.pick this instead when Windows support, a C core, or Microsoft's multi-language bindings fit your stack better.
ngtcp2A C implementation of IETF QUIC with HTTP/3 libraries and command-line examples.pick this instead when your application is C-first and you want to choose among supported TLS backends.

What people are saying

  1. [github-trending] cloudflare/quiche

Sources

  1. cloudflare/quiche README
  2. quiche 0.29.3 release notes
  3. quiche API documentation
  4. Issue 2696: flow-control double-counting
  5. Issue 2698: BBRv2 PROBE_RTT exit condition
  6. Quinn repository
  7. MsQuic repository
  8. ngtcp2 repository

More dev tools reviews

compose-samples · librepods · sqlmap · coucou · world-execute-me-dsh-pv · mcp-extensions · the whole board →