# idna v3.19 - Product: idna (https://whatsnew.fyi/product/idna) - Vendor: idna - Date: 2026-08-18 - Version: v3.19 - Original notes: https://github.com/kjd/idna/releases/tag/v3.19 - Permalink: https://whatsnew.fyi/product/idna/releases/v3.19 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **changed** — Restore the std3_rules option, which had no effect since changes to UTS #46 processing in Unicode 16 - **changed** — uts46_remap() now defaults to enabling STD3 rules, causing input containing non-LDH ASCII characters to be rejected - **changed** — Performance improvements to UTS #46 mapping, particularly for ASCII-only domains - **added** — Test on free-threaded CPython with the GIL disabled and document thread safety - **added** — Expose the Unicode version of the generated tables as idna.unicode_version and show it in idna --version - **added** — Add code, text, codepoint and position attributes to IDNAError so that the failed rule and the offending character can be identified - **changed** — The deprecated transitional argument to encode() and uts46_remap() is now completely ignored, and gives a deprecation warning for the latter - **fixed** — Reject A-labels that are not the canonical Punycode encoding of their U-label - **fixed** — Fix CONTEXTJ violations raising IDNAError instead of InvalidCodepointContext - **fixed** — Consistently raise IDNAError for empty labels and non-ASCII bytes passed to label helper functions and the incremental codec - 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.