This page lists details of known active QUIC implementations (applications or libraries) and QUIC-related tooling.

Overview table

Name
aioquic
AppleQuic
Chromium
f5
haproxy
Haskell quic
kwik / flupke
lsquic / lsqpack
MsQuic
mvfst / proxygen
Neqo
ngtcp2 / nghttp3 / h2load
nginx
picoquic / fuzi_q
qlog / qvis
quiche / h3i
quicly
QUIC Interop runner / network simulator
Quinn
quic-go
s2n-quic
Wireshark
XQUIC

Details

aioquic

Implementation using Python and asyncio.

AppleQuic

Apple’s implementation

Chromium

Chromium’s implementation (not to be confused with Cloudflare quiche)

f5

F5’s implementation

haproxy

HAproxy’s implementation

Haskell quic

Implementation using Haskell

kwik / flupke

Implementation using Java

lsquic / lsqpack

LiteSpeed QUIC and HTTP/3 library. Works on Linux, FreeBSD, MacOS, Android, and Windows. Turn-key open-source web server that uses lsquic is available at openlitespeed.org in both source and package forms. Bindings are available for Crystal and Lisp.

MsQuic

Microsoft’s general purpose (cross-platform) QUIC implementation. Optimized for high performance. More documentation here.

mvfst / proxygen

mvfst (pronounced move fast) is an implementation by Facebook. proxygen implements HTTP/3 mapping over QUIC and QPACK in C++, with MVFST as the transport.

Neqo

Mozilla’s implementation

ngtcp2 / nghttp3 / h2load

A range of implementation and tools implemented using C and C++

nginx

nginx’s implementation

picoquic / fuzi_q

Picoquic is a small(ish) implementation of QUIC in C, to explore the protocol and the API, for example for DNS over QUIC. Relies on PicoTLS for TLS 1.3. MIT license. Tested on Windows, Linux, FreeBSD/IOS.

Over the net fuzzing of QUIC servers or clients. Fuzi_q can be used as a client to test a QUIC server, or as a server to test a QUIC client.

Fuzi_q started from the testsuite of picoquic. Fuzi_q hooks into the Picoquic stack, catching messages just before they would be encrypted and fuzzing them. It tries to do that intelligently. For each connection, Fuzi_q determines an encryption point, such as “the initial messages ave been processed”, or “the handshake is confirmed”, or “the connection is closing”. The connection progresses up to that state, and then packets are fuzzed. The fuzzing itself is based on knowledge of the QUIC protocol. The fuzzer might modify QUIC frames, or insert randomly chosen QUIC frames in the packets. The procedures implemented in the initial version are simple, there is clearly room for more sophistication. Suggestions are welcome.

qlog / qvis

qlog is a standard logging format for network protocols such as QUIC and HTTP/3. Support for generating qlogs in included in many implementations.

qvis is a toolsuite for visualizing QUIC+HTTP/3 qlog and pcap files. Includes a sequence diagram, congestion graph, multiplexing diagram and packetization visualization.

quiche / h3i

quiche is Cloudflare’s implementation (not to be confused with Google QUICHE).

h3i consists of an interactive command-line tool and library for low-level HTTP/3 debugging and testing.

quicly

QUIC protocol implementation for H2O server

QUIC Interop runner / network simulator

The QUIC Interop runner provides automated, continuous interop testing for participating QUIC implementations. Implementers are encouraged to join this effort by making compatible Docker images of their implementations available.

The QUIC network simulator is a simulation framework for automated benchmarking of QUIC implementations. Allows extensive network simulations using ns-3.

Quinn

Rust implementation with both a synchronous (sans-I/O) interface and an async interface, using rustls for TLS.

quic-go

Implementation using Go

s2n-quic

Amazon’s implementation

Wireshark

The world’s most popular network protocol analyzer

XQUIC

XQUIC Library released by Alibaba is a cross-platform implementation of IETF QUIC and HTTP/3 protocol.

Source code for the webpages on this site is located on GitHub , we welcome issues and PRs.