Open Source · BSD-3-Clause · C++17 · RFC 9000 / 9369 / 9114

From the UDP socket to the HTTP/3 handler,
a self-contained QUIC stack

Production-grade robustness, engineered for readability. A single repository implementing TLS 1.3, the QUIC transport, HTTP/3 routing and QPACK — with no external HTTP framework. Public API follows semantic versioning since 1.0.

bash — quicX
$git clone --recurse-submodules github.com/caozhiyi/quicX$cmake -B build -DCMAKE_BUILD_TYPE=Release$cmake --build build --parallel 12$./build/example/hello_world/hello_world_server &hello_world_server listening on 0.0.0.0:7001$./build/example/hello_world/hello_world_client======== Response Received ========Status: 200 Body: hello world$
1523unit & integration tests
90.60%interop pass rate (24 × 17 peers)
3RFCs fully implemented
80,000+lines of C++
18runnable examples

Why QuicX

Production-Grade Robustness

1523 unit and integration tests; ASan / UBSan / TSan all green on every release.

Proven Interoperability

Validated against 17 major QUIC implementations across a 24-scenario matrix, 90.60% passing.

Engineered for Readability

Every layer from NIC to HTTP/3, with an 11-stop guided source tour — debugging and hacking made easy.

Batteries Included

hello_world, file transfer, server push, load testing — 18 ready-to-run examples, CMake & Bazel.

90.60%24 × 17

Interoperability, scenario by scenario

A 24-scenario interop matrix run against 17 major QUIC implementations — handshakes, migration, congestion control and connection close, each verified individually. The 90.60% pass rate is recorded and reproducible.

Not a self-declaration — a reproducible test matrix.

See the interop matrix →

Single Process · Five Modules

UDP→Packet→Frame→Stream→H3 / QPACK→Handler

Requests flow top to bottom: user handler → HTTP/3 Connection / QPACK / Router → QUIC stream & congestion control → common networking → UDP out of the NIC. The dashed line marks the browser-side reconnect hop after receiving Alt-Svc.

QuicX module architecture

HTTP/3 in four lines

One lambda is one handler. The real hello_world — no registration code omitted.

auto server = quicx::IServer::Create();

server->AddHandler(quicx::HttpMethod::kGet, "/hello",
    [](std::shared_ptr<quicx::IRequest> req,
       std::shared_ptr<quicx::IResponse> resp) {
        resp->AppendBody(std::string("hello world"));
        resp->SetStatusCode(200);
    });

server->Init(config);
server->Start("0.0.0.0", 7001);  // HTTP/3 on the wire
git clone --recurse-submodules https://github.com/caozhiyi/quicX.git
cd quicX
cmake -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON
cmake --build build --parallel $(nproc)
git clone --recurse-submodules https://github.com/caozhiyi/quicX.git
cd quicX

# build every target (library + all 18 examples)
bazel build //...

# run the full unit-test suite
bazel test //test/...

The build ships all 18 examples — start with example/hello_world.

Go Deeper