Julien's dev blog

List of IDNA-related RFCS

List of IETF RFCs related to Internationalized Domain Names for Applications (IDNA).

Last updated on: 2025-04-01

[
    {"rfc":["https://www.rfc-editor.org/info/rfc3490","RFC 3490"],"year":2003,"month":"March","title":"Internationalizing Domain Names in Applications (IDNA)","authors":"P. Faltstrom, P. Hoffman, A. Costello","status":"Proposed Standard","obsoletedBy":["RFC 5890","RFC 5891"],"files":[["https://www.rfc-editor.org/rfc/rfc3490.txt","ASCII"],["https://www.rfc-editor.org/pdfrfc/rfc3490.txt.pdf","PDF"],["https://www.rfc-editor.org/rfc/rfc3490.html","HTML"],["https://www.rfc-editor.org/rfc/inline-errata/rfc3490.html","HTML with inline errata"]],"errata":"https://www.rfc-editor.org/errata/rfc3490"},
    {"rfc":["https://www.rfc-editor.org/info/rfc3492","RFC 3492"],"year":2003,"month":"March","title":"Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)","authors":"A. Costello","status":"Proposed Standard","updatedBy":["RFC 5891"],"files":[["https://www.rfc-editor.org/rfc/rfc3492.txt","ASCII"],["https://www.rfc-editor.org/pdfrfc/rfc3492.txt.pdf","PDF"],["https://www.rfc-editor.org/rfc/rfc3492.html","HTML"],["https://www.rfc-editor.org/rfc/inline-errata/rfc3492.html","HTML with inline errata"]],"errata":"https://www.rfc-editor.org/errata/rfc3492"},
    {"rfc":["https://www.rfc-editor.org/info/rfc4690","RFC 4690"],"year":2006,"month":"September","title":"Review and Recommendations for Internationalized Domain Names (IDNs)","authors":"J. Klensin, P. Faltstrom, C. Karp, IAB","status":"Informational","files":[["https://www.rfc-editor.org/rfc/rfc4690.txt","ASCII"],["https://www.rfc-editor.org/pdfrfc/rfc4690.txt.pdf","PDF"],["https://www.rfc-editor.org/rfc/rfc4690.html","HTML"]],"errata":"https://www.rfc-editor.org/errata/rfc4690"},
    {"rfc":["https://www.rfc-editor.org/info/rfc5890","RFC 5890"],"year":2010,"month":"August","title":"Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework","authors":"J. Klensin","status":"Proposed Standard","obsoletes":["RFC 3490"],"updates":["RFC 4343"],"files":[["https://www.rfc-editor.org/rfc/rfc5890.txt","ASCII"],["https://www.rfc-editor.org/pdfrfc/rfc5890.txt.pdf","PDF"],["https://www.rfc-editor.org/rfc/rfc5890.html","HTML"],["https://www.rfc-editor.org/rfc/inline-errata/rfc5890.html","HTML with inline errata"]],"errata":"https://www.rfc-editor.org/errata/rfc5890"},
    {"rfc":["https://www.rfc-editor.org/info/rfc5891","RFC 5891"],"year":2010,"month":"August","title":"Internationalized Domain Names in Applications (IDNA): Protocol","authors":"J. Klensin","status":"Proposed Standard","obsoletes":["RFC 3490","RFC 3491"],"updates":["RFC 3492"],"files":[["https://www.rfc-editor.org/rfc/rfc5891.txt","ASCII"],["https://www.rfc-editor.org/pdfrfc/rfc5891.txt.pdf","PDF"],["https://www.rfc-editor.org/rfc/rfc5891.html","HTML"]],"errata":"https://www.rfc-editor.org/errata/rfc5891"},
    {"rfc":["https://www.rfc-editor.org/info/rfc5892","RFC 5892"],"year":2010,"month":"August","title":"The Unicode Code Points and Internationalized Domain Names for Applications (IDNA)","authors":"P. Faltstrom, Ed.","status":"Proposed Standard","updatedBy":["RFC 8753"],"files":[["https://www.rfc-editor.org/rfc/rfc5892.txt","ASCII"],["https://www.rfc-editor.org/pdfrfc/rfc5892.txt.pdf","PDF"],["https://www.rfc-editor.org/rfc/rfc5892.html","HTML"],["https://www.rfc-editor.org/rfc/inline-errata/rfc5892.html","HTML with inline errata"]],"errata":"https://www.rfc-editor.org/errata/rfc5892"},
    {"rfc":["https://www.rfc-editor.org/info/rfc5893","RFC 5893"],"year":2010,"month":"August","title":"Right-to-Left Scripts for Internationalized Domain Names for Applications (IDNA)","authors":"H. Alvestrand, Ed., C. Karp","status":"Proposed Standard","files":[["https://www.rfc-editor.org/rfc/rfc5893.txt","ASCII"],["https://www.rfc-editor.org/pdfrfc/rfc5893.txt.pdf","PDF"],["https://www.rfc-editor.org/rfc/rfc5893.html","HTML"]]},
    {"rfc":["https://www.rfc-editor.org/info/rfc5894","RFC 5894"],"year":2010,"month":"August","title":"Internationalized Domain Names for Applications (IDNA): Background, Explanation, and Rationale","authors":"J. Klensin","status":"Informational","files":[["https://www.rfc-editor.org/rfc/rfc5894.txt","ASCII"],["https://www.rfc-editor.org/pdfrfc/rfc5894.txt.pdf","PDF"],["https://www.rfc-editor.org/rfc/rfc5894.html","HTML"]]},
    {"rfc":["https://www.rfc-editor.org/info/rfc5895","RFC 5895"],"year":2010,"month":"September","title":"Mapping Characters for Internationalized Domain Names in Applications (IDNA) 2008","authors":"P. Resnick, P. Hoffman","status":"Informational","files":[["https://www.rfc-editor.org/rfc/rfc5895.txt","ASCII"],["https://www.rfc-editor.org/pdfrfc/rfc5895.txt.pdf","PDF"],["https://www.rfc-editor.org/rfc/rfc5895.html","HTML"]]},
    {"rfc":["https://www.rfc-editor.org/info/rfc6452","RFC 6452"],"year":2011,"month":"November","title":"The Unicode Code Points and Internationalized Domain Names for Applications (IDNA) - Unicode 6.0","authors":"P. Faltstrom, Ed., P. Hoffman, Ed.","status":"Proposed Standard","files":[["https://www.rfc-editor.org/rfc/rfc6452.txt","ASCII"],["https://www.rfc-editor.org/pdfrfc/rfc6452.txt.pdf","PDF"],["https://www.rfc-editor.org/rfc/rfc6452.html","HTML"]]},
    {"rfc":["https://www.rfc-editor.org/info/rfc8753","RFC 8753"],"year":2020,"month":"April","title":"Internationalized Domain Names for Applications (IDNA) Review for New Unicode Versions","authors":"J. Klensin, P. Fältström","status":"Proposed Standard","updates":["RFC 5892"],"files":[["https://www.rfc-editor.org/rfc/rfc8753.html","HTML"],["https://www.rfc-editor.org/rfc/rfc8753.txt","TEXT"],["https://www.rfc-editor.org/rfc/rfc8753.pdf","PDF"],["https://www.rfc-editor.org/rfc/rfc8753.xml","XML"]]},
    {"rfc":["https://www.rfc-editor.org/info/rfc9233","RFC 9233"],"year":2022,"month":"March","title":"Internationalized Domain Names for Applications 2008 (IDNA2008) and Unicode 12.0.0","authors":"P. Fältström","status":"Proposed Standard","files":[["https://www.rfc-editor.org/rfc/rfc9233.html","HTML"],["https://www.rfc-editor.org/rfc/rfc9233.txt","TEXT"],["https://www.rfc-editor.org/rfc/rfc9233.pdf","PDF"],["https://www.rfc-editor.org/rfc/rfc9233.xml","XML"]]}
]
List of IETF RFCs related to Internationalized Domain Names for Applications (IDNA) (as JSON)

