Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

webtransport-py

PyPI image License Actions status Discord

About Shiguredo's open source software

We will not respond to PRs or issues that have not been discussed on Discord. Also, Discord is only available in Japanese.

Please read https://github.com/shiguredo/oss/blob/master/README.en.md before use.

時雨堂のオープンソースソフトウェアについて

利用前に https://github.com/shiguredo/oss をお読みください。

webtransport-py について

webtransport-py は Sans I/O アーキテクチャを採用した WebTransport の Python ライブラリです。WebTransport over HTTP/3 と WebTransport over HTTP/2 の両方に対応しています。

また、WebTransport だけでなく QUIC、HTTP/3、HTTP/2 を単体のプロトコルとしても利用できます。asyncio、スレッド、独自のイベントループなど、任意の I/O フレームワークと組み合わせて利用できます。おまけとして QMux も Sans I/O API と asyncio API の両方を提供しています。

特徴

  • Sans I/O アーキテクチャ
    • I/O 処理をライブラリ外部で制御可能
    • 任意のイベントループやフレームワークと統合可能
    • Sans I/O
  • 二層 API 設計
    • Sans I/O API: プロトコル処理のみを提供する低レベル API
    • asyncio API: すぐに使える高レベルなクライアント/サーバー実装
  • WebTransport over HTTP/3
    • Sans I/O API と asyncio API の両方を提供
  • WebTransport over HTTP/2
    • Sans I/O API と asyncio API の両方を提供
  • QUIC
    • Sans I/O API と asyncio API の両方を提供
    • 双方向/単方向ストリーム
    • QUIC DATAGRAM
    • 0-RTT / Session Resumption
    • 証明書のカスタム検証
    • Connection Migration
    • ngtcp2 を採用
  • HTTP/3
    • Sans I/O API と asyncio API の両方を提供
    • nghttp3 を採用
  • HTTP/2
    • Sans I/O API と asyncio API の両方を提供
    • nghttp2-v2 を採用
  • QMux
    • 任意の双方向バイトストリーム上でストリーム多重化を提供
    • Sans I/O API と asyncio API の両方を提供
    • dwnx を採用
    • DATAGRAM は未対応
  • 依存ライブラリは deps.json で特定のタグ / コミットに固定する
    • ngtcp2 / nghttp3 / dwnx は上流ブランチの特定コミット (ref)、nghttp2-v2 / AWS-LC はタグ (tag) で固定する
    • 更新時は deps.json を書き換える (ビルドキャッシュのキーも deps.json の内容に連動する)
  • Python Free-Threading 対応
    • PEP 703 – Making the Global Interpreter Lock Optional in CPython | peps.python.org
    • Python Free-Threading Guide
    • 同一オブジェクトへの並行アクセスはオブジェクト単位の排他で保護する (接続・セッション系クラスの公開メソッドが対象。生成系 static・設定・イベント等の値オブジェクトは対象外)。Config は単一スレッドで構築し、共有後の並行書き換えは行わないこと。quic.Config の検証コールバック内で同一 quic.Connection のメソッドを呼ばないこと
  • クロスプラットフォーム対応
    • Ubuntu x86_64 / arm64
    • macOS arm64

インストール

uv add webtransport-py

使い方

WebTransport

HTTPVersion で HTTP/2 (TCP + TLS) と HTTP/3 (UDP + QUIC) を選ぶ。既定は HTTP/3。

クライアント

import asyncio

from webtransport import Client, HTTPVersion, WebTransportError


async def main() -> None:
    client = Client(
        url="https://localhost:4433/webtransport",
        http_version=HTTPVersion.HTTP3,
        verify_peer=False,
    )

    async def on_datagram(data: bytes) -> None:
        print(f"データグラム受信: {data}")

    client.on_datagram(on_datagram)

    try:
        await client.connect()
    except WebTransportError as exc:
        print(f"接続失敗: {exc}")
        await client.close()
        return

    await client.send_datagram(b"Hello, WebTransport!")

    try:
        await asyncio.wait_for(client.run(), timeout=5.0)
    except TimeoutError:
        pass

    await client.close()


asyncio.run(main())

サーバー

import asyncio

from webtransport import Client, HTTPVersion, Server, Session


