NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #4 most downloaded on PyPI
Internationalized Domain Names in Applications (IDNA)
Last release 17 days ago
17 Sep 2026
Release timing varies
gaps range from 2 weeks to 1.2 years
Nearly every release is documented
notes for 43 of 43 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
43 releases · first in 2013
Better enforcement of the domain length limit in the incremental codec.
The deprecated transitional argument to encode() and uts46_remap() is now completely ignored, and gives a deprecation warning for the latter.
std3_rules option, which had no effect since changesuts46_remap()idna.unicode_version, and show it in idna --version.code, text, codepoint and position attributes toIDNAError so that the failed rule and the offending character cantransitional argument to encode() anduts46_remap() is now completely ignored, and gives a deprecation warningIDNAError instead ofInvalidCodepointContext.IDNAError for empty labels and non-ASCII bytesThanks to stefan6419846, LouieLuNZ, and Salvatore Corvaglia for
contributions to this release.
One column per quarter.
- When decoding a domain, add a display argument that will pass through invalid labels rather than raising an exception.
v3.18
- When decoding a domain, add a `display` argument that will pass
through invalid labels rather than raising an exception.
- Substantial 75% reduction in memory usage through new data structures and some optimization in processing speed. - Added a general 1024-character in
v3.17
- Substantial 75% reduction in memory usage through new data
structures and some optimization in processing speed.
- Added a general 1024-character input length cap to the public
validation, conversion, and codec entry points. This is well above
any legitimate domain or label and guards against pathological
inputs.
- Add a command-line interface (python -m idna, also available as the idna script). Encodes or decodes one or more domains supplied as arguments or on
v3.16
- Add a command-line interface (`python -m idna`, also available as
the `idna` script). Encodes or decodes one or more domains supplied
as arguments or on standard input, with options to select A-label
or U-label output and control error handling.
- Raise the minimum supported Python version to 3.9
- Various code quality improvements
- Convert README and HISTORY from reStructuredText to Markdown. - Reference CVE-2026-45409 for the 3.14 advisory in place of the initial GHSA identifi…
v3.15
- Enforce DNS-length cap on individual labels early in `check_label`,
short-circuiting contextual-rule processing for oversized input
while staying compatible with UTS 46 usage.
- Tidy core helpers: hoist bidi category sets to module-level
frozensets (avoiding per-codepoint list construction), simplify
length checks, and reuse the shared `_unicode_dots_re` from
`idna.core` in the codec module.
- Use `raise ... from err` for proper exception chaining and
switch internal string formatting to f-strings.
- Allow `flit_core` 4.x in the build backend.
- Expand the ruff lint set (flake8-bugbear, flake8-simplify,
pyupgrade, perflint) and apply the surfaced fixes; pin lint CI
to Python 3.14.
- Add Dependabot configuration for GitHub Actions.
- Convert README and HISTORY from reStructuredText to Markdown.
- Reference CVE-2026-45409 for the 3.14 advisory in place of the
initial GHSA identifier.
…oversize inputs up-front. Closes a bypass of the CVE-2024-3651 mitigation. [ GHSA-65pc-fj4g-8rjx ]
v3.14
- Removed opportunity to process long inputs into quadratic
time by rejecting oversize inputs up-front. Closes a bypass
of the CVE-2024-3651 mitigation. [GHSA-65pc-fj4g-8rjx]
Thanks to Stan Ulbrych for reporting the issue.
- Correct classification error for codepoint U+A7F1
v3.13
- Correct classification error for codepoint U+A7F1
- Update to Unicode 17.0.0. - Issue a deprecation warning for the transitional argument. - Added lazy-loading to provide some performance improvements…
v3.12
- Update to Unicode 17.0.0.
- Issue a deprecation warning for the transitional argument.
- Added lazy-loading to provide some performance improvements.
- Removed vestiges of code related to Python 2 support, including
segmentation of data structures specific to Jython.
Thanks to Rodrigo Nogueira for contributions to this release.
- Update to Unicode 16.0.0, including significant changes to UTS46 processing. As a result of Unicode ending support for it, transitional processing n
v3.11
- Update to Unicode 16.0.0, including significant changes to UTS46 processing. As a
result of Unicode ending support for it, transitional processing no longer has an
effect and returns the same result.
- Add support for Python 3.14, lowest supported version is Python 3.8.
- Various updates to packaging, including PEP 740 support.
- Reverted to Unicode 15.1.0 data. Unicode 16 has some significant changes to UTS46 processing that will require more work to properly implement.
v3.10
- Reverted to Unicode 15.1.0 data. Unicode 16 has some significant changes
to UTS46 processing that will require more work to properly implement.
Deprecate setup.cfg in favour of pyproject.toml
Thanks to Waket Zheng for contributions to this release.
Fix regression where IDNAError exception was not being produced for certain inputs.
Thanks to Hugo van Kemenade for contributions to this release.
Full Changelog: https://github.com/kjd/idna/compare/v3.7...v3.8
Fix issue where specially crafted inputs to encode() could take exceptionally long amount of time to process. [CVE-2024-3651]
Thanks to Guido Vranken for reporting the issue.
Full Changelog: https://github.com/kjd/idna/compare/v3.6...v3.7
Fix regression to include tests in source distribution.
String codec name is now "idna2008" as overriding the system codec "idna" was not working.
Thanks Jon Ribbens, Diogo Teles Sant'Anna, Wu Tingfeng for contributions to this release.
Migrate to pyproject.toml for build information (PEP 621)
Thanks to Seth Michael Larson for contributions to this release.
Update to in-line type annotations
Thanks to Jon Defresne, Hugo van Kemenade, Seth Michael Larson, Patrick Ventuzelo and Boris Verhovsky for contributions to this release.
Add type hints (Thanks, Seth Michael Larson!)
Ensure license is included in package (Thanks, Julien Schueller)
Python 2 is no longer supported (the 2.x branch supports Python 2, use "idna<3" in your requirements file if you need Python 2 support)
Throws a more specific exception if "xn--" is provided as a label.
Prohibit A-labels ending with a hyphen (Thanks, Julien Bernard!)
Provide more specific exceptions for some malformed labels.
No longer accepts dot-prefixed domains (e.g. ".example") as valid. This is to be more conformant with the UTS 46 spec. Users should strip dot prefixes
Allows generation of IDNA and UTS 46 table data for different versions of Unicode, by deriving properties directly from Unicode data.
Fix bug with Katakana middle dot context-rule (Thanks, Greg Shikhman.)
Restore IDNAError to be a subclass of UnicodeError, as some users of this library are only looking for the latter to catch invalid strings.
Fix bugs relating to deriving IDNAError from UnicodeError.
Made some changes to the UTS 46 data that should allow Jython to get around 64kb Java class limits. (Thanks, John A. Booth and Marcin Płonka.)
Memory consumption optimizations. The library should consume significantly less memory through smarter data structures being used to represent relevan
Added support for Unicode IDNA Compatibility Processing (aka Unicode Technical Standard #46). Big thanks to Jon Ribbens who contributed this functiona
Use IDNA properties from Unicode 6.3.0. Internet Architecture Board (IAB) issued statement recommending against the use of Unicode 7.0.0 until issues
Update IDNA properties for Unicode 7.0.0.
Fix issue with non-UTF-8 environments reading the README file now that it contains non-ASCII. (Thanks, Tom Prince)
Added MANIFEST.in for correct source distribution compilation.
Filled out missing tests for various functions.
Minor improvements to Python 3 support, tests (Thanks, Derek Wilson)
Update IDNA properties for Unicode 6.3.0.
Fix trove classifier for Python 3. (Thanks, Hynek Schlawack)
- Ported to Python 3.
More conformant, passes all relevant tests in the Unicode TR46 test suite.
First proof-of-concept version.
Your coding agent can read these notes before it upgrades. Set up the MCP server →