idna

Frameworks & LibrariesBSD-3-Clause

idna release notes.

Latest v3.19 · by idnaWritten in PythonWebsitekjd/idnaRSS

Release activity

Release activity — 9 releases across 9 days in the last year. Each cell is one day; darker means more releases that day. Older weeks are hidden at this screen width.
JunJulAugSep
SundayNo releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026No releases on Aug 16, 2026No releases on Aug 23, 2026No releases on Aug 30, 2026No releases on Sep 6, 2026
MondayNo releases on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026No releases on Aug 17, 2026No releases on Aug 24, 2026No releases on Aug 31, 2026No releases on Sep 7, 2026
TuesdayNo releases on May 26, 20261 release on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 20261 release on Aug 18, 2026No releases on Aug 25, 2026No releases on Sep 1, 2026
WednesdayNo releases on May 27, 2026No releases on Jun 3, 2026No releases on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026No releases on Aug 12, 2026No releases on Aug 19, 2026No releases on Aug 26, 2026No releases on Sep 2, 2026
Thursday1 release on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026No releases on Aug 13, 2026No releases on Aug 20, 2026No releases on Aug 27, 2026No releases on Sep 3, 2026
FridayNo releases on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026No releases on Aug 14, 2026No releases on Aug 21, 2026No releases on Aug 28, 2026No releases on Sep 4, 2026
SaturdayNo releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026No releases on Aug 15, 2026No releases on Aug 22, 2026No releases on Aug 29, 2026No releases on Sep 5, 2026

9 releases in the last year

Changelog

v3.19

Latest
Added 3
  • Test on free-threaded CPython with the GIL disabled and document thread safety
  • Expose the Unicode version of the generated tables as idna.unicode_version and show it in idna --version
  • Add code, text, codepoint and position attributes to IDNAError so that the failed rule and the offending character can be identified
Changed 4
  • Restore the std3_rules option, which had no effect since changes to UTS #46 processing in Unicode 16
  • uts46_remap() now defaults to enabling STD3 rules, causing input containing non-LDH ASCII characters to be rejected
  • Performance improvements to UTS #46 mapping, particularly for ASCII-only domains
  • The deprecated transitional argument to encode() and uts46_remap() is now completely ignored, and gives a deprecation warning for the latter
Fixed 3
  • Reject A-labels that are not the canonical Punycode encoding of their U-label
  • Fix CONTEXTJ violations raising IDNAError instead of InvalidCodepointContext
  • Consistently raise IDNAError for empty labels and non-ASCII bytes passed to label helper functions and the incremental codec

From idna

  • Restore the std3_rules option, which had no effect since changes to UTS #46 processing in Unicode 16. Note that uts46_remap() defaults to enabling STD3 rules, so direct callers will see input containing non-LDH ASCII characters rejected again.
  • Performance improvements to UTS #46 mapping, particularly for ASCII-only domains.
  • Test on free-threaded CPython with the GIL disabled and document thread safety.
  • Expose the Unicode version of the generated tables as idna.unicode_version, and show it in idna --version.
  • Add code, text, codepoint and position attributes to IDNAError so that the failed rule and the offending character can be identified without parsing the exception message.
  • The deprecated transitional argument to encode() and uts46_remap() is now completely ignored, and gives a deprecation warning for the latter.
  • Reject A-labels that are not the canonical Punycode encoding of their U-label.
  • Fix CONTEXTJ violations raising IDNAError instead of InvalidCodepointContext.
  • Consistently raise IDNAError for empty labels and non-ASCII bytes passed to label helper functions and the incremental codec.
  • Add property-based tests, extended fuzzing targets, coverage measurement, and CI checks that the data tables match the generator output.
  • Various code quality and tooling improvements.

Thanks to stefan6419846, LouieLuNZ, and Salvatore Corvaglia for contributions to this release.

View originalPermalink
How v3.19 went

v3.18

Added 1
  • Add a `display` argument to domain decoding that passes through invalid labels rather than raising an exception

From idna

  • When decoding a domain, add a display argument that will pass through invalid labels rather than raising an exception.
View originalPermalink
How v3.18 went

v3.17

Added 1
  • Add a 1024-character input length cap to public validation, conversion, and codec entry points
Changed 1
  • Reduce memory usage by 75% through new data structures and optimizations

From idna

  • 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.
View originalPermalink
How v3.17 went

v3.16

Added 1
  • Add a command-line interface (python -m idna, also available as the idna script) that 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
Changed 1
  • Raise the minimum supported Python version to 3.9

From idna

  • 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
View originalPermalink
How v3.16 went

v3.15

Added 1
  • Add Dependabot configuration for GitHub Actions
Changed 9
  • 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
  • Hoist bidi category sets to module-level frozensets to avoid per-codepoint list construction
  • Simplify length checks in core helpers
  • Reuse the shared _unicode_dots_re from idna.core in the codec module
  • Use raise ... from err for proper exception chaining
  • Switch internal string formatting to f-strings

From idna

  • 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.

Thanks to Felix Yan, Stan Ulbrych, and metsw24-max for contributions to this release.

View originalPermalink
How v3.15 went

v3.14

Security 1
  • Reject oversize inputs up-front to prevent processing long inputs into quadratic time, closing a bypass of the CVE-2024-3651 mitigation

From idna

  • Removed opportunity to process long inputs into quadratic time by rejecting oversize inputs up-front. Closes a bypass of the CVE-2024-3651 mitigation. [CVE-2026-45409]

Thanks to Stan Ulbrych for reporting the issue.

View originalPermalink
How v3.14 went

v3.13

  • Correct classification error for codepoint U+A7F1
View originalPermalink
How v3.13 went

v3.12

Added 1
  • Add lazy-loading to provide some performance improvements
Changed 1
  • Update to Unicode 17.0.0
Removed 1
  • Remove vestiges of code related to Python 2 support, including segmentation of data structures specific to Jython
Deprecated 1
  • Issue a deprecation warning for the transitional argument

From idna

  • 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.

View originalPermalink
How v3.12 went

v3.11

Added 1
  • Support for Python 3.14
Changed 3
  • Update to Unicode 16.0.0 with significant changes to UTS46 processing, where transitional processing no longer has an effect and returns the same result
  • Lowest supported version is Python 3.8
  • Update packaging with PEP 740 support

From idna

  • 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.
View originalPermalink
How v3.11 went

v3.10

Changed 1
  • Reverted to Unicode 15.1.0 data from Unicode 16

From idna

  • Reverted to Unicode 15.1.0 data. Unicode 16 has some significant changes to UTS46 processing that will require more work to properly implement.
View originalPermalink
How v3.10 went

v3.9

Changed 2
  • Update to Unicode 16.0.0
  • Use ruff for code formatting
Deprecated 1
  • Deprecate setup.cfg in favour of pyproject.toml

From idna

  • Update to Unicode 16.0.0
  • Deprecate setup.cfg in favour of pyproject.toml
  • Use ruff for code formatting

Thanks to Waket Zheng for contributions to this release.

View originalPermalink
How v3.9 went
View all

Discussion

If you publish idna, you can claim this product by proving you administer its repository.