# What changed in idna

> 14 changes in idna 3 from its official release notes, upgrade guides and advisories: 5 breaking, 1 deprecations, 2 security, 2 new APIs and options. Each one cited. Sources checked 2026-10-17. HTML: https://unstale.sh/pypi/idna/

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

## idna 3

### Breaking changes

- Reject A-labels that are not the canonical Punycode encoding of their U-label. (3.19) — [release notes](https://github.com/kjd/idna/releases/tag/v3.19)
- The deprecated transitional argument is now completely ignored. (3.19) — [release notes](https://github.com/kjd/idna/releases/tag/v3.19)
- Label helper functions and the incremental codec consistently raise IDNAError for empty labels and non-ASCII bytes. (3.19) — [release notes](https://github.com/kjd/idna/releases/tag/v3.19)
- CONTEXTJ violations now raise IDNAError instead of InvalidCodepointContext. (3.19) — [release notes](https://github.com/kjd/idna/releases/tag/v3.19)
- Restore the std3_rules option; direct callers now again have input containing non-LDH ASCII characters rejected, and STD3 rules are enabled by default. (3.19) — [release notes](https://github.com/kjd/idna/releases/tag/v3.19)

### Security

- The incremental codec better enforces the domain length limit. (3.20) — [release notes](https://github.com/kjd/idna/releases/tag/v3.20)
- Internationalized Domain Names in Applications (IDNA): Specially crafted inputs to idna.encode() can bypass CVE-2024-3651 fix (3.15) — [security advisory](https://github.com/advisories/GHSA-65PC-FJ4G-8RJX)

### Deprecations

- The deprecated transitional argument is now completely ignored and gives a deprecation warning. (3.19) — [release notes](https://github.com/kjd/idna/releases/tag/v3.19)

### New APIs and options

- Expose the Unicode version used by the generated tables. (3.19) — [release notes](https://github.com/kjd/idna/releases/tag/v3.19)
- Add code, text, codepoint, and position attributes so callers can identify the failed rule and offending character without parsing the exception message. (3.19) — [release notes](https://github.com/kjd/idna/releases/tag/v3.19)

### Performance

- UTS #46 mapping is faster, particularly for ASCII-only domains. (3.19) — [release notes](https://github.com/kjd/idna/releases/tag/v3.19)

### Behavior and default changes

- The version command now shows the Unicode version of the generated tables. (3.19) — [release notes](https://github.com/kjd/idna/releases/tag/v3.19)

### Fixes and other changes

- Adds support for Python 3.15. (3.20) — [release notes](https://github.com/kjd/idna/releases/tag/v3.20)
- Unicode data is updated to Unicode 18.0.0. (3.20) — [release notes](https://github.com/kjd/idna/releases/tag/v3.20)
