Supply chain¶
A library that handles client private keys deserves scrutiny of how it is built and shipped. This page describes how releases are produced, so you can decide what to trust.
How a release is made¶
Published exclusively from GitHub Actions, from a tagged commit in the repository, via PyPI Trusted Publishing (OIDC). No long-lived PyPI tokens exist, so there is no publishing credential to steal.
PEP 740 digital attestations are generated for every artifact. Provenance is shown per file at pypi.org/project/httpx-pki.
The tag is verified against the code. The workflow checks that the release tag matches the package’s
__version__before building, so every release is auditable to exactly one commit.All GitHub Actions are pinned to full commit SHAs, not tags. Tags are mutable and have been repointed at malicious commits in real supply-chain attacks. Dependabot keeps the pins current.
Runtime dependencies¶
The footprint is deliberately small:
Package |
Why |
|---|---|
The HTTP client being extended |
|
Parsing and decrypting certificate material |
|
The OS trust store behind |
|
The bundle behind |
There are no optional runtime dependencies. See Install.
What you should do¶
Install with a lockfile that records hashes — as you would for any security-sensitive dependency:
$ uv lock
$ uv sync --locked
$ poetry lock
$ poetry install
$ pip-compile --generate-hashes
$ pip install --require-hashes -r requirements.txt
To verify a release yourself, check the attestations on the PyPI file listing against the tagged commit in the repository.
Next steps¶
Security notes — how key material is handled, and how to report an issue
SECURITY.md — the full policy