async def main() -> None:
    server = Server(
        host="0.0.0.0",
        port=4433,
        http_version=HTTPVersion.HTTP3,
        certfile="cert.pem",
        keyfile="key.pem",
    )

    async def on_datagram(session: Session, data: bytes) -> None:
        # セッションハンドル経由で返す
        await session.send_datagram(data)

    server.on_datagram(on_datagram)

    async with server:
        await server.run()


asyncio.run(main())

http_version に HTTPVersion.HTTP2 を渡すと WebTransport over HTTP/2 になる (certfile / keyfile が必須)。プロトコル固有の API は client.h3 / client.h2 / server.h3 / server.h2 から呼ぶ。

低レベル (Sans-IO) API と全 API のリファレンスは skills/webtransport-py/SKILL.md を参照。

QUIC

クライアント

import asyncio

from webtransport import quic


async def main() -> None:
    client = quic.Client(
        host="localhost",
        port=4433,
        verify_peer=False,
    )

    if not await client.connect():
        print("接続失敗")
        return

    # 双方向ストリームを開いてデータ送信 (FIN でストリームを閉じる)
    stream_id = await client.open_stream(bidirectional=True)
    await client.send_stream_data(stream_id, b"Hello, QUIC!", fin=True)

    # サーバーからのエコーを FIN まで受信する
    try:
        data, _ = await client.recv_stream_data(stream_id, timeout=5.0)
        print(f"データ受信: {data}")
    except TimeoutError:
        print("受信タイムアウト")

    await client.close()


if __name__ == "__main__":
    asyncio.run(main())

サーバー

import asyncio

from webtransport import quic


async def main() -> None:
    server = quic.Server(
        host="0.0.0.0",
        port=4433,
        certfile="cert.pem",
        keyfile="key.pem",
    )

    async def on_handshake_completed(addr: tuple[str, int]) -> None:
        print(f"ハンドシェイク完了: {addr}")

    async def on_stream_data(
        stream_id: int,
        data: bytes,
        fin: bool,
        addr: tuple[str, int],
    ) -> None:
        print(f"データ受信: {data}")
        # エコーバック
        await server.send_stream_data(addr, stream_id, data, fin)

    server.on_handshake_completed(on_handshake_completed)
    server.on_stream_data(on_stream_data)

    async with server:
        print(f"サーバー開始: {server.host}:{server.actual_port}")
        await server.run()


if __name__ == "__main__":
    asyncio.run(main())

HTTP/3

クライアント

import asyncio

from webtransport import http3


async def main() -> None:
    client = http3.Client(
        host="localhost",
        port=4433,
        verify_peer=False,
    )

    async def on_headers(stream_id: int, headers: list[tuple[str, str]]) -> None:
        print(f"ヘッダー受信 (stream_id={stream_id}): {headers}")

    async def on_data(stream_id: int, data: bytes) -> None:
        print(f"データ受信: {data}")

    client.on_headers(on_headers)
    client.on_data(on_data)

    await client.connect()
    await client.request("GET", "/")

    try:
        await asyncio.wait_for(client.run(), timeout=5.0)
    except TimeoutError:
        pass

    await client.close()


if __name__ == "__main__":
    asyncio.run(main())

サーバー

import asyncio

from webtransport import http3


async def main() -> None:
    server = http3.Server(
        host="0.0.0.0",
        port=4433,
        certfile="cert.pem",
        keyfile="key.pem",
    )

    async def on_request(
        stream_id: int,
        headers: list[tuple[str, str]],
        addr: tuple[str, int],
    ) -> None:
        print(f"リクエスト受信 (stream_id={stream_id}): {headers}")

    async def on_stream_end(stream_id: int, addr: tuple[str, int]) -> None:
        response_headers: list[tuple[str, str]] = [
            (":status", "200"),
            ("content-type", "text/plain"),
        ]
        await server.submit_response(addr, stream_id, response_headers)
        await server.send_data(addr, stream_id, b"Hello from HTTP/3 server!", fin=True)

    server.on_request(on_request)
    server.on_stream_end(on_stream_end)

    async with server:
        print("Ctrl+C で終了")
        try:
            await server.run()
        except KeyboardInterrupt:
            pass


if __name__ == "__main__":
    asyncio.run(main())

HTTP/2

クライアント

import asyncio

from webtransport import http2


