# What changed in elastic-transport

> 34 changes in elastic-transport 8 to 9 from its official release notes, upgrade guides and advisories: 16 breaking, 15 new APIs and options. Each one cited. Sources checked 2026-10-23. HTML: https://unstale.sh/pypi/elastic-transport/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## elastic-transport 9

### New APIs and options

- Optional backoff delays can be configured between retries. (9.4.1) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v9.4.1)
- Adds support for an httpx synchronous node. (9.4.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v9.4.0)
- The httpx async client now supports Trio, allowing developers to use it with the Trio async runtime. (9.2.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v9.2.0)

### Fixes and other changes

- Percent characters are escaped in logging output. (9.4.2) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v9.4.2)
- The httpx node class uses path_prefix to compute the base URL. (9.2.1) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v9.2.1)

## elastic-transport 8

### Breaking changes

- Its base class is now Exception instead of TransportError; TransportError is reserved for errors at the transport layer. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Now returns NamedTuple(meta=ApiResponseMeta, body=bytes). (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Removed in favor of NodePool. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- The elastic_transport.connection logger was renamed to elastic_transport.node. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Removed in favor of NodePool. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Renamed NodeSelector.get_connection() to get(). (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Renamed connection_class to node_class. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- ConnectionPool was renamed to NodePool. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- ConnectionSelector was renamed to NodeSelector. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Support for Python 2.7 was removed. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Renamed the NodeSelector parameter randomize_hosts to randomize_nodes. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Deserializer was renamed to SerializersCollection. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Now denotes the minimum TLS version instead of the only TLS version. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Now returns NamedTuple(meta=ApiResponseMeta, body=Any). (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Blocks on new connections when the internal connection pool is exhausted. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Renamed the connections_per_host parameter to connections_per_node. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)

### New APIs and options

- Added support for asyncio with AiohttpHttpNode. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Added support for asyncio with AsyncTransport. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Added a method to enable all logging for debugging purposes. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Added a module to help writing API clients. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Added JsonSerializer. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Added NdjsonSerializer. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Added an option to set requests.Session.auth within RequestsHttpNode via NodeConfig._extras. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Added the connections_per_node parameter. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Added support for ssl_assert_fingerprint. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Added support for node discovery via sniffing using the transport parameter. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Experimental support for pinning non-leaf certificates is available with CPython 3.10+. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
- Can now be specified with the ssl.TLSVersion enum instead of ssl.PROTOCOL_TLSvX for Python 3.7+. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)

### Fixes and other changes

- The workaround for method="HEAD" requests not marking the internal connection as reusable is no longer needed with aiohttp>=3.7.0. (8.0.0) — [release notes](https://github.com/elastic/elastic-transport-python/releases/tag/v8.0.0)
