livekit-gateway
A LiveKit agents ↔ Plivo audio-stream bridge. Regular livekit-agents runs
unchanged; calls land on Plivo numbers and route through this gateway
via audio stream instead of a LiveKit SFU.
Install
pip install livekit-gateway
Wheel includes prebuilt artifacts for macosx_arm64 (Apple Silicon)
and manylinux2014_{x86_64,aarch64}. Intel Macs aren't covered by
prebuilt wheels and need to build from source.
Quick start
# my_agent.py — stock livekit-agents, no modifications
import livekit_gateway # MUST come before any livekit import
from livekit.agents import AgentServer, AgentSession, JobContext, JobProcess, cli
from livekit.plugins import deepgram, openai, silero
def prewarm(proc: JobProcess) -> None:
# Loaded once per idle child, reused across all calls that child handles.
# Without this, every call rebuilds Silero / Deepgram / OpenAI clients
# on the hot path (~200-300 ms per call).
proc.userdata["vad"] = silero.VAD.load()
proc.userdata["stt"] = deepgram.STT(model="nova-3", language="en")
proc.userdata["llm"] = openai.LLM(model="gpt-4o-mini")
proc.userdata["tts"] = openai.TTS(model="tts-1", voice="alloy")
# `num_idle_processes` is the size of livekit-agents' warm child pool.
# Each idle child is a Python interpreter that has already run `prewarm`
# above; when a call lands, one is picked off the pool instantly (no
# fork + import + plugin-load on the hot path). Set this to your
# expected concurrent-call peak; on a small box, 2 is a fine start.
server = AgentServer(num_idle_processes=2)
server.setup_fnc = prewarm
@server.rtc_session()
async def entrypoint(ctx: JobContext):
# `LIVEKIT_URL` is auto-set to the local gateway WS by `import
# livekit_gateway` above (dev mode) or supplied by env (production —
# `ws://<gateway-host>:7880`). You don't dial Plivo from here; Plivo
# dials the gateway's answer URL and the gateway dispatches this
# entrypoint with the call's metadata already populated in
# `ctx.room`.
session = AgentSession(
stt=ctx.proc.userdata["stt"],
llm=ctx.proc.userdata["llm"],
tts=ctx.proc.userdata["tts"],
vad=ctx.proc.userdata["vad"],
)
await ctx.connect()
await session.start(agent=..., room=ctx.room)
if __name__ == "__main__":
cli.run_app(server)
python my_agent.py dev
That's it. import livekit_gateway auto-spawns the gateway
subprocess if it isn't already running, sets LIVEKIT_URL to point
at it, and tears it down when Python exits. Plivo webhook + agent
worker registration + audio relay all happen behind the scenes.
Plivo side still needs one-time setup — see Plivo configuration below.
Production
Run the gateway as a long-lived service and the agent in start mode (warm pool, not dev's cold fork):
livekit-gateway # terminal 1
LKG_NO_AUTO_GATEWAY=1 LIVEKIT_URL=ws://localhost:7880 python my_agent.py start # terminal 2
Run the gateway under systemd (or any supervisor) so it survives agent restarts and existing calls don't drop. Multi-host scaling: run one gateway per host with the agent registering at it; if you point N agent workers at one gateway, the gateway round-robins jobs across the least-loaded ones.
Configure
All non-secret gateway settings live in config.toml at the repo root (or wherever $LKG_CONFIG_PATH points). Every key is documented inline in that file — [server] for ports + public host, [http] for endpoint paths, [stream] for every Plivo <Stream> attribute, [call_insights] for the per-call observability summary. Secrets (PLIVO_AUTH_ID, PLIVO_AUTH_TOKEN) are env-only.
Plivo configuration
Two URLs to set on your Plivo Application (Plivo Console → Voice → XML
Applications). Both point at the same public hostname; only the paths
differ, and both paths are configurable via [http] in config.toml.
- Answer URL →
https://<your-gateway>/answer([http] answer_path, default/answer). When a call lands, Plivo POSTs the call's form fields here (CallUUID, From, To, Direction, AccountSID) and the gateway replies with a<Stream>XML pointing back at the WSS audio endpoint with those fields appended as query params. - Hangup URL / Status Callback URL →
https://<your-gateway>/status([http] status_path, default/status). Plivo POSTs call lifecycle events here (hangup, streamstart/stop, etc.); the gateway uses these to close out the matching session cleanly.
Releasing
PyPI wheels ship from CI; nothing is built locally for release. The flow mirrors agent-transport's:
-
Bump the version in:
python/pyproject.toml(versionunder[project])python/livekit_gateway/__init__.py(__version__)
Use the
bump-versionskill — it asks for the target version, confirms, and edits both files in one pass. -
Open a PR with only the version bump. Do not mix release bumps with feature changes.
-
Apply label
release-python-sdkto the PR. -
Merge to
main. CI takes it from there:- Build Python (
.github/workflows/build-python.yml) builds wheels formacosx_arm64andmanylinux2014_{x86_64,aarch64}. - Publish Python (
.github/workflows/publish-python.yml) downloads them, publishes to PyPI via the trusted publisher (OIDC, no token), and creates apython-vX.Y.ZGitHub Release with notes auto-built from PRs labelledcoreorpythonsince the previous tag.
- Build Python (
The PyPI description is sourced from python/README.md, which the Build Python workflow rewrites from the repo-root README.md before each cibuildwheel run. So edit only the root README; CI keeps them in sync. (python/README.md is kept in the tree because pyproject.toml's readme = pointer resolves relative to that directory — without the file, local pip install -e ./python would fail.)
The Rust workspace version in Cargo.toml is decoupled — nothing publishes those crates user-facing, so bumping is cosmetic. Leave it unless you have a reason.
Prerequisites (one-time)
- PyPI: trusted publisher for
livekit-gatewaypointing atpublish-python.yml(no environment configured — the workflow doesn't claim one). See https://docs.pypi.org/trusted-publishers/. - GitHub: label
release-python-sdk.
Release notes
The publish workflow filters PRs since the last python-v* tag down to those labelled core or python, then prepends them as the release body. Apply one of those labels on feature/fix PRs you want surfaced in the changelog. Release-bump PRs themselves should only carry release-python-sdk (no python / core — otherwise the bump PR title shows up in its own notes).
License
MIT.
Metadata
Release files for livekit-gateway 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 48.0 MB
Release files / livekit_gateway-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | livekit_gateway-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
ee53318d6f23b5bb6630624d39a2425293d62d6dad8f7911adaac685d70a2af8
|
|
BLAKE2b-256 checksum How to use checksums |
9ed7f2b00581d4d5d3f38e3b47e9a26022c51da97dc792aa717dc8045f281ec8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | livekit_gateway-0.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
d7af8e933635c29d44386ba3fbffe7ebf3b55a99b1aa005050a5acf304de8560
|
|
BLAKE2b-256 checksum How to use checksums |
082e742ee5b65470f198125ae27ea5b7e0140e9e71b89874d166abf8704353d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | livekit_gateway-0.1.2-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
1951b5f70d3ad9684c234bffd8845c85cf1d1635d4969a2830177996f89ccab2
|
|
BLAKE2b-256 checksum How to use checksums |
ebd673f4845b6c00c6412496cc4560c1c21539e09ace6680050a04d5ba02f528
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | livekit_gateway-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
55321a12b01b41f3bfc3f6f95e93be035f3be2cee61a54af1541db33e38de7e1
|
|
BLAKE2b-256 checksum How to use checksums |
ed97c82d6cb4ab842e4d36fd1926ac752c8499dff9c92b9110a62d65a26453f3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | livekit_gateway-0.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
c33defa3f4e56eb17557c0ba302cbe89a35383e441c93876ed542d93416b600c
|
|
BLAKE2b-256 checksum How to use checksums |
726a069bdd6dd574e756d1c46bead18e3aa5e7ae9329d972dd612aeb1283500c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | livekit_gateway-0.1.2-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
07563bfcf37a04a29ad42fee84ab3b9b7882510a1b1d2999dcca0e1e3e597d86
|
|
BLAKE2b-256 checksum How to use checksums |
a2b4d3e42f2a3a74fec302b5c72cab4722d10bde5b19dbc8648c6358262ce133
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | livekit_gateway-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
9fa6f145716620b25a2b4d3c2889504e13c327bc4dbfa2493db9395a8f5e1617
|
|
BLAKE2b-256 checksum How to use checksums |
739fc976f264eec9b5f43484d8bf39d9b00b100fc16019085de87ea189c62c91
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | livekit_gateway-0.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
aa273c31b530fb00b81bb7ccc262136f0d7cc90a84120c96f80975e03d9f514f
|
|
BLAKE2b-256 checksum How to use checksums |
1e15a629437509fc0486b6f1f197e73e99589249043e559a75e3cb783044f172
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | livekit_gateway-0.1.2-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
579857398666acf25ad2cf13458f311d5ec09972c5c2e7420c5386e5f3bc06af
|
|
BLAKE2b-256 checksum How to use checksums |
30910d681fee25f4ca617df49790e597c014f082e1c223c6aeea51f00531c95a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | livekit_gateway-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
7e3c9c39cd269cdeaed473dc61a9423a6fa500966a8b342544dfd24d85d6479d
|
|
BLAKE2b-256 checksum How to use checksums |
b89e99e80239139ff6b18cc6f9522fd9c9bc9336c48f781f1d7dcf114f1a545f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | livekit_gateway-0.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
30dca26d7f0268cbb28e359411ef6056cc6ad809d6a4310d799d1809b7dd14c1
|
|
BLAKE2b-256 checksum How to use checksums |
6f1cd88744b479ff51060c6e83d90279e9b0c836034c57ad852cee2a93ba7f5e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | livekit_gateway-0.1.2-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
33298e9484dc639a706c4de6843ee346db53bb0a4b198a333d8d14c76b0163a1
|
|
BLAKE2b-256 checksum How to use checksums |
ed5f1a4a3eb07779693b5b36ab6f80729b779605dd6901b4ef4ebc802176806c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | livekit_gateway-0.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
6820d66f9e62cdce84fc557bcd8e61f79f48d9d4d49cc5c9ac27e8d54c762ce6
|
|
BLAKE2b-256 checksum How to use checksums |
8d59529dadda52805a7a5ebefae3fd5a368b6c29c6e661d4c6bb163fbef59ba8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | livekit_gateway-0.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
2dd41ff7526baee74d100aa01c09b61647c1e927bb03d3474fef5e11c6d0d035
|
|
BLAKE2b-256 checksum How to use checksums |
7038a729470e41879cc59fbb857169d66280247ab7d5c2689aab414e9d154216
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logRelease files / livekit_gateway-0.1.2-cp39-cp39-macosx_11_0_arm64.whl
| Download URL | livekit_gateway-0.1.2-cp39-cp39-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | CPython 3.9 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0af9538bbc645bd26275e606e24ea9e914b15ac2c3ae908a7334fc144e0a839d
|
|
BLAKE2b-256 checksum How to use checksums |
92a648c04799962b46603c4972af344158b0227637901d9c3aeeb266d1ef69fc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 19, 2026.
Transparency logSecurity for livekit-gateway 0.1.2
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.
Full provenance
All 15 files in this release have been uploaded with provenance metadata.
Attestation for livekit_gateway-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
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 May 19, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.