An internationalized hostname validator as defined by RFC5890, RFC5891, RFC5892, RFC5893, RFC3492 and UTS#46
Last release today
29 Aug 2026
Ships unpredictably
gaps range from 8 days to 8 months
Some releases are documented
notes for 10 of 21 stable releases
Nothing withdrawn
no release was ever pulled
10 months old
21 releases · first in 2025
Release timeline
21 releases since 2025One column per month.
Releases
- 17.0.129 Aug 2026
Release notes
Open source →Performance
Add a validated fast path for non-reserved ASCII LDH hostnames. Hostnames whose labels contain only ASCII letters, digits, and internal hyphens, satisfy the 63-character label and 253-character presentation limits, and do not contain
--in positions 3 and 4 now avoid Unicode mapping, Punycode, contextual, and bidi validation.Reserved labels, including
xn--A-label candidates, continue through the complete IDNA pipeline.idnHostnamecontinues to apply UTS #46 mapping when producing output, including lowercase conversion of uppercase ASCII input.On Node.js 24.20.0, the fast path validated the representative 86-character ASCII hostnames at approximately 1.14 million validations per second on the benchmark system.
Verification
- All 122 package tests passed.
- All 6,190 applicable nontransitional Unicode 17.0
IdnaTestV2.txtvectors passed.
- 17.0.028 Aug 2026
Release notes
Open source →Unicode 17.0
Upgrade the bundled UTS #46 and IDNA2008 data from Unicode 16.0.0 to Unicode 17.0.0. This release continues to use nontransitional processing with STD3 rules disabled during preprocessing and ships one deterministic Unicode table.
Install this release line explicitly with:
npm install idn-hostname@17
Compatibility with 16.0
Unicode 17.0 expands the accepted repertoire. Exhaustive comparison of the complete compact tables found no change to final eligibility, preprocessing behavior, existing mappings, viramas, bidi classes, or joining types that invalidates an input accepted by the Unicode 16 release line.
Runtime compatibility and selection of the appropriate package release remain the consumer's responsibility.
Verification
Qualification used Node.js 24.13.1 with Unicode 17.0 and ICU 78.2.
- All 118 package tests passed, including seven Unicode 17-specific fixtures.
- All 6,190 applicable nontransitional
IdnaTestV2.txtvectors passed. - Compact Unicode 17.0.0 table source-fidelity and deterministic-rebuild verification passed.
- The deployed table is byte-identical to the verified Unicode 17 build artifact.
- 16.0.129 Aug 2026
Release notes
Open source →Performance
Add a validated fast path for non-reserved ASCII LDH hostnames. Hostnames whose labels contain only ASCII letters, digits, and internal hyphens, satisfy the 63-character label and 253-character presentation limits, and do not contain
--in positions 3 and 4 now avoid Unicode mapping, Punycode, contextual, and bidi validation.Reserved labels, including
xn--A-label candidates, continue through the complete IDNA pipeline.idnHostnamecontinues to apply UTS #46 mapping when producing output, including lowercase conversion of uppercase ASCII input.Verification
- All 115 package tests passed.
- All 6,188 applicable nontransitional Unicode 16.0
IdnaTestV2.txtvectors passed.
- 16.0.028 Aug 2026
Release notes
Open source →Unicode 16.0
Upgrade the bundled UTS #46 and IDNA2008 data from Unicode 15.1.0 to Unicode 16.0.0. This release continues to use nontransitional processing with STD3 rules disabled during preprocessing and ships one deterministic Unicode table.
Install this release line explicitly with:
npm install idn-hostname@16
Compatibility with 15.1
Unicode 16.0 expands the accepted repertoire. Existing mappings and final/preprocessing eligibility remain additive, with one relevant property correction:
U+1171E AHOM CONSONANT SIGN MEDIAL RA Bidi_Class: NSM -> L Joining_Type: T -> UConsequently, labels whose validity depends on the Unicode 15.1 properties of U+1171E can become invalid under RFC 5893 bidi or RFC 5892 CONTEXTJ validation. The README includes examples for both cases.
Runtime compatibility and selection of the appropriate package release remain the consumer's responsibility.
Verification
- All 111 package tests passed, including seven Unicode 16-specific fixtures.
- All 6,188 applicable nontransitional
IdnaTestV2.txtvectors passed. - Compact Unicode 16.0.0 table source-fidelity and deterministic-rebuild verification passed.
- The deployed table is byte-identical to the verified Unicode 16 build artifact.
- 15.1.1629 Aug 2026
Release notes
Open source →Performance
Add a validated fast path for non-reserved ASCII LDH hostnames. Hostnames whose labels contain only ASCII letters, digits, and internal hyphens, satisfy the 63-character label and 253-character presentation limits, and do not contain
--in positions 3 and 4 now avoid Unicode mapping, Punycode, contextual, and bidi validation.Reserved labels, including
xn--A-label candidates, continue through the complete IDNA pipeline.idnHostnamecontinues to apply UTS #46 mapping when producing output, including lowercase conversion of uppercase ASCII input.Verification
- All 108 package tests passed.
- All 6,077 applicable nontransitional Unicode 15.1
IdnaTestV2.txtvectors passed.
- 15.1.1528 Aug 2026
Release notes
Open source →Fix
Correct RFC 5892 Appendix A.4 validation for U+0375 GREEK LOWER NUMERAL SIGN. The validator now checks the Script property of the immediately following character rather than matching the complete remaining label suffix.
This fixes both boundaries:
- a following Greek character remains valid when additional characters follow;
- an intervening non-Greek combining mark is rejected.
Documentation
- Pin UTS #46 to stable Unicode 15.1 revision 31.
- Clarify that named
SyntaxErrorobjects apply to the three validator functions, not the separately exported low-level Punycode dependency. - Clarify the bundled-table wording and update the package-test count.
The bundled Unicode target remains Unicode 15.1.0.
Verification
- All 104 package tests passed.
- All 6,077 applicable nontransitional
IdnaTestV2.txtvectors passed. - Compact Unicode 15.1.0 table source-fidelity verification passed.
- 15.1.1428 Aug 2026
Release notes
Open source →Installation guidance
The README installation command now selects the Unicode 15.1 release line explicitly:
npm install [email protected]
This installs the latest
15.1.xpatch without automatically selecting a different Unicode release line.This patch changes documentation and package metadata only. Validation behavior and the bundled Unicode 15.1.0 table are unchanged.
Verification
- Compact Unicode 15.1.0 table source-fidelity verification passed.
- All 6,077 applicable nontransitional
IdnaTestV2.txtvectors passed.
- 15.1.1328 Aug 2026
Release notes
Open source →Versioning policy
- The package major and minor version components identify the targeted Unicode major and minor version.
- The package patch component identifies fixes and revisions that retain the same Unicode target.
- Each release ships one Unicode data table without runtime table selection. Runtime compatibility and release-line selection remain the consumer's responsibility.
- Releases that change the Unicode target will document compatibility with the preceding release line and identify known inputs that become invalid.
The
15.1.xrelease line continues to target Unicode 15.1.0. This patch changes documentation and package metadata only; validation behavior and the bundled Unicode table are unchanged.Verification
- Compact Unicode 15.1.0 table source-fidelity verification passed.
- All 6,077 applicable nontransitional
IdnaTestV2.txtvectors passed.
- 15.1.1225 Aug 2026
Release notes
Open source →Changed
- Moved the package validation fixtures out of the canonical repository and into public workspace data.
- Replaced the previous ignore rules with the root
#/exclusion used for materialized workspace data. - Consolidated qualification and test-access documentation under the
Testssection. - Added a folded guide for materializing the package tests through
gh-workspace-data.
- 15.1.1116 Aug 2026
Release notes
Open source →Summary
This update separates UTS #46 preprocessing from final IDNA eligibility.
A source code point may be permitted during nontransitional preprocessing but still be invalid after mapping and NFC. Conversely, a preprocessing sequence such as Hangul Jamo may normalize into a valid final syllable. The validator now represents and checks those phases independently without adding another label scan.
The update also corrects ACE handling and the RFC 5892 ZWNJ joining-context check.
What is new
Two-phase IDNA processing
- UTS #46 preprocessing uses sparse
uts46_rangesoverrides and falls back toranges. - Final post-NFC validation uses only
ranges. - Every non-empty UTS #46 preprocessing mapping is available, even when its result must later be rejected.
- Final eligibility is checked in the existing per-code-point contextual loop, preserving one label code-point spread and one loop.
- Processing remains nontransitional, with STD3 rules disabled.
This resolves cases that one combined property could not represent:
- U+00BC VULGAR FRACTION ONE QUARTER is allowed to map, but its result contains ineligible U+2044 FRACTION SLASH and is rejected afterward.
- Hangul Jamo are permitted during preprocessing when NFC can compose them into an eligible Hangul syllable.
- U+0133 LATIN SMALL LIGATURE IJ maps to
ij. - U+180C MONGOLIAN FREE VARIATION SELECTOR THREE is removed, so
a᠌bvalidates asab.
ACE and normalization
- Ordinary input is mapped and normalized before ACE-prefix recognition.
- Mixed-case ACE labels are canonicalized by preprocessing before the existing strict round-trip comparison.
- An
xn--prefix created by mapping is recognized and validated as ACE. - Decoded Punycode is validated without remapping or normalization.
- A decoded A-label that is not already NFC is rejected. For example,
xn--u-ccbno longer passes by being normalized into validity. - The existing raw apparent-A-label/non-ASCII error retains its precedence.
Final eligibility
Mapped/NFC output and decoded ACE output are checked against the final/default ranges. Only
validand nontransitionaldeviationproperties are accepted at this stage.The final check reuses the existing
IdnaUnicodeErrorand runs inside the existing contextual loop. Length, hyphen, and leading-mark checks retain their current ordering.ZWNJ joining context
The RFC 5892 Appendix A.1 check now correctly requires:
LorDas the nearest non-transparent joining type on the left; andRorDas the nearest non-transparent joining type on the right.
A ZWNJ immediately following a virama remains accepted. The correction preserves the existing joining-type accumulator, loop, exception type, and error text.
The compact condition was compared with the RFC rule across 597,870 synthetic joining sequences, including transparent characters and both joining types found among Unicode 15.1 viramas, with no mismatch.
Unicode data
The compact table is generated directly from authoritative Unicode 15.1.0 text files:
IdnaMappingTable.txt;DerivedCombiningClass.txt;DerivedJoiningType.txt;DerivedBidiClass.txt.
IdnaTestV2.txtprovides the official qualification vectors.The validator continues to ship one immutable table and does not select a Unicode version at runtime. Unicode text files remain the source of truth; generation and exhaustive source-fidelity checks stay outside the validator package.
Current compact data totals:
Data Count Final/default ranges 2,034 Preprocessing override ranges 452 Code points covered by preprocessing overrides 9,490 Preprocessing mappings 6,239 Viramas 65 Bidi ranges 1,530 Joining-type ranges 506 The preprocessing overrides cover 8,900
validand 590mappedcode points.Qualification
The exact candidate implementation and Unicode 15.1 table pass:
Validator test suite 102 / 102 Applicable IdnaTestV2 cases 6077 / 6077The 102-case validator suite includes focused coverage for:
- U+00A0 mapping to invalid U+0020 SPACE;
- U+00BC mapping through invalid U+2044 FRACTION SLASH;
- mapped-range interior U+0133;
- ignored-range interior U+180C.
The qualification adapter separately records:
- 137 successful pure-UTS
NV8/XV8cases outside the validator's final policy; - 37 successful trailing-root cases outside the validator's intentional empty-final-label policy.
The runtime versions record test provenance; classification remains based on the bundled Unicode 15.1 table.
The generated data also passes exhaustive source-fidelity, range coverage, ordering, overlap, scalar, derived-property, and deterministic-rebuild checks.
Release notes
- Correct mapped and ignored range-interior handling.
- Permit preprocessing sequences that NFC transforms into eligible output.
- Reject mapped output that remains IDNA-ineligible after NFC.
- Accept mixed-case and mapping-created ACE prefixes after preprocessing.
- Reject decoded A-labels that are not already NFC.
- Correct invalid ZWNJ joining-context acceptance.
- Preserve existing APIs, error behavior, nontransitional processing, disabled STD3 preprocessing, and trailing-root policy.
- UTS #46 preprocessing uses sparse
- 15.1.101 Jul 2026
Nothing published for this version
- 15.1.91 Jul 2026
Nothing published for this version
- 15.1.831 Oct 2025
Nothing published for this version
- 15.1.728 Oct 2025
Nothing published for this version
- 15.1.625 Oct 2025
Nothing published for this version
- 15.1.523 Oct 2025
Nothing published for this version
- 15.1.422 Oct 2025
Nothing published for this version
- 15.1.319 Oct 2025
Nothing published for this version
- 15.1.218 Oct 2025
Nothing published for this version
- 15.1.117 Oct 2025
Nothing published for this version
- 15.1.014 Oct 2025
Nothing published for this version