NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #130 most downloaded on PyPI
A minimal low-level 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
trio extra.
(#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
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
🚀 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
Alias httpcore imports to httpcore2 in alias_httpx() by @Kludex in #1082
Full Changelog: v2.9.0...v2.9.1
No changes since 2.9.0. Version bumped to stay in lockstep with httpx2.
Add alias_httpx() to alias httpx imports to httpx2 by @Kludex in #1077
Full Changelog: v2.8.0...v2.9.0
No changes since 2.8.0. Version bumped to stay in lockstep with httpx2.
Eliminate multi-assignment churn in the connection pool by @Kludex in #1075
Full Changelog: v2.7.0...v2.8.0
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
No changes since 2.6.0. Version bumped to stay in lockstep with httpx2.
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
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
Use a custom deprecation warning visible by default by @Kludex in #1029
Full Changelog: v2.3.0...v2.4.0
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
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
No changes since 2.1.0. Version bumped to stay in lockstep with httpx2.
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
SETTINGS frame drives a stream's send window negative, instead of letting h2 raise LocalProtocolError. (#935)This is fully compatible with latest httpx.
First official release!
This is fully compatible with latest httpx.
Official first release of httpcore2. No changes since 2.0.0b1.
First release of httpcore2, a fork of `httpcore` maintained by Pydantic. Forked from httpcore 1.0.9.
First release of httpcore2, a fork of httpcore maintained by Pydantic. Forked from httpcore 1.0.9.
httpcore -> httpcore2. import httpcore becomes import httpcore2. No other public API changed.max_keepalive_connections not being properly handled. (Inherited from upstream PR encode/httpcore#1000.)Historical entries below are from upstream encode/httpcore.
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →