Skip to main content
PyWebTransport Logo

PyWebTransport

An async-native WebTransport stack


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.1.tar.gz (779.9 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.1-cp312-abi3-win_arm64.whl (2.3 MB view details)

Uploaded CPython 3.12+Windows ARM64

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

Uploaded CPython 3.12+Windows x86-64

pywebtransport-0.20.1-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.1-cp312-abi3-manylinux_2_34_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.34+ ARM64

pywebtransport-0.20.1-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.1.tar.gz.

File metadata

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

File hashes

Hashes for pywebtransport-0.20.1.tar.gz
Algorithm Hash digest
SHA256 570fd1fa08f3cd0c67b4e56fd8ad5ba729d2edb6dbaecebd05184af762e18eea
MD5 5140f9f2e2bf54f8cf831def86d9a415
BLAKE2b-256 b4e3dc6f1549eaabb868b899975a36e777bd11834165c06d3a49a2a371b44fe5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywebtransport-0.20.1.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.1-cp312-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for pywebtransport-0.20.1-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 260a2d8254590b5dbb5d0bde8012118c499e5d72f108e8e63a39d82ef004db4c
MD5 50f4419c67a9e74df3ff535d0a543575
BLAKE2b-256 36c73494da5de7bfaddc542d3dfeb4ea4962ad3e78c4cf503e8b70331d723b13

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywebtransport-0.20.1-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.1-cp312-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for pywebtransport-0.20.1-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 988882fde84554d01f6d98f417d4674150fc63e3c31f76dc2f2bfdd6aadc8df8
MD5 adf0a966e9f3e54a24b8521160d55487
BLAKE2b-256 a09852248ca1851d78c6447766321423a37e5d9d2cd3f79b50c792e1160781ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywebtransport-0.20.1-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.1-cp312-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for pywebtransport-0.20.1-cp312-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 e5a02ea74cea2e61e9864d18c21b5b608e0070021e513fe0c7bb860170ed2114
MD5 94b78b715cf07bb328f526be9522f143
BLAKE2b-256 d050040d18e10dea4592ed652893d0dd464ea8d618c000e5422922fd75440eee

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywebtransport-0.20.1-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.1-cp312-abi3-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for pywebtransport-0.20.1-cp312-abi3-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 cfc16c73dc5c6c6222f3ecf56f887c97df1c4d936685e0b2456c57d3a0b01343
MD5 037f85d1efa9a9d732743d32a440fb78
BLAKE2b-256 66d614639f42f2e45708276a73809a7a5c08006b07496acd62f4ddabdf7913a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywebtransport-0.20.1-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.1-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.1-cp312-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 74025f8709e2e4386d30e0f37ba0ca94679706939f2b51aecd20d9b503ebfc71
MD5 74e8a4544dade76b77f630712f0c7e5d
BLAKE2b-256 6c1c69891e99750cdb6d8b56f2f98179af19208ab9a8564220da2aab8d8c3e4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywebtransport-0.20.1-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