Skip to main content

BoringSSL-backed TLS for CPython, with Chrome impersonation

Drop-in replacement for the ssl stdlib with a Fingerprint API for Chrome impersonation. Built on stock BoringSSL through boring-sys - no curl-impersonate, no Go runtime at import time. Use it with any known Python http client you like or used to.

Supports CPython 3.7 onward, including freethreaded builds.

Why this exists

We sat on this for a long time, kept it private as we needed to think longer about whether the world really needed one more TLS library.

The initial thinking was: why do I have to install yet whole another http client just because we need to look like a real browser? The Python ecosystem already ships perfectly fine http clients - urllib3, niquests, httpx, aiohttp - and all of them ride on top of ssl. If the impersonation lives one layer down, in the SSL layer itself, every one of them gets it for free. No fork of curl, no Go runtime imported at module load, no second http client to teach your codebase, no patched BoringSSL to maintain across CVE cycles.

That is what utls is: the ClientHello machinery, plugged in exactly where the rest of Python already plugs in.

It was private until now. Enjoy it, but with care - browser impersonation has legitimate uses (interop testing, anti-bot researches, making sure your own service still answers a real Chrome correctly) and it has illegitimate ones. The license forbids nothing; your judgment does.

Contributions are welcome. New Chrome versions are one profile module plus one registry line; platform fixes, bug reports and CI cleanups are read and merged.

Getting Started

Install from PyPI (pre-built wheels for Linux, macOS, and Windows):

pip install utls

Then swap ssl for utls anywhere in your code:

import utls as ssl

ctx = ssl.create_default_context()

Or use it alongside the stdlib:

from utls import SSLContext, PROTOCOL_TLS_CLIENT

ctx = SSLContext(PROTOCOL_TLS_CLIENT)
ctx.load_default_certs()