async def main() -> None:
    client = http2.Client(
        host="localhost",
        port=8443,
        verify_peer=False,
    )

    async def on_headers(stream_id: int, headers: list[tuple[str, str]]) -> None:
        print(f"ヘッダー受信 (stream_id={stream_id}): {headers}")

    async def on_data(stream_id: int, data: bytes) -> None:
        print(f"データ受信: {data}")

    client.on_headers(on_headers)
    client.on_data(on_data)

    await client.connect()
    await client.request("GET", "/")

    try:
        await asyncio.wait_for(client.run(), timeout=5.0)
    except TimeoutError:
        pass

    await client.close()


if __name__ == "__main__":
    asyncio.run(main())

サーバー

import asyncio

from webtransport import http2


async def main() -> None:
    server = http2.Server(
        host="0.0.0.0",
        port=8443,
        certfile="cert.pem",
        keyfile="key.pem",
    )

    async def on_request(
        stream_id: int,
        headers: list[tuple[str, str]],
        response_writer: http2.ResponseWriter,
    ) -> None:
        print(f"リクエスト受信 (stream_id={stream_id}): {headers}")

    async def on_stream_end(
        stream_id: int,
        response_writer: http2.ResponseWriter,
    ) -> None:
        response_headers: list[tuple[str, str]] = [
            (":status", "200"),
            ("content-type", "text/plain"),
        ]
        await response_writer.send_headers(stream_id, response_headers)
        await response_writer.send_data(
            stream_id,
            b"Hello from HTTP/2 server!",
            end_stream=True,
        )

    server.on_request(on_request)
    server.on_stream_end(on_stream_end)

    async with server:
        print("Ctrl+C で終了")
        try:
            await server.run()
        except KeyboardInterrupt:
            pass


if __name__ == "__main__":
    asyncio.run(main())

QMux

QMux (draft-ietf-quic-qmux) は任意の双方向バイトストリーム上でストリーム多重化を提供するプロトコルです。

クライアント

import asyncio

from webtransport import qmux


async def main() -> None:
    client = qmux.Client("127.0.0.1", 4433)

    async def on_stream_data(stream_id: int, data: bytes, fin: bool) -> None:
        print(f"ストリームデータ受信: {data}")

    client.on_stream_data(on_stream_data)

    await client.connect()
    stream_id = await client.open_stream()
    await client.send_stream_data(stream_id, b"Hello, QMux!", fin=True)
    await asyncio.wait_for(client.run(), timeout=5.0)
    await client.close()


asyncio.run(main())

サーバー

import asyncio

from webtransport import qmux


async def main() -> None:
    server = qmux.Server("127.0.0.1", 4433)

    async def on_stream_data(
        session: qmux.Session,
        stream_id: int,
        data: bytes,
        fin: bool,
    ) -> None:
        # 双方向ストリームのみエコーする
        if stream_id % 4 == 0:
            await session.send_stream_data(stream_id, data, fin=fin)

    server.on_stream_data(on_stream_data)

    await server.start()
    await server.run()


asyncio.run(main())

ssl に SSLContext を渡すと TLS 上で動きます (alpn_protocols が必須です)。

from webtransport import qmux

config = qmux.Config()
client = qmux.Connection.create_client(config)
server = qmux.Connection.create_server(config)

# 受け取ったバイト列を渡し、送信すべきレコードを取り出す
client.receive(record_from_peer)
record = client.pending_record

レコード (varint の長さ + QUIC フレーム列) をバイト列として入出力します。トランスポートパラメータは帯域内で交換するため、TLS が無くても 2 つの接続をバイト列で直結すればハンドシェイクできます。

Python

  • 3.14
  • 3.14t
  • 3.15
  • 3.15t

プラットフォーム

  • Ubuntu 26.04 LTS x86_64
  • Ubuntu 26.04 LTS arm64
  • Ubuntu 24.04 LTS x86_64
  • Ubuntu 24.04 LTS arm64
  • macOS 26 arm64

リリースビルド

make wheel

開発ビルド

make develop

テスト

uv sync
make test

サンプル

examples/ ディレクトリにサンプルコードがあります。

第三者ライセンス

本プロジェクトは ngtcp2 / nghttp3 / nghttp2-v2 / dwnx / AWS-LC / nanobind (同梱の tsl::robin_map を含む) を静的リンクしています。各ライセンス全文は THIRD_PARTY_LICENSES.md を参照してください。

ライセンス

Apache License 2.0

Copyright 2026 Shiguredo Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Metadata

