NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #129 most downloaded on PyPI
The next generation HTTP client.
Last release 11 days ago
23 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 16 of 17 stable releases
Nothing withdrawn
no release was ever pulled
4 months old
18 releases · first in 2026
One column per month.
Passing a file as content= now calculates Content-Length from its remaining bytes, respecting the current file position ( #1214 ).
Passing a file as content= now calculates Content-Length from its remaining bytes, respecting the current file position (#1214).
TLS hostname overrides now apply inside HTTP proxy tunnels without affecting the proxy's own TLS connection (#1223). HTTP/2 is advertised first when enabled, and HTTP/1.1 is omitted when disabled (#1155).
The sync WebSocket keepalive thread now exits cleanly when a ping races with connection shutdown (#1228).
Content-Length from the remaining bytes when a file is passed as content=, respecting its current position (#1214).sni_hostname extension for TLS inside HTTP proxy tunnels without applying it to the proxy's TLS connection (#1223).Full Changelog: v2.13.0...v2.13.1
🔐 Reliable TLS verification controls
The CLI --no-verify flag now disables TLS certificate verification as intended, and --verify provides an explicit counterpart (#1140, #1186).
Stopping a streamed response early no longer risks a nested async generator finalization error (#1204).
brotlicffi 1.2.0.2 or later for the brotli extra on non-CPython implementations in #1179--no-verify CLI flag disable TLS certificate verification and add an explicit --verify counterpart in #1140 and #1186trio extra in #1179Full Changelog: v2.12.0...v2.13.0
brotlicffi 1.2.0.2 or later for the brotli extra on non-CPython implementations.
(#1179)🛡️ Bounded response decompression
httpx2 now decodes gzip, deflate, Brotli, and Zstandard responses incrementally. Each decode step emits at most 1 MiB, so streaming a highly compressed response no longer requires materializing an entire inflated network chunk in memory (#1126).
Python 3.13 and earlier now use backports.zstd, which provides the same bounded incremental decompression API as compression.zstd on Python 3.14 and later (#1146).
No changes since 2.11.0. Version bumped to stay in lockstep with httpx2.
Full Changelog: v2.11.0...v2.12.0
backports.zstd for Zstandard decoding on Python 3.13 and earlier.
(#1146)Deprecated status code aliases are available again ( #1135 ).
httpx2 now includes an immutable and hashable Origin value object, available through URL.origin. It provides normalized scheme, host, and effective port comparisons without including URL paths, queries, fragments, or credentials (#1134).
Transfer-Encoding headers now take precedence over body-derived Content-Length headers (#1137).Transfer-Encoding headers and expose buffered request body lengths to WSGI applications by @Kludex in #1137Full Changelog: v2.10.0...v2.11.0
Origin value object and URL.origin property for normalized,
hashable origin comparisons. (#1134)brotli extra. (#1141)Transfer-Encoding headers and expose buffered request body lengths to WSGI applications.
(#1137)🚀 Performance and memory improvements
Set-Cookie header, making typical requests roughly 8% faster (#1107).httpx2 now runs on Pyodide / Emscripten, using a JavaScript fetch-based transport defined in httpx2-jsfetch (#1119, #1114). Thanks @hoodmane!
max_event_size to cap SSE event buffering by @Kludex in #1071Set-Cookie by @Kludex in #1107str | None instead of Any from Headers.get by @ItsDrike in #1121KeyError when an HTTP/2 stream fails by @yhay81 in #1093wss scheme in SOCKS5 proxy connections by @Kludex in #1104Full Changelog: v2.9.1...v2.10.0
fetch-based transport defined in httpx2-jsfetch.
(#1119)max_event_size to cap SSE event buffering. (#1071)Set-Cookie headers. (#1107)str | None instead of Any from Headers.get. (#1121)Alias httpcore imports to httpcore2 in alias_httpx() by @Kludex in #1082
Full Changelog: v2.9.0...v2.9.1
httpcore imports to httpcore2 in alias_httpx(). (#1082)Add alias_httpx() to alias httpx imports to httpx2 by @Kludex in #1077
Full Changelog: v2.8.0...v2.9.0
alias_httpx(), letting applications make import httpx resolve to httpx2 process-wide. (#1077)Eliminate multi-assignment churn in the connection pool by @Kludex in #1075
Full Changelog: v2.7.0...v2.8.0
No changes since 2.7.0. Version bumped to stay in lockstep with httpcore2.
This release syncs the vendored WebSocket support with the latest httpx-ws, which was previously pinned to an outdated snapshot.
This release syncs the vendored WebSocket support with the latest httpx-ws, which was previously pinned to an outdated snapshot.
Full Changelog: v2.6.0...v2.7.0
httpx-ws to upstream v0.9.0. (#1067)The main feature in this release is support for WebSockets! 🎉
The main feature in this release is support for WebSockets! 🎉
from httpx2 import AsyncClient
async with httpx2.AsyncClient() as client:
async with client.websocket("ws://localhost:8000/ws") as ws:
await ws.send_text("Hello!")
message = await ws.receive_text()Full Changelog: v2.5.0...v2.6.0
httpx-ws, installable with httpx2[ws]. (#1042)QUERY HTTP method via httpx2.query() and client.query(). (#1055)click 8.4+ in the cli extra, dropping the upper bound. (#1040)Allow IPv6 CIDR notation in no_proxy by @mbeijen in #967
no_proxy by @mbeijen in #967client.sse() by @Kludex in #1046| and |= operators for Headers by @Kludex in #1047Headers union operator by @Kludex in #1049Full Changelog: v2.4.0...v2.5.0
client.sse(). (#1046)| and |= operators for Headers. (#1047)no_proxy. (#967)Use a custom deprecation warning visible by default by @Kludex in #1029
Full Changelog: v2.3.0...v2.4.0
HTTPXDeprecationWarning, a UserWarning subclass shown by default so deprecations are visible without enabling warnings. (#1029)Content-Encoding decoders to 5. (#1027)rich in the cli extra. (#1015)Allow default_encoding callable to return None by @Kludex in https://github.com/pydantic/httpx2/pull/951
default_encoding callable to return None by @Kludex in https://github.com/pydantic/httpx2/pull/951certifi to truststore for default SSL verification by @Kludex in https://github.com/pydantic/httpx2/pull/209httpcore2 from certifi to truststore for default SSL verification by @Kludex in https://github.com/pydantic/httpx2/pull/1002_assign_requests_to_connections as a single-pass loop by @mbeijen in https://github.com/pydantic/httpx2/pull/974Full Changelog: https://github.com/pydantic/httpx2/compare/v2.2.0...v2.3.0
truststore instead of certifi for default SSL verification, loading the operating system's trust store. (#209)Handle multi-frame zstd streams split across chunks by @mbeijen in https://github.com/pydantic/httpx2/pull/946
Full Changelog: https://github.com/pydantic/httpx2/compare/v2.1.0...v2.2.0
_main CLI module to speed up import httpx2. (#947)Drop Python 3.9 support, add Python 3.14 by @Kludex in https://github.com/pydantic/httpx2/pull/208
compression.zstd for Zstd decompression on Python 3.14+ by @Kludex in https://github.com/pydantic/httpx2/pull/932Full Changelog: https://github.com/pydantic/httpx2/compare/v2.0.0...v2.1.0
This is fully compatible with latest httpx.
First official release!
This is fully compatible with latest httpx.
Official first release of httpx2. No changes since 2.0.0b1.
First release of httpx2, a fork of `httpx` maintained by Pydantic. Forked from httpx 0.28.1 (commit `b5addb6`).
First release of httpx2, a fork of httpx maintained by Pydantic. Forked from httpx 0.28.1 (commit b5addb6).
httpx -> httpx2. import httpx becomes import httpx2. The CLI is now httpx2, the User-Agent header is python-httpx2/<version>, and the logger is httpx2. No other public API changed.httpcore -> httpcore2, vendored into the same repository as a uv workspace member. Code that imports httpcore directly should switch to httpcore2. httpx2 always depends on a specific httpcore2 version, pinned exactly.FunctionAuth from the public API. (Inherited from upstream PR encode/httpx#3699.)PytestUnraisableExceptionWarning from async generator finalization during stream teardown under trio. (#137, backporting encode/httpcore#1019 by @agronholm.)Historical entries below are from upstream encode/httpx.
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →