Skip to main content
PyWebTransport Logo

PyWebTransport

An async-native WebTransport stack for Python


PyPI version Python Version License: Apache 2.0 CI Coverage Docs

Features

  • Sans-I/O Architecture: Powered by an ownership-driven Rust state machine decoupled from an autonomous threaded reactor via a lock-free IPC boundary.
  • Transport Primitives: Full implementation of bidirectional streams, unidirectional streams, and unreliable datagrams.
  • Structured Concurrency: Deterministic lifecycle management for connections and streams via asynchronous context managers.
  • Zero-Copy I/O: End-to-end support for buffer protocols and memoryview to minimize data copying overhead.
  • Application Framework: Declarative ServerApp featuring path-based routing and composable stateful middleware.

Installation

pip install pywebtransport

Quick Start

Server

import asyncio

from pywebtransport import Event, ServerApp, ServerConfig, WebTransportSession, WebTransportStream
from pywebtransport.types import EventType
from pywebtransport.utils import generate_self_signed_cert

generate_self_signed_cert(hostname="localhost")

app = ServerApp(config=ServerConfig(certfile="localhost.crt", keyfile="localhost.key"))


@app.route(path="/")
async def echo_handler(session: WebTransportSession) -> None:
    async def on_datagram(event: Event) -> None:
        if isinstance(event.data, dict) and (data := event.data.get("data")):
            await session.send_datagram(data=b"ECHO: " + data)

    session.events.on(event_type=EventType.DATAGRAM_RECEIVED, handler=on_datagram)

    try:
        async for stream in session.incoming_bidirectional_streams():
            asyncio.create_task(handle_stream(stream))
    finally:
        session.events.off(event_type=EventType.DATAGRAM_RECEIVED, handler=on_datagram)


async def handle_stream(stream: WebTransportStream) -> None:
    try:
        data = await stream.read_all()
        await stream.write_all(data=b"ECHO: " + data, end_stream=True)
    except Exception:
        pass


if __name__ == "__main__":
    app.run(host="127.0.0.1", port=4433)

Client

import asyncio
import ssl

from pywebtransport import ClientConfig, WebTransportClient
from pywebtransport.types import EventType


async def main() -> None:
    config = ClientConfig(verify_mode=ssl.CERT_NONE)

    async with WebTransportClient(config=config) as client:
        session = await client.connect(url="https://127.0.0.1:4433/")

        await session.send_datagram(data=b"Hello, Datagram!")

        event = await session.events.wait_for(event_type=EventType.DATAGRAM_RECEIVED)
        if isinstance(event.data, dict) and (data := event.data.get("data")):
            print(f"Datagram: {data!r}")

        stream = await session.create_bidirectional_stream()
        await stream.write_all(data=b"Hello, Stream!", end_stream=True)

        response = await stream.read_all()
        print(f"Stream: {response!r}")

        await session.close()


if __name__ == "__main__":
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        pass

Interoperability

Infrastructure

Endpoints

  • /echo: Bidirectional stream and datagram reflection.
  • /stats: Current session statistics and negotiated parameters.
  • /status: Global server health and aggregate metrics.
  • /webtransport/devious-baton: Devious Baton protocol state transition validation.

Sponsors

License

Distributed under the terms of the Apache License 2.0. See LICENSE for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pywebtransport-0.20.0.tar.gz (777.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pywebtransport-0.20.0-cp312-abi3-win_arm64.whl (2.3 MB view details)

Uploaded CPython 3.12+Windows ARM64

pywebtransport-0.20.0-cp312-abi3-win_amd64.whl (2.4 MB view details)

Uploaded CPython 3.12+Windows x86-64

pywebtransport-0.20.0-cp312-abi3-manylinux_2_34_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.34+ x86-64

pywebtransport-0.20.0-cp312-abi3-manylinux_2_34_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.34+ ARM64

pywebtransport-0.20.0-cp312-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (4.6 MB view details)

Uploaded CPython 3.12+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file pywebtransport-0.20.0.tar.gz.

File metadata

  • Download URL: pywebtransport-0.20.0.tar.gz
  • Upload date:
  • Size: 777.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pywebtransport-0.20.0.tar.gz
Algorithm Hash digest
SHA256 dd6c4287a5f152ae4065605247cb0a24c185a8918a8a2a184e33a3dac1705693
MD5 e9753bb455ca7be051621a2e717794cb
BLAKE2b-256 3e79b406f0cf083fa2e82a8674d4075bc8c13d143ba4197041a47e8089fc6aee

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywebtransport-0.20.0.tar.gz:

Publisher: ci.yml on wtransport/pywebtransport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pywebtransport-0.20.0-cp312-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for pywebtransport-0.20.0-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 f329ccabe49863d73736416329540598d436827ee2c368813d9e146e5dc6ab72
MD5 524acbd106aa8186650fb9c61fcfb7b6
BLAKE2b-256 7b8d601dd6ab44583bfb5a59f337d7d356acc2044c2f337a970839ba840f5f95

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywebtransport-0.20.0-cp312-abi3-win_arm64.whl:

Publisher: ci.yml on wtransport/pywebtransport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pywebtransport-0.20.0-cp312-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for pywebtransport-0.20.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 d814621b10064f5ef17ed525bc41722c799e5909601879fdb72a65074790f7c9
MD5 ebf22731654456942f2ba59259e66abb
BLAKE2b-256 62e9f05849da9e98dc36d25af606ab963ce097fdd0c6608434fc5f314480304a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywebtransport-0.20.0-cp312-abi3-win_amd64.whl:

Publisher: ci.yml on wtransport/pywebtransport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pywebtransport-0.20.0-cp312-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for pywebtransport-0.20.0-cp312-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 ea4672a664ffd1494b54dd9d294ed11a9c0b595f059018c0b0907b9514e226c7
MD5 a499f4f95786a2cd78fbefbbde480fe4
BLAKE2b-256 6319dd3ef2a972c1d93a2d6522d0f043e4b8bee60204e08c658fd9c283552dfc

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywebtransport-0.20.0-cp312-abi3-manylinux_2_34_x86_64.whl:

Publisher: ci.yml on wtransport/pywebtransport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pywebtransport-0.20.0-cp312-abi3-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for pywebtransport-0.20.0-cp312-abi3-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 b2467e3016aeadae8fce96c3b667fbb6dc56dc5c5004e3344b6633524cb686c3
MD5 45832b15b0e6ca4367dd6ac437441752
BLAKE2b-256 996546caecf01c7a8d8c2e0ebc2498ca654a74ecbd818bc4803ff2e44ca46c41

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywebtransport-0.20.0-cp312-abi3-manylinux_2_34_aarch64.whl:

Publisher: ci.yml on wtransport/pywebtransport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pywebtransport-0.20.0-cp312-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for pywebtransport-0.20.0-cp312-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 4ffea7947ce94837212d244aeaa768cc575b746d47d8d8a632de1610fddcc874
MD5 3004d66595f78c6f99463852dc2e04fd
BLAKE2b-256 dc5abf75baa65adc0236bd1e18bc9cf5b25d43e086356f532661d566234eb0da

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywebtransport-0.20.0-cp312-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: ci.yml on wtransport/pywebtransport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page