package idna

  1. Overview
  2. Docs
Internationalized Domain Names for OCaml (IDNA 2008 and UTS #46)

Install

dune-project
 Dependency

Authors

Maintainers

Sources

v0.3.0.tar.gz
md5=6fbed9dfec6402c9e382b79ffccc9abb
sha512=8b10a51d2ee2729af17f9f58751bfa9d0c032804566504af96a61f246e00e55682ab2b5443e65b2467fe93db22b15facfff2d17e9686a7ba65fd229dc50cc0dd

doc/README.html

ocaml-idna

Internationalized Domain Names for OCaml (IDNA 2008 and UTS #46).

Pure OCaml implementation of IDNA2008 hostname validation, UTS #46 compatibility processing, Punycode encoding/decoding, and Unicode NFC normalization. No C dependencies. Unicode 16.0.0.

Installation

opam install idna

Usage

(* UTS #46 processing *)
Idna.to_ascii "Königsgäßchen.example"   (* Ok "xn--knigsgchen-b4a3dun.example" *)
Idna.to_unicode "xn--maana-pta.com"     (* Ok "mañana.com" *)

(* IDNA2008 validation *)
Idna.is_valid_hostname "example.com"     (* true *)
Idna.is_valid_hostname "-invalid.com"    (* false *)

Idna.check_label "xn--maana-pta"        (* Ok () *)
Idna.check_label "xn--X"                (* Error "invalid punycode" *)

(* Punycode *)
Idna.Punycode.decode "maana-pta"         (* Ok [0x6D; 0x61; 0xF1; ...] *)
Idna.Punycode.encode [0x6D;0x61;0xF1;0x61;0x6E;0x61]  (* Ok "maana-pta" *)

(* NFC normalization *)
Idna.nfc [0x0065; 0x0301]               (* [0x00E9] — e + acute → é *)

Features

  • UTS #46 Nontransitional processing (to_ascii, to_unicode)
  • IDNA2008 hostname and label validation (RFC 5890, 5891, 5892)
  • Bidirectional text rules 1-6 (RFC 5893), domain-level enforcement
  • Punycode encoding and decoding (RFC 3492)
  • Unicode NFC normalization (canonical decomposition, ordering, composition; Hangul)
  • Codepoint classification (PVALID, CONTEXTJ, CONTEXTO)
  • CONTEXTJ/CONTEXTO contextual rules
  • STD3 ASCII rules

Regenerating Unicode tables

Tables are generated from Unicode 16.0.0 UCD:

./tools/download_ucd.sh 16.0.0
python3 tools/gen_tables.py --output lib/idna_tables.ml

License

ISC