An implementation of Unicode Technical Standard #46 (Unicode IDNA Compatibility Processing) in JavaScript. Useful for converting domain names between Unicode and ASCII Punycode (via `toASCII` and `toUnicode`), with optional validation controls like bidi, hyphens, joiners, and DNS label length checks.
Project status
- Maintenance status: The source shows ongoing maintenance in 2025, with an upstream push on 2025-11-21 and the latest published updates in 2025 (v6.0.0 on 2025-09-18). As of 2026-06-11, there have been no new updates for several months, so it looks moderately quiet recently, not fully dormant.
- Update cadence (apparent): Updates arrive in bursts aligned to Unicode/TR46 alignment work, including a major update in 2023 (v4.0.0), another set in 2025 (v5.0.0, v5.1.0, v5.1.1, v6.0.0). The most recent update is 2025-09, suggesting slower cadence since late 2025.
AI summary generated
Recent updates
v6.0.0
Version 6.0.0 updates the library to Unicode 17.0.0, which the release notes tie to a TR 46 revision 35 update. It also raises the minimum supported Node.js version to v20. The code diff, however, includes several additional build and CI changes not mentioned in the release notes.
Breakingv5.1.1
Release v5.1.1 fixes a regression affecting behavior when the `useSTD3ASCIIRules` option is set to `true`. The code change corrects how STD3 ASCII label validation is performed for ASCII characters, and adds a dedicated test suite to cover the option.
v5.1.0
Version 5.1.0 updates the embedded Unicode data to Unicode 16.0.0 and adjusts logic to align with Unicode TR46 revision 33. Release notes are high level and state there are no public API changes, but the code diff shows multiple behavioral changes around validation rules and option handling.
Breakingv5.0.0
v5.0.0 updates the library to follow Unicode UTS #46 (TR46) Revision 31, aligned with Unicode 15.1.0, and raises the supported Node.js runtime to v18+. The public options API is updated to replace the older `processingOption` string with `transitionalProcessing`, and it adds `ignoreInvalidPunycode`.
BreakingFeaturesv4.1.1
v4.1.1 focuses on fixing how the library handles IDNA labels that include an empty label (for example, domain inputs like xn--4-0bd15808a.). The release notes state that tr46 operations now behave like browsers by passing through empty labels instead of failing under the TR 46 bidi rule ambiguity.
v4.1.0
Version 4.1.0 updates the packaged Unicode data tables to align with Unicode 15.0.0 instead of older Unicode 12.1.0-derived tables that were left incomplete in prior releases. The changes are limited to regenerated Unicode classification datasets and the package version bump.
v4.0.0
Release v4.0.0 raises the supported Node.js runtime to 14.x and updates Unicode processing to Unicode 15.0.0. It also switches to using the npm punycode package instead of Node.js's deprecated built-in punycode implementation.
BreakingFeaturesv3.0.0
Version 3.0.0 raises the library's minimum Node.js requirement to v12.x and updates IDNA/UTS #46 behavior to support Unicode 14.0.0. The release notes are minimal and do not describe any other runtime or developer-facing changes beyond those two items.
BreakingFeaturesv2.1.0
Version 2.1.0 is primarily a Unicode data update, targeting Unicode 13.0.0 support. Alongside that, the release updates development tooling versions (eslint, mocha), modernizes the test-data download script to use Node stream pipeline, and adjusts tests for known UTS #46 Unicode 13 edge-case mismatches.
Featuresv2.0.2
Release 2.0.2 is a quick follow-up to 2.0.1, with release notes stating it fixes a packaging issue and that the bundled output is now smaller. The provided diff only shows a packaging manifest change in package.json, with no library code changes visible.