import socket
sock = socket.create_connection(("example.com", 443))
ssock = ctx.wrap_socket(sock, server_hostname="example.com")
ssock.sendall(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
print(ssock.recv(4096).decode())

It works with asyncio out of the box:

import asyncio
import utls as ssl

async def main():
    ctx = ssl.create_default_context()
    reader, writer = await asyncio.open_connection("example.com", 443, ssl=ctx)
    writer.write(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
    await writer.drain()
    print((await reader.read(4096)).decode())
    writer.close()

asyncio.run(main())

Browser impersonation

import utls, socket

ctx = utls.create_default_context()
ctx.set_fingerprint("chrome:stable")

with socket.create_connection(("www.google.com", 443)) as raw:
    with ctx.wrap_socket(raw, server_hostname="www.google.com") as s:
        s.sendall(b"GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n")
        print(s.recv(4096))

The bundled profile registry can be inspected at runtime:

from utls import Fingerprint, presets

print(presets())
# ['chrome:131', 'chrome:142', 'chrome:146', 'chrome:148', 'chrome:150', 'chrome:152', 'chrome:stable']

fp = Fingerprint.from_preset("chrome:stable")
print(fp.ja3_hash, fp.ja4_hash)

Profiles ship as plain Python modules under utls.profiles.*. utls is Chrome-only by design. Adding a new Chrome version is one .py file plus one registry line.

What impersonation actually rewrites

set_fingerprint controls the TLS ClientHello bytes: cipher suite list and order, extension list and order, named groups, key shares, signature algorithms, ALPN/ALPS payloads, GREASE placement, certificate compression, explicit ECH GREASE or real config, and so on. Everything that goes into a JA3 or JA4 hash, utls drives.

What it does not rewrite, because they live above TLS:

  • The HTTP request line, method, path, and body.
  • HTTP/2 SETTINGS frames, WINDOW_UPDATE values, HEADERS frame priority flags, and the Akamai HTTP/2 fingerprint that some bot-detection vendors track. Those belong to your HTTP client; pair utls with niquests or urllib3-future if you need them honored end-to-end.

Carrying the canonical Chrome header set

Each profile also publishes the exact HTTP request-header set Chrome sends on a top-level navigation, in the on-the-wire insertion order. The HTTP layer is yours to drive, but the headers are right there if you want matched cosmetics:

from utls import Fingerprint

fp = Fingerprint.from_preset("chrome:stable")
for name, value in fp.http_headers.items():
    print(f"{name}: {value}")
# sec-ch-ua: "Chromium";v="148", "Google Chrome";v="148", "Not/A)Brand";v="99"
# sec-ch-ua-mobile: ?0
# sec-ch-ua-platform: "Linux"
# User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ...
# Accept: text/html,application/xhtml+xml,...
# ...

Request- or session-dependent headers (Host, Cookie, Referer, Content-Length, Content-Type) are deliberately omitted from the dict; the HTTP client is responsible for emitting those. For HTTP/1.1, prepend Host at position 0 to preserve Chrome's wire order.

Choosing a profile

  • chrome:stable always tracks the newest Chrome major shipped in a utls release. Use this if you want to drift with Chrome without code changes.
  • chrome:152, chrome:150, chrome:148, chrome:146, chrome:142, chrome:131 pin to specific Chrome majors. Use these when reproducibility matters - e.g. a long-running scraper that should not silently change shape when utls is upgraded.

The JA4 hash is the fingerprint identity that bot-detection vendors and TLS observatories actually index on. chrome:142 / chrome:146 / chrome:148 share the same JA4 because they share the same TLS-layer ClientHello (the deltas are HTTP-layer); chrome:131 differs because it uses the legacy ALPS codepoint (0x4469 vs 0x44cd). chrome:150 also differs: it is the first stable major to advertise post-quantum ML-DSA (FIPS 204) signature algorithms, which changes the signature_algorithms bytes and therefore the JA4. chrome:152 adds the trust_anchors extension (0xCA34), taking the JA4 extension count from 16 to 17.

Why JA3 varies but JA4 stays put

Chrome 110+ permutes its TLS extension order on every connection to defeat order-based fingerprinting. utls mirrors that behavior. As a result:

  • JA3 hashes the wire order verbatim, so fp.ja3_hash (and the hash you'd compute from a live capture) shifts per connection. Use the JA3 string for diffing the extension set, not the hash for equality.
  • JA4 sorts extension codepoints before hashing, so fp.ja4_hash is stable and the value that matches your live capture.

Capturing a fingerprint from a live ClientHello

If you have raw ClientHello bytes (e.g. captured via tcpdump, mitmproxy, or a custom TLS trap), you can rebuild a Fingerprint from them and feed it back into a context:

from utls import Fingerprint, SSLContext

raw = open("clienthello.bin", "rb").read()
fp = Fingerprint.from_capture(raw)
print(fp.ja4_hash)

ctx = SSLContext()
ctx.set_fingerprint(fp)

Captured fingerprints carry no HTTP headers (fp.http_headers == {}); they only encode the TLS layer. To round-trip a full profile, use fp.to_dict() + Fingerprint.from_dict(...) and add http_headers manually.

Server-side and impersonation

set_fingerprint on a server-side context raises at the Rust level. The ClientHello is, by definition, the client's choice; a server-side fingerprint would be meaningless on the wire. Server contexts can still inspect the peer ClientHello for diagnostics (see the Server-side section below).

Encrypted Client Hello (ECH)

Chrome profiles ship with ECH GREASE enabled by default, matching real Chrome. To offer real ECH - encrypting the inner ClientHello (including the real SNI) under the server's published HPKE config - fork a per-peer context carrying the wire-format ECHConfigList bytes:

import utls, socket

base = utls.SSLContext()
base.load_default_certs()
base.set_fingerprint("chrome:stable")

# ECH configs are peer-specific* - each origin publishes its own in a DNS
# HTTPS RR. `set_ech_configs` is non-mutating: it returns a NEW SSLContext
# that shares the underlying SSL_CTX (and CA store) with `base` via
# SSL_CTX_up_ref, so the fork is cheap. `base` is untouched and can be
# re-forked for other peers.
ech_bytes = ...  # you are responsible to get it yourself!
ctx = base.set_ech_configs(ech_bytes)

with socket.create_connection(("example.com", 443)) as raw:
    ssl_sock = ctx.wrap_socket(raw, server_hostname="example.com")
    ssl_sock.do_handshake()

utls does not perform the DNS HTTPS RR lookup; the caller fetches the ech= bytes (e.g. via dnspython's HTTPS rdata). Pass None to clear the ECH override in the fork.

Niquests or urllib3-future does ECH transparently via a custom resolver (E.g. DNS over HTTPS) No effort required.

Feature parity with stdlib

utls re-exports the public names of the ssl module that matter for client and server code paths. The Python facade is a real subclass of ssl.SSLContext, so isinstance(ctx, ssl.SSLContext) is true and most downstream libraries (urllib3-future, niquests, httpx with custom transports) accept a utls context directly.

What's different from ssl:

  • TLS 1.2 is the minimum version. SSLv2, SSLv3, TLS 1.0 and TLS 1.1 are not available - BoringSSL refuses to negotiate them (No decent client out there should try < TLS 1.2).
  • Hostname verification uses SAN only, never the Common Name.
  • compression() always returns None (TLS compression is disabled, as it should be - BoringSSL doesn't ship it - as anyone should).
  • PSK callbacks are not available - BoringSSL deleted them upstream.
  • A Fingerprint API exists and is honored on the client side. Server-side set_fingerprint rejects at the Rust level: the ClientHello is the client's choice, not the server's.

Server-side

Server-side TLS is supported for everything BoringSSL still exposes:

  • mTLS (client certificate auth via verify_mode=CERT_REQUIRED),
  • ALPN selection from a server preference list,
  • SNI dispatch via set_servername_callback,
  • ECDH curve restriction (set_ecdh_curve),
  • Session ticket count (set_num_tickets),
  • set_session_id_context,
  • Server-side ClientHello fingerprinting (read-only diagnostics).

Things you can't have on the server side because BoringSSL doesn't have them: DTLS, FFDHE parameters, SSLv2/SSLv3, TLS compression, PSK.

urllib3-future / niquests

utls is automatically picked up if installed. enjoy.

Disclaimer

Early/Beta project. The public API is stable; we do not plan to diverge from stdlib for the ssl-compatible subset. Not pure Python - you need either a pre-built wheel or a build environment (Rust + cmake + ninja + Go for BoringSSL).

MIT-licensed (see LICENSE). BoringSSL is permissively licensed; boring-sys is Apache-2.0 - bundled into the wheel.

  • FIPS mode is not on the roadmap.
  • Chrome only. Firefox / Safari / Edge are unlikely. Thus, contribution are welcomed.
  • PyPy is not supported.

Throughput is on par with stdlib ssl: ~343 MiB/s for bulk recv vs. stdlib's 340 MiB/s on a loopback TLS 1.3 / AES-256-GCM connection. (yes, it is faster than rtls!)

Contributions, bug reports and feedback are welcome.

Versioning

This project uses CalVer (YYYY.0M.0D). It aims to be a drop-in replacement for stdlib ssl, so semantic versioning would be misleading - pin a lower bound, not an upper bound.

Prior art

  • rtls - same drop-in approach over rustls. utls's MemoryBIO-first design and read-batching pass are directly inspired by it; many of the compatibility tests were ported from there.
  • uTLS - the reference Go-language TLS fingerprinting library. The spec data encoded in our Chrome profiles is checked against uTLS's published ClientHellos.
  • curl-impersonate - the original "browser-on-the-wire" project. utls aims to give Python the same capability without a non-native Python http client or a patched BoringSSL.

JA4 pinning

The JA4 fingerprint algorithm is pinned to FoxIO-LLC/ja4 spec revision 0.18.8. The constant is duplicated in python/utls/_fingerprint.py (JA4_SPEC_VERSION) and crates/utls-core/src/fingerprint/ja4.rs, and a dedicated CI job asserts they agree.

Documentation

For the ssl-compatible surface, the stdlib documentation at https://docs.python.org/3/library/ssl.html applies almost verbatim - the notable exceptions are listed under Feature parity with stdlib.

Metadata

Release files for utls 2026.10.3

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

Source distribution (sdist)

Source distribution for utls 2026.10.3
File Size Uploaded
utls-2026.10.3.tar.gz 122.8 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for utls 2026.10.3
File
utls-2026.10.3-cp314-cp314t-win_arm64.whl CPython 3.14 CPython 3.14 free-threading Windows ARM64 Details
utls-2026.10.3-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
utls-2026.10.3-cp314-cp314t-win32.whl CPython 3.14 CPython 3.14 free-threading Windows x86-32 Details
utls-2026.10.3-cp314-cp314t-musllinux_1_1_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.1+ x86-64 Details
utls-2026.10.3-cp314-cp314t-musllinux_1_1_armv7l.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.1+ ARMv7l Details
utls-2026.10.3-cp314-cp314t-musllinux_1_1_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.1+ ARM64 Details
utls-2026.10.3-cp314-cp314t-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64 Details
utls-2026.10.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Details
utls-2026.10.3-cp314-cp314t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl CPython 3.14 CPython 3.14 free-threading macOS 10.15+ x86-64, macOS 11.0+ ARM64, macOS 10.15+ universal2 (ARM64, x86-64) Details
utls-2026.10.3-cp313-cp313t-win_arm64.whl CPython 3.13 CPython 3.13 free-threading Windows ARM64 Details
utls-2026.10.3-cp313-cp313t-win_amd64.whl CPython 3.13 CPython 3.13 free-threading Windows x86-64 Details
utls-2026.10.3-cp313-cp313t-win32.whl CPython 3.13 CPython 3.13 free-threading Windows x86-32 Details
utls-2026.10.3-cp313-cp313t-musllinux_1_1_x86_64.whl CPython 3.13 CPython 3.13 free-threading Linux musl 1.1+ x86-64 Details
utls-2026.10.3-cp313-cp313t-musllinux_1_1_armv7l.whl CPython 3.13 CPython 3.13 free-threading Linux musl 1.1+ ARMv7l Details
utls-2026.10.3-cp313-cp313t-musllinux_1_1_aarch64.whl CPython 3.13 CPython 3.13 free-threading Linux musl 1.1+ ARM64 Details
utls-2026.10.3-cp313-cp313t-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 free-threading Linux glibc 2.28+ ARM64 Details
utls-2026.10.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 free-threading Linux glibc 2.17+ x86-64 Details
utls-2026.10.3-cp313-cp313t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl CPython 3.13 CPython 3.13 free-threading macOS 10.15+ x86-64, macOS 11.0+ ARM64, macOS 10.15+ universal2 (ARM64, x86-64) Details
utls-2026.10.3-cp37-abi3-win_arm64.whl CPython 3.7 abi3 Windows ARM64 Details
utls-2026.10.3-cp37-abi3-win_amd64.whl CPython 3.7 abi3 Windows x86-64 Details
utls-2026.10.3-cp37-abi3-win32.whl CPython 3.7 abi3 Windows x86-32 Details
utls-2026.10.3-cp37-abi3-musllinux_1_1_x86_64.whl CPython 3.7 abi3 Linux musl 1.1+ x86-64 Details
utls-2026.10.3-cp37-abi3-musllinux_1_1_armv7l.whl CPython 3.7 abi3 Linux musl 1.1+ ARMv7l Details
utls-2026.10.3-cp37-abi3-musllinux_1_1_aarch64.whl CPython 3.7 abi3 Linux musl 1.1+ ARM64 Details
utls-2026.10.3-cp37-abi3-manylinux_2_28_aarch64.whl CPython 3.7 abi3 Linux glibc 2.28+ ARM64 Details
utls-2026.10.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.7 abi3 Linux glibc 2.17+ x86-64 Details
utls-2026.10.3-cp37-abi3-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl CPython 3.7 abi3 macOS 10.15+ x86-64, macOS 11.0+ ARM64, macOS 10.15+ universal2 (ARM64, x86-64) Details

Total release size: 96.8 MB

Release files / utls-2026.10.3.tar.gz

Download URL utls-2026.10.3.tar.gz
Size 122.8 kB
Tags Source
SHA-256 checksum
How to use checksums
b2a6e835426de3cf9a5c898bb18201d8aa8ed8925407b0894980829d83061dc4
BLAKE2b-256 checksum
How to use checksums
1ea849534c45f22a1d90b79d7dbc5e2f5b473e7e0e83d5fa387fd7f11ca635f5
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp314-cp314t-win_arm64.whl

Download URL utls-2026.10.3-cp314-cp314t-win_arm64.whl
Size 1.2 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows ARM64
SHA-256 checksum
How to use checksums
4fe8f934d354172e8f0a7e102aa1e02cc23a85664c67ce2dea2edea50489a2fe
BLAKE2b-256 checksum
How to use checksums
de29ebca453549ba4143c5b97b8f44025934c6569ebaf772874ee0ac481096d3
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp314-cp314t-win_amd64.whl

Download URL utls-2026.10.3-cp314-cp314t-win_amd64.whl
Size 1.4 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
2343dc5d4a6e2d5c4c143dc440cb65bd695d3e5d0caf8f31efea7e3b093bbb1c
BLAKE2b-256 checksum
How to use checksums
08e2e5b1bb18e0b4d31911ad4c163205a0225e821333c0675fd3cc40e704115f
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp314-cp314t-win32.whl

Download URL utls-2026.10.3-cp314-cp314t-win32.whl
Size 1.2 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-32
SHA-256 checksum
How to use checksums
bb350a8310fd4e5ef12d951082dfd4f96b7dc3ad78fc27d4af9ca7f38a88e082
BLAKE2b-256 checksum
How to use checksums
0ace705a4f4de36fcf5ab5975e43e3c365894dd206c5dffbaf73230f89de5f5c
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp314-cp314t-musllinux_1_1_x86_64.whl

Download URL utls-2026.10.3-cp314-cp314t-musllinux_1_1_x86_64.whl
Size 8.1 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.1+ x86-64
SHA-256 checksum
How to use checksums
8cc490d5b5bae210553eaa3c6e6ddedbad8cee7bafe33c0127ea71bc4c56fac2
BLAKE2b-256 checksum
How to use checksums
cf4d9f8f6f15ab5514254ed552f0a36ab0f88d59eb85b2ebcd94c88514f3bc55
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp314-cp314t-musllinux_1_1_armv7l.whl

Download URL utls-2026.10.3-cp314-cp314t-musllinux_1_1_armv7l.whl
Size 7.5 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.1+ ARMv7l
SHA-256 checksum
How to use checksums
741887a49746b351c8ee9cde9e1cc65b748a81a940dc2dc52cec056f5c9966b2
BLAKE2b-256 checksum
How to use checksums
f59654c60e6e5002f97f936bf9096927d1f2e10a3473d0849a323c7cd7c7d3d3
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp314-cp314t-musllinux_1_1_aarch64.whl

Download URL utls-2026.10.3-cp314-cp314t-musllinux_1_1_aarch64.whl
Size 7.8 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.1+ ARM64
SHA-256 checksum
How to use checksums
db15237c38d29db5e84aff5fc2cc92f1c21b6f0013bad8985c7362bcaa99b626
BLAKE2b-256 checksum
How to use checksums
dc49ded6af59b32fa84c98696a543149bf17446e745a88fb60e74033d695cf69
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp314-cp314t-manylinux_2_28_aarch64.whl

Download URL utls-2026.10.3-cp314-cp314t-manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
9dc84922746ba7c69f080ac0f602eee919cec5cab2c11c8f36c8b2fedfe1d628
BLAKE2b-256 checksum
How to use checksums
cf21bc86a32ca482ddb90c21b24af26cc6a410865e5b059de3f61aa229ed6f0f
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL utls-2026.10.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.4 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
4ccd8ae7cfca9a4e56c35a73e29c9c373114728b268e2a4df201b0ca3ad24ba3
BLAKE2b-256 checksum
How to use checksums
22ec23944f61c327a7c87d55742d858829f69f7ce56a5de4c844bae91b25c597
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp314-cp314t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl

Download URL utls-2026.10.3-cp314-cp314t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
Size 2.4 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.15+ universal2 (ARM64, x86-64) macOS 10.15+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7363a17db6dda7f69c12eda2d1d29e4b10270d37ee6ecbc1ee16d85892dd6e46
BLAKE2b-256 checksum
How to use checksums
ebfa8051bb8233009b59ebd32e94fe18eae1cdd1d9235809bffc84b254cbff52
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp313-cp313t-win_arm64.whl

Download URL utls-2026.10.3-cp313-cp313t-win_arm64.whl
Size 1.2 MB
Tags CPython 3.13 CPython 3.13 free-threading Windows ARM64
SHA-256 checksum
How to use checksums
dab7654966c81f602586c3dfd3fa17fbc2813f7d0c14064f731ccce7cdf48071
BLAKE2b-256 checksum
How to use checksums
f8ba6e39a3a42e652a5190fd0487fb8d466bf5d4ce3ca65d498b1f2fc7fceb63
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp313-cp313t-win_amd64.whl

Download URL utls-2026.10.3-cp313-cp313t-win_amd64.whl
Size 1.5 MB
Tags CPython 3.13 CPython 3.13 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
43deb9c0849241870da43b166fd1b8c645b602334c5201ed0f334983901bf595
BLAKE2b-256 checksum
How to use checksums
2c4266532fa66f654826ca866460fe4dd1c138b6e0792937c270dc25cc695ff8
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp313-cp313t-win32.whl

Download URL utls-2026.10.3-cp313-cp313t-win32.whl
Size 1.2 MB
Tags CPython 3.13 CPython 3.13 free-threading Windows x86-32
SHA-256 checksum
How to use checksums
1a6b223e11397b629af61cf5209df656d7c12ff4012144d6850e7fc857fb66f1
BLAKE2b-256 checksum
How to use checksums
38ecb80033515442c44672463fbd793395949ae6156013192b3417377350ef45
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp313-cp313t-musllinux_1_1_x86_64.whl

Download URL utls-2026.10.3-cp313-cp313t-musllinux_1_1_x86_64.whl
Size 8.1 MB
Tags CPython 3.13 CPython 3.13 free-threading Linux musl 1.1+ x86-64
SHA-256 checksum
How to use checksums
97e04257cf58336a619445952ae5c167da21bbdc31db60b3b7dc3cab5020cc94
BLAKE2b-256 checksum
How to use checksums
4a41e3ee09d5bd34cf47792147496bf21d8f9f30fc6c7f8cb25d01d68d828434
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp313-cp313t-musllinux_1_1_armv7l.whl

Download URL utls-2026.10.3-cp313-cp313t-musllinux_1_1_armv7l.whl
Size 7.5 MB
Tags CPython 3.13 CPython 3.13 free-threading Linux musl 1.1+ ARMv7l
SHA-256 checksum
How to use checksums
f0f3d37ebe1a5ba9679d8d2d909a1e1961bc2c14832172e91d906e77c7d93388
BLAKE2b-256 checksum
How to use checksums
2ec64878c2dc4f9aa567f23cd70afbb98cd5af9e60e8ea49de5af07e6a02fe6c
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp313-cp313t-musllinux_1_1_aarch64.whl

Download URL utls-2026.10.3-cp313-cp313t-musllinux_1_1_aarch64.whl
Size 7.8 MB
Tags CPython 3.13 CPython 3.13 free-threading Linux musl 1.1+ ARM64
SHA-256 checksum
How to use checksums
f6167c2f64a5610779ec08ffc3f32476d470339c544c743054cbcc8941ef8bed
BLAKE2b-256 checksum
How to use checksums
f63a1830900163045fa38952a62c16b65682a07a5b408950ba270a8ec08794a5
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp313-cp313t-manylinux_2_28_aarch64.whl

Download URL utls-2026.10.3-cp313-cp313t-manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.13 CPython 3.13 free-threading Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
54875d5090dc472b31b496d0037e6df17df2b86b2bc7edf15fc97ad12c032298
BLAKE2b-256 checksum
How to use checksums
3a404e2a1c44e2ab3679edc09dd1dae278d0e03d17368ef43ae80404af084040
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL utls-2026.10.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.4 MB
Tags CPython 3.13 CPython 3.13 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
95d7b855ee563ab67c419090340ced6762ce0d777815b508f161784fd12e81a0
BLAKE2b-256 checksum
How to use checksums
fd5b735effc30540eccf6bb62f374bb4afd276cb776cd92023a4ec36a30801c3
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp313-cp313t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl

Download URL utls-2026.10.3-cp313-cp313t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
Size 2.4 MB
Tags CPython 3.13 CPython 3.13 free-threading macOS 10.15+ universal2 (ARM64, x86-64) macOS 10.15+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
281128b30dfdc99f9384cd1858157b80dae0ab4efa32d9d9eab619bbd2e15f28
BLAKE2b-256 checksum
How to use checksums
6b884bdeac2d584d2fc44857e897bbc1eb689fd3dec0d7341b1da68889de0a79
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp37-abi3-win_arm64.whl

Download URL utls-2026.10.3-cp37-abi3-win_arm64.whl
Size 1.2 MB
Tags CPython 3.7 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
1ca288b4a9371e989d0501b20ec926d4142a1f18ae8f1b707d5c865e23b8f953
BLAKE2b-256 checksum
How to use checksums
fc5982f8bc7b0126be96dd99b88151ad61541babece77a00a39aa3868e473035
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp37-abi3-win_amd64.whl

Download URL utls-2026.10.3-cp37-abi3-win_amd64.whl
Size 1.5 MB
Tags CPython 3.7 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
80869395586a84eccc3dfd6d56cb33cd899eeb25c84c50e6e275a407b4fdaa44
BLAKE2b-256 checksum
How to use checksums
071d5d069bfe18514ad639f6429229db4581922094010e072a0072bd0e425b72
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp37-abi3-win32.whl

Download URL utls-2026.10.3-cp37-abi3-win32.whl
Size 1.2 MB
Tags CPython 3.7 Windows x86-32 abi3
SHA-256 checksum
How to use checksums
b50ca24c6251eae05a4e71cb73bbd2b5d2cf4ed021aeaa5c43afb06697aa58ee
BLAKE2b-256 checksum
How to use checksums
b2d8e5edcf4a7c9bf796a78bfa0fea67bc23e0b2256a6f706401ee350ea717b6
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp37-abi3-musllinux_1_1_x86_64.whl

Download URL utls-2026.10.3-cp37-abi3-musllinux_1_1_x86_64.whl
Size 8.1 MB
Tags CPython 3.7 Linux musl 1.1+ x86-64 abi3
SHA-256 checksum
How to use checksums
22aebd595012d66624abea7adc2570161aff9f62e6a3c1ceaa6df424719ff7a4
BLAKE2b-256 checksum
How to use checksums
42e995bd77e2622ef99bf6d9a2ddf4dd1d4b529c4560a639708b1b64cf034c49
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp37-abi3-musllinux_1_1_armv7l.whl

Download URL utls-2026.10.3-cp37-abi3-musllinux_1_1_armv7l.whl
Size 7.5 MB
Tags CPython 3.7 Linux musl 1.1+ ARMv7l abi3
SHA-256 checksum
How to use checksums
5a9931398a60446556b27edb131d8faac906e0c44578a9e614674a218d5816c5
BLAKE2b-256 checksum
How to use checksums
a649c3a8386726272717ade31aeda69a32a60905cea9ce26aaaacb255069403a
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp37-abi3-musllinux_1_1_aarch64.whl

Download URL utls-2026.10.3-cp37-abi3-musllinux_1_1_aarch64.whl
Size 7.8 MB
Tags CPython 3.7 Linux musl 1.1+ ARM64 abi3
SHA-256 checksum
How to use checksums
cb0f5e1a15ef9d15c1cb415652472f0f70cdb17a655c0f32688506ab4f189f47
BLAKE2b-256 checksum
How to use checksums
c5f8ac3626ad1d7ccabd3672f5b8c46d30837c09225a4cc1750c4217d56476ee
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp37-abi3-manylinux_2_28_aarch64.whl

Download URL utls-2026.10.3-cp37-abi3-manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.7 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
0f85b3f598238437b27d3cd93147d56cd08373a437d1628aed57233b3b28393e
BLAKE2b-256 checksum
How to use checksums
03dd7ba502ef34a3735f2d6890df2c9c76a27f10f692c94441e5f00490795ed6
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL utls-2026.10.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.4 MB
Tags CPython 3.7 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
91c96a08aa775cfc85a1e4409ef46446c17c23d863183e1348799de79cc039a4
BLAKE2b-256 checksum
How to use checksums
e983c8bd5f6ef66c8b8c65000b39ee3bd2fa5a7db7e34c320d275ad06ef69bb8
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 3, 2026.

Transparency log

Release files / utls-2026.10.3-cp37-abi3-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl

Download URL utls-2026.10.3-cp37-abi3-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
Size 2.4 MB
Tags CPython 3.7 abi3 macOS 10.15+ universal2 (ARM64, x86-64) macOS 10.15+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
796b3b870a2934e007b4a6b9ee549c7dea385691df1306b0ee0843aa468ee88a
BLAKE2b-256 checksum
How to use checksums
b19e65a004f31e9e5f90e711b5e083b3d005d5d4db4361b07a3385c884884c5d
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 3, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2026.10.3 This release

28 release files

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