This list was extracted from https://www.rfc-editor.org/search/rfc_search_detail.php?title=IDNA&page=All using the following client-side Javascript:

function cleanTxt(txt) {
    txt = txt.normalize('NFKD');
    txt = txt.trim();
    return txt;
}

function extractCol1(cell) {
    let v = {};
    cell.querySelectorAll("a").forEach(link => {
        if (link.innerText.includes("RFC")) { v.rfc = [link.href, cleanTxt(link.innerText)] }
        if (link.innerText.includes("BCP")) { v.bcp = [link.href, cleanTxt(link.innerText)] }
        if (link.innerText.includes("STD")) { v.std = [link.href, cleanTxt(link.innerText)] }
        if (link.innerText.includes("FYI")) { v.fyi = [link.href, cleanTxt(link.innerText)] }
    })
    return v;
}

function extractFileUrls(cell) {
    let links = [];
    cell.querySelectorAll("a").forEach(link => {
        links.push([link.href, cleanTxt(link.innerText)]);
    })
    return links;
}

function extractMoreInfo(cell) {
    let section = "errata";
    let info = {};
    cell.childNodes.forEach(node => {
        if (node.nodeType === Node.ELEMENT_NODE && node.innerText === "Errata") { info.errata = node.href; }
        if (node.nodeType === Node.TEXT_NODE && node.data.includes("Obsoleted by")) { section = "obsoletedBy"; info[section] = []; }
        if (node.nodeType === Node.TEXT_NODE && node.data.includes("Obsoletes")) { section = "obsoletes"; info[section] = []; }
        if (node.nodeType === Node.TEXT_NODE && node.data.includes("Updated by")) { section = "updatedBy"; info[section] = []; }
        if (node.nodeType === Node.TEXT_NODE && node.data.includes("Updates")) { section = "updates"; info[section] = []; }
        if (section != "errata" && node.nodeType === Node.ELEMENT_NODE) { info[section].push(cleanTxt(node.innerText)) }
    })
    return info;
}

function extractRfcInfoFromRow(el) {
    let cells = el.querySelectorAll("td");
    let col1 = extractCol1(cells[0]);
    let moreInfo = extractMoreInfo(cells[5]);
    return {
        rfc: col1.rfc,
        year: parseInt(cleanTxt(cells[4].innerText).split(" ")[1]),
        month: cleanTxt(cells[4].innerText).split(" ")[0],
        title: cleanTxt(cells[2].innerText),
        authors: cleanTxt(cells[3].innerText),
        status: cleanTxt(cells[6].innerText),
        obsoletedBy: moreInfo.obsoletedBy,
        obsoletes: moreInfo.obsoletes,
        updatedBy: moreInfo.updatedBy,
        updates: moreInfo.updates,
        bcp: col1.bcp,
        std: col1.std,
        fyi: col1.fyi,
        files: extractFileUrls(cells[1]),
        errata: moreInfo.errata,
    };
}

const infos = [];
document.querySelectorAll("table.gridtable tbody tr:not(:first-of-type)").forEach(row => {
    infos.push(extractRfcInfoFromRow(row))
});
console.log(JSON.stringify(infos));
JS script to extract info