Release files for webtransport-py 2026.1.0.dev29

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for webtransport-py 2026.1.0.dev29
File
webtransport_py-2026.1.0.dev29-cp315-cp315t-manylinux_2_39_x86_64.whl CPython 3.15 CPython 3.15 free-threading Linux glibc 2.39+ x86-64 Details
webtransport_py-2026.1.0.dev29-cp315-cp315t-manylinux_2_39_aarch64.whl CPython 3.15 CPython 3.15 free-threading Linux glibc 2.39+ ARM64 Details
webtransport_py-2026.1.0.dev29-cp315-cp315t-macosx_26_0_arm64.whl CPython 3.15 CPython 3.15 free-threading macOS 26.0+ ARM64 Details
webtransport_py-2026.1.0.dev29-cp315-cp315-manylinux_2_39_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.39+ x86-64 Details
webtransport_py-2026.1.0.dev29-cp315-cp315-manylinux_2_39_aarch64.whl CPython 3.15 CPython 3.15 Linux glibc 2.39+ ARM64 Details
webtransport_py-2026.1.0.dev29-cp315-cp315-macosx_26_0_arm64.whl CPython 3.15 CPython 3.15 macOS 26.0+ ARM64 Details
webtransport_py-2026.1.0.dev29-cp314-cp314t-manylinux_2_39_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.39+ x86-64 Details
webtransport_py-2026.1.0.dev29-cp314-cp314t-manylinux_2_39_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.39+ ARM64 Details
webtransport_py-2026.1.0.dev29-cp314-cp314t-macosx_26_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 26.0+ ARM64 Details
webtransport_py-2026.1.0.dev29-cp314-cp314-manylinux_2_39_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.39+ x86-64 Details
webtransport_py-2026.1.0.dev29-cp314-cp314-manylinux_2_39_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.39+ ARM64 Details
webtransport_py-2026.1.0.dev29-cp314-cp314-macosx_26_0_arm64.whl CPython 3.14 CPython 3.14 macOS 26.0+ ARM64 Details

Total release size: 26.3 MB

Release files / webtransport_py-2026.1.0.dev29-cp315-cp315t-manylinux_2_39_x86_64.whl

Download URL webtransport_py-2026.1.0.dev29-cp315-cp315t-manylinux_2_39_x86_64.whl
Size 2.4 MB
Tags CPython 3.15 CPython 3.15 free-threading Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
6555e028d1d5769b487b0a314a41d33853dcf7f04e1613a4bdfd3a0372381465
BLAKE2b-256 checksum
How to use checksums
7e9caae1398cbcec210cc2da9d2793ccc82fa319f0ea308e666876697a167d14
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / webtransport_py-2026.1.0.dev29-cp315-cp315t-manylinux_2_39_aarch64.whl

Download URL webtransport_py-2026.1.0.dev29-cp315-cp315t-manylinux_2_39_aarch64.whl
Size 2.2 MB
Tags CPython 3.15 CPython 3.15 free-threading Linux glibc 2.39+ ARM64
SHA-256 checksum
How to use checksums
828322985c29c43ad3b4f6fbd8d322e09fd59cac20b675dc6114dc88ccd66d24
BLAKE2b-256 checksum
How to use checksums
f13a320aef2e28fd37bcb02afb20065016102a2434c0afcc3735053bdf5b8c77
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / webtransport_py-2026.1.0.dev29-cp315-cp315t-macosx_26_0_arm64.whl

Download URL webtransport_py-2026.1.0.dev29-cp315-cp315t-macosx_26_0_arm64.whl
Size 2.0 MB
Tags CPython 3.15 CPython 3.15 free-threading macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
58ed2531df34cc4cc3d00fde72055fa8ad735a7537e751547713b8009237fe4d
BLAKE2b-256 checksum
How to use checksums
1aa2edd395ff61d07691edb3437e9644e2e80f0784e1f479d47af17151d89916
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / webtransport_py-2026.1.0.dev29-cp315-cp315-manylinux_2_39_x86_64.whl

Download URL webtransport_py-2026.1.0.dev29-cp315-cp315-manylinux_2_39_x86_64.whl
Size 2.4 MB
Tags CPython 3.15 Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
cdbf152691b671be128c8e939da78d1c3e558e9f56f9e010e44c51868ea343e9
BLAKE2b-256 checksum
How to use checksums
c169b61c091fab9233003668172e6ee66aa8921ffa403e90caf8204d31850735
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / webtransport_py-2026.1.0.dev29-cp315-cp315-manylinux_2_39_aarch64.whl

