v148 · Security · IDN
Domain Validator
Enter an internationalized domain name and see whether it passes IDNA2008 ContextJ rules as enforced by Chrome 148. The validator identifies Zero Width Joiner (ZWJ) and Zero Width Non-Joiner (ZWNJ) characters, verifies Unicode joining contexts, and compares against the browser's native URL parser.
Sample domains — click to test
What ContextJ rules check
// Zero Width Non-Joiner (U+200C) is valid ONLY when:
// 1. Preceded by a Virama (e.g. Devanagari ् U+094D, Bengali, Gujarati, etc.), OR
// 2. In a valid cursive joining context: preceded by a Dual-Joining or Left-Joining
// character and followed by a Dual-Joining or Right-Joining character (e.g. Persian/Arabic).
// Zero Width Joiner (U+200D) is valid ONLY when:
// 1. Preceded by a Virama
// Chrome 148 enforces RFC 5892 ContextJ rules directly in URL parsing.
// An ASCII domain with ZWNJ (e.g. "examplecom") is rejected and throws TypeError.
// Legitimate joining scripts (e.g. "نامهای.com" or "ह्न.com") parse cleanly.
The joining-type and Virama tables this verifier uses are generated from the Unicode
Character Database (unknown) by deno task joining-table rather than
hand-picked ranges, and the Virama clause follows RFC 5892 §2.3 — Before(cp) is the character
immediately preceding the joiner. Those tables are what the browser's own parser is held to, so a
"verified clean" line below means this verifier and the spec agree, not just that the URL parsed.
references
implementation reference
Need the exact API surface, compatibility boundaries, errors, lifecycle, and source links? Read the matching gendn reference ↗