Internationalized Domain Names for Python (IDNA 2008 and UTS #46) provides `encode` and `decode` helpers to convert domain names between Unicode (U-labels) and ASCII-compatible encoding (A-labels). It also includes Unicode IDNA Compatibility Processing (UTS #46), optional per-label conversion helpers, and raises specific errors for invalid code points and bidi/context issues.
Project status
- Actively maintained: The repo shows frequent version updates in 2026 (v3.13 to v3.16 spanning about a month), plus ongoing CI/tooling and packaging changes, indicating active maintenance rather than a maintenance-only mode.
- Update cadence: Recent updates arrive roughly every 10 to 20 days (v3.15 on 2026-05-12, v3.16 on 2026-05-22), with earlier 2026 gaps also on the order of a few weeks (for example, v3.13 on 2026-04-22, v3.14 on 2026-05-10).
AI summary generated 6 days ago
Recent updates
v3.18
TodayRelease v3.18 introduces a new optional decoding mode to support “decode for display”. When enabled, `idna.decode()` will preserve problematic `xn--` labels instead of failing the entire decode call.
Featuresv3.17
5 days agoThis release (v3.17) ships with no publisher-provided release notes. Code changes indicate two main themes: a defensive input length cap (1024 characters) and substantial internal refactoring of IDNA/UTS46 data structures to reduce memory usage and improve processing efficiency.
v3.16
1 week agoRelease v3.16 adds a new command line interface for the idna package (invoked via python -m idna, and intended to be available as an idna script after installation). The diff also shows build and CI tooling updates, including pinned lint/test dependency installation and an apparent raise in the minimum supported Python version.
Featuresv3.15
3 weeks agoRelease v3.15 primarily refactors internal IDNA implementation details (bidi category handling, shared unicode dot regex usage, and minor string formatting/structure changes) in idna/core.py and idna/codec.py. Separately, it modernizes repo metadata and CI (README and HISTORY converted to Markdown, workflows updated/pinned, Dependabot config added). No publisher release notes were provided.
v3.14
3 weeks agov3.14 introduces changes aimed at mitigating a denial-of-service vector related to IDNA handling of very long inputs, specifically by rejecting oversize inputs earlier to avoid quadratic-time processing. In addition, the repository updates developer tooling checks in CI (adding `ty`) and includes documentation-only changes (docstrings and type annotations).
Securityv3.13
1 month agoRelease v3.13 contains a correction related to Unicode character classification for code point U+A7F1. The only library data change visible in the diff removes an entry for U+A7F1 from the joining types table.
v3.12
1 month agoRelease v3.12 updates the bundled IDNA and UTS #46 data (Unicode 17.0.0) and introduces runtime changes around contextual joining data loading and the encode() transitional argument. It also refreshes CI and publishing workflows to newer GitHub Actions versions.
Breakingv3.11
7 months agoVersion 3.11 updates the bundled Unicode data to Unicode 16.0.0 (including major UTS46 processing changes) and extends CI and packaging to support Python 3.14, with the minimum supported Python version raised to 3.8. Release documentation also states that UTS46 transitional processing no longer has any effect due to Unicode ending support for that transitional behavior.
BreakingFeaturesv3.10
9/15/2024Release v3.10 reverts the Unicode data used by the project back to Unicode 15.1.0 (from Unicode 16). It also includes code changes in the UTS46 remapping logic that alter how STD3 rule enforcement and certain UTS46 status types are handled.
Breakingv3.9
9/14/2024Release v3.9 updates the underlying IDNA data to Unicode 16.0.0, and moves code style tooling to Ruff (formatting and lint checks). It also transitions packaging metadata toward pyproject.toml (deprecating setup.cfg).
Featuresv3.8
8/23/2024Release v3.8 primarily documents a fix for a regression where decoding could fail to raise IDNAError for certain inputs, plus Python version support updates (add Python 3.13, drop Python 3.5). It also includes documentation and CI workflow updates related to testing/publishing.
Breakingv3.7
4/11/2024v3.7 includes a security fix for a denial-of-service risk when encoding specially crafted inputs. The change mitigates cases where encode() could take an exceptionally long time to process, addressed under CVE-2024-3651.
Security