---
title: "dnspython Breaking Changes on PyPI | Since.dev"
description: "What each dnspython release removed, renamed or changed: 569 breaking changes in 2 versions on PyPI, each with its source."
canonical_url: https://since.dev/packages/pypi/dnspython
last_updated: 2026-10-09
---

# dnspython breaking changes

Every breaking API change we have recorded in dnspython on PyPI: 569 breaking changes in 2 versions. Below are its newest 2 versions, removals and renames first, each with its source.

Newest change October 9, 2026

## 2.9.0

308 breaking changes, first published October 9, 2026.

- **Removed**  

The minimum supported Python is now 3.11. Users on older Python versions must upgrade Python before installing this release. [github.com](https://github.com/rthalley/dnspython/releases/tag/v2.9.0)
- **Removed** `dns.rdtypes.ANY.NSEC3.b32_hex_to_normal`  

dns.rdtypes.ANY.NSEC3.b32_hex_to_normal was removed in dnspython 2.9.0 [pypi.org](https://pypi.org/project/dnspython/2.9.0/)
- **Removed** `dns.rdtypes.ANY.NSEC3.b32_normal_to_hex`  

dns.rdtypes.ANY.NSEC3.b32_normal_to_hex was removed in dnspython 2.9.0 [pypi.org](https://pypi.org/project/dnspython/2.9.0/)
- **Signature changed** `dns.asyncquery.https`  

Was async def https(q: dns.message.Message, where: str, timeout: float | None = None, port: int = 443, source: str | None = None, source_port: int = 0, one_rr_per_rrset: bool = False, ignore_trailing: bool = False, client... [pypi.org](https://pypi.org/project/dnspython/2.9.0/)
- **Signature changed** `dns.asyncquery.inbound_xfr`  

Was async def inbound_xfr(where: str, txn_manager: dns.transaction.TransactionManager, query: dns.message.Message | None = None, port: int = 53, timeout: float | None = None, lifetime: float | None = None, source: str | None = None... [pypi.org](https://pypi.org/project/dnspython/2.9.0/)
- **Signature changed** `dns.asyncquery.make_ssl_context`  

Was def make_ssl_context(verify: bool | str = True, check_hostname: bool = True, alpns: list\[str\] | None = None) -> ssl.SSLContext; now def make_ssl_context(verify: bool | str | os.PathLike = True, check_hostname: bool = True, alpns... [pypi.org](https://pypi.org/project/dnspython/2.9.0/)
- **Signature changed** `dns.asyncquery.quic`  

Was async def quic(q: dns.message.Message, where: str, timeout: float | None = None, port: int = 853, source: str | None = None, source_port: int = 0, one_rr_per_rrset: bool = False, ignore_trailing: bool = False, connection... [pypi.org](https://pypi.org/project/dnspython/2.9.0/)
- **Signature changed** `dns.asyncquery.receive_tcp`  

Was async def receive_tcp(sock: dns.asyncbackend.StreamSocket, expiration: float | None = None, one_rr_per_rrset: bool = False, keyring: Dict\[dns.name.Name, dns.tsig.Key\] | None = None, request_mac: bytes | None = b'', ignore_trailing... [pypi.org](https://pypi.org/project/dnspython/2.9.0/)
- **Signature changed** `dns.asyncquery.receive_udp`  

Was async def receive_udp(sock: dns.asyncbackend.DatagramSocket, destination: Any | None = None, expiration: float | None = None, ignore_unexpected: bool = False, one_rr_per_rrset: bool = False, keyring: Dict\[dns.name.Name, dns.tsig.Key\] |... [pypi.org](https://pypi.org/project/dnspython/2.9.0/)
- **Signature changed** `dns.asyncquery.send_tcp`  

Was async def send_tcp(sock: dns.asyncbackend.StreamSocket, what: dns.message.Message | bytes, expiration: float | None = None) -> Tuple\[int, float\]; now async def send_tcp(sock: dns.asyncbackend.StreamSocket, what: dns.message.Message |... [pypi.org](https://pypi.org/project/dnspython/2.9.0/)

And 298 more in this version.

## 2.8.0

261 breaking changes, first published September 7, 2025.

- **Removed** `dns.asyncquery.ssl.CERT_NONE`  

dns.asyncquery.ssl.CERT_NONE was removed in dnspython 2.8.0 [pypi.org](https://pypi.org/project/dnspython/2.8.0/)
- **Removed** `dns.asyncquery.ssl.create_default_context`  

dns.asyncquery.ssl.create_default_context was removed in dnspython 2.8.0 [pypi.org](https://pypi.org/project/dnspython/2.8.0/)
- **Removed** `dns.asyncquery.ssl.SSLContext`  

dns.asyncquery.ssl.SSLContext was removed in dnspython 2.8.0 [pypi.org](https://pypi.org/project/dnspython/2.8.0/)
- **Removed** `dns.asyncquery.ssl.SSLSocket`  

dns.asyncquery.ssl.SSLSocket was removed in dnspython 2.8.0 [pypi.org](https://pypi.org/project/dnspython/2.8.0/)
- **Removed** `dns.asyncquery.ssl.WantReadException`  

dns.asyncquery.ssl.WantReadException was removed in dnspython 2.8.0 [pypi.org](https://pypi.org/project/dnspython/2.8.0/)
- **Removed** `dns.asyncquery.ssl.WantWriteException`  

dns.asyncquery.ssl.WantWriteException was removed in dnspython 2.8.0 [pypi.org](https://pypi.org/project/dnspython/2.8.0/)
- **Default changed**  

The package now requires Python 3.10 or later; older Python versions are no longer supported. Users on older Python must upgrade before installing this release. [github.com](https://github.com/rthalley/dnspython/releases/tag/v2.8.0)
- **Signature changed** `dns.asyncbackend.Backend.name`  

Was def name(self); now def name(self) -> str. [pypi.org](https://pypi.org/project/dnspython/2.8.0/)
- **Signature changed** `dns.asyncquery.https`  

Was async def https(q: dns.message.Message, where: str, timeout: Optional\[float\] = None, port: int = 443, source: Optional\[str\] = None, source_port: int = 0, one_rr_per_rrset: bool = False, ignore_trailing: bool = False, client... [pypi.org](https://pypi.org/project/dnspython/2.8.0/)
- **Signature changed** `dns.asyncquery.inbound_xfr`  

Was async def inbound_xfr(where: str, txn_manager: dns.transaction.TransactionManager, query: Optional\[dns.message.Message\] = None, port: int = 53, timeout: Optional\[float\] = None, lifetime: Optional\[float\] = None, source: Optional\[str\] =... [pypi.org](https://pypi.org/project/dnspython/2.8.0/)

And 251 more in this version.

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#api) reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

## Put your code on continuous management.

Scan a public repository now, or give your agent one line.

### See how out of date your code is.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