Download URL webtransport_py-2026.1.0.dev29-cp315-cp315-manylinux_2_39_aarch64.whl
Size 2.2 MB
Tags CPython 3.15 Linux glibc 2.39+ ARM64
SHA-256 checksum
How to use checksums
48d49f81ddc8c473c9ac39836ed9136024b28f027a0f912f4dce59fd75e2e8b7
BLAKE2b-256 checksum
How to use checksums
548525c4dec468082aacd786c522ee4112a8b04fdad44525e617415dc2720b3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / webtransport_py-2026.1.0.dev29-cp315-cp315-macosx_26_0_arm64.whl

Download URL webtransport_py-2026.1.0.dev29-cp315-cp315-macosx_26_0_arm64.whl
Size 2.0 MB
Tags CPython 3.15 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
8e214ebc1fd8fec33f26820305bcae2c0815d218548b0b5307c353db03d0a02b
BLAKE2b-256 checksum
How to use checksums
f2666c3c60b76dcbbbdaf34f5ce1e50fae8119c1a9e81fade5e5b99df98c74eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / webtransport_py-2026.1.0.dev29-cp314-cp314t-manylinux_2_39_x86_64.whl

Download URL webtransport_py-2026.1.0.dev29-cp314-cp314t-manylinux_2_39_x86_64.whl
Size 2.4 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
2e48057b00f555cff06267f34dc04e6063a48f60dad09e96368b4def609bd23f
BLAKE2b-256 checksum
How to use checksums
7ed77eff7d36d25784af2c09a838b61d7258b9c4f02c7ed8a20e7f62a903e669
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / webtransport_py-2026.1.0.dev29-cp314-cp314t-manylinux_2_39_aarch64.whl

Download URL webtransport_py-2026.1.0.dev29-cp314-cp314t-manylinux_2_39_aarch64.whl
Size 2.2 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.39+ ARM64
SHA-256 checksum
How to use checksums
5973d8c6a515d113a2180bc162c96a9ed6bca1d9a4d6751118210b3e026a617d
BLAKE2b-256 checksum
How to use checksums
5dae16221ee12813e09e968e1000569123c9f742819729bb7702897f1bb32afd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / webtransport_py-2026.1.0.dev29-cp314-cp314t-macosx_26_0_arm64.whl

Download URL webtransport_py-2026.1.0.dev29-cp314-cp314t-macosx_26_0_arm64.whl
Size 2.0 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
72b7c3f7860256d24a8e8476b671f60dd25108d218fc51ad7e2056e9b3f047ad
BLAKE2b-256 checksum
How to use checksums
9c7b6f0979f7321e3018287b3448f9b7b36b67f0c2bcbdb574ece183ab613aa6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / webtransport_py-2026.1.0.dev29-cp314-cp314-manylinux_2_39_x86_64.whl

Download URL webtransport_py-2026.1.0.dev29-cp314-cp314-manylinux_2_39_x86_64.whl
Size 2.4 MB
Tags CPython 3.14 Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
20719f7c667fbb5734a8ace53c53203a91a46e7fe649927c16e5ce62b58746a7
BLAKE2b-256 checksum
How to use checksums
b2efd9131c9c913b770c1d7da9c36a82a44a834b84eff87920ca011ea2968304
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / webtransport_py-2026.1.0.dev29-cp314-cp314-manylinux_2_39_aarch64.whl

Download URL webtransport_py-2026.1.0.dev29-cp314-cp314-manylinux_2_39_aarch64.whl
Size 2.2 MB
Tags CPython 3.14 Linux glibc 2.39+ ARM64
SHA-256 checksum
How to use checksums
25bec57b19d7077ac139ce012aa3a8183b0138a9a45f39e02a011bcc59d2ac6c
BLAKE2b-256 checksum
How to use checksums
1cc4159a6ec139ffc77679f668fa177a871ff777fc139c430daf8bb96e64121d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / webtransport_py-2026.1.0.dev29-cp314-cp314-macosx_26_0_arm64.whl

Download URL webtransport_py-2026.1.0.dev29-cp314-cp314-macosx_26_0_arm64.whl
Size 2.0 MB
Tags CPython 3.14 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
d0f1ac158d7e57fc1cd515192f0cb56c484c1034f478dbf24720c78947263b20
BLAKE2b-256 checksum
How to use checksums
0eba8e4bede0480e742a4afb07fb559aa233f89a6147a35d8bdaf5f1ceb6a609
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page