aioquic ======= |rtd| |pypi-v| |pypi-pyversions| |pypi-l| |tests| |codecov| |black| .. |rtd| image:: https://readthedocs.org/projects/aioquic/badge/?version=latest :target: https://aioquic.readthedocs.io/ .. |pypi-v| image:: https://img.shields.io/pypi/v/aioquic.svg :target: https://pypi.python.org/pypi/aioquic .. |pypi-pyversions| image:: https://img.shields.io/pypi/pyversions/aioquic.svg :target: https://pypi.python.org/pypi/aioquic .. |pypi-l| image:: https://img.shields.io/pypi/l/aioquic.svg :target: https://pypi.python.org/pypi/aioquic .. |tests| image:: https://github.com/aiortc/aioquic/workflows/tests/badge.svg :target: https://github.com/aiortc/aioquic/actions .. |codecov| image:: https://img.shields.io/codecov/c/github/aiortc/aioquic.svg :target: https://codecov.io/gh/aiortc/aioquic .. |black| image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/python/black 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. Features -------- - 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 Requirements ------------ ``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:CL = "/IC:\Progra~1\OpenSSL-Win64\include" > $Env:LINK = "/LIBPATH:C:\Progra~1\OpenSSL-Win64\lib" Running the examples -------------------- `aioquic` comes with a number of examples illustrating various QUIC usecases. You can browse these examples here: https://github.com/aiortc/aioquic/tree/main/examples License ------- ``aioquic`` is released under the `BSD license`_. .. _read the documentation: https://aioquic.readthedocs.io/en/latest/ .. _QUIC implementations: https://github.com/quicwg/base-drafts/wiki/Implementations .. _cryptography: https://cryptography.io/ .. _Chocolatey: https://chocolatey.org/ .. _BSD license: https://aioquic.readthedocs.io/en/latest/license.html