blob: 20d502a7700ba79d57b4267991241781dd9a7469 [file] [log] [blame]
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-27
- HTTP/3 stack conforming with draft-27
- 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/master/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