Awesome Open Source
Awesome Open Source


|rtd| |pypi-v| |pypi-pyversions| |pypi-l| |tests| |codecov| |black|

.. |rtd| image:: :target:

.. |pypi-v| image:: :target:

.. |pypi-pyversions| image:: :target:

.. |pypi-l| image:: :target:

.. |tests| image:: :target:

.. |codecov| image:: :target:

.. |black| image:: :target:

What is aioquic?

aioquic is a library for the QUIC network protocol in Python. It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.

QUIC standardisation is not finalised yet, but aioquic closely tracks the specification drafts and is regularly tested for interoperability against other QUIC implementations_.

To learn more about aioquic please read the documentation_.

Why should I use aioquic?

aioquic has been designed to be embedded into Python client and server libraries wishing to support QUIC and / or HTTP/3. The goal is to provide a common codebase for Python libraries in the hope of avoiding duplicated effort.

Both the QUIC and the HTTP/3 APIs follow the "bring your own I/O" pattern, leaving actual I/O operations to the API user. This approach has a number of advantages including making the code testable and allowing integration with different concurrency models.


  • QUIC stack conforming with draft-28
  • HTTP/3 stack conforming with draft-28
  • minimal TLS 1.3 implementation
  • IPv4 and IPv6 support
  • connection migration and NAT rebinding
  • logging TLS traffic secrets
  • logging QUIC events in QLOG format
  • HTTP/3 server push support


aioquic requires Python 3.6 or better, and the OpenSSL development headers.

Linux .....

On Debian/Ubuntu run:

.. code-block:: console

$ sudo apt install libssl-dev python3-dev

On Alpine Linux you will also need the following:

.. code-block:: console

$ sudo apt install bsd-compat-headers libffi-dev

OS X ....

On OS X run:

.. code-block:: console

$ brew install openssl

You will need to set some environment variables to link against OpenSSL:

.. code-block:: console

$ export CFLAGS=-I/usr/local/opt/openssl/include $ export LDFLAGS=-L/usr/local/opt/openssl/lib

Windows .......

On Windows the easiest way to install OpenSSL is to use Chocolatey_.

.. code-block:: console

choco install openssl

You will need to set some environment variables to link against OpenSSL:

.. code-block:: console

$Env:INCLUDE = "C:\Progra1\OpenSSL-Win64\include" $Env:LIB = "C:\Progra1\OpenSSL-Win64\lib"

Running the examples

aioquic comes with a number of examples illustrating various QUIC usecases.

You can browse these examples here:


aioquic is released under the BSD license_.

.. _read the documentation: .. _QUIC implementations: .. _cryptography: .. _Chocolatey: .. _BSD license:

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
python (54,453
network (477
asyncio (280
tls (191
quic (42
http3 (16