Information about all top-level domains (TLDs)
  • HTML 99.9%
  • Python 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-10 17:01:44 +02:00
www.iana.org 🎉 Initialized with root zone DB crawl 2026-08-09 20:33:50 +02:00
extract-data.py 📝 Document repository 2026-09-10 16:22:53 +02:00
extract-data.sh ✨ Prefix with . 2026-09-07 09:14:43 +02:00
LICENSE.md 📄 MIT License 2026-09-10 16:49:35 +02:00
README.md 📝 Define "Europe" in README as well 2026-09-10 17:01:44 +02:00
tld2flag.sed ✨ Mark types; extended Europe; corporate label 2026-09-05 22:23:18 +02:00

(Sovereignty) Information about Top-Level Domains (TLD)

The goal is to provide

  1. tabular information on all TLDs, for sorting, searching, whatever
  2. a base for your sovereignty evaluation of TLDs
  3. one example of sovereignty definition

For more information, see https://netfuture.ch/2026/09/domains-for-digital-sovereignty/

Definitions

  • "Europe": EU, EFTA, UK
  • "Extended Europe": All of the above, plus:

Files

  • www.iana.org/domains/root/db/*.html: Official TLD descriptions in HTML, crawled 2026-08-09

Data source

The data was obtained from the IANA Root Zone Database on 2026-08-09 via

wget -r -np https://www.iana.org/domains/root/db

The data may be under copyright by IANA/ICANN. It is provided here as a cache to avoid everyone to having to re-scrape the database. It's use here is considered fair use.

Tools

extract-data.py

This tool parses all the data files into a hash keyed by the TLD, the value being an array of:

  • TLD name
  • Type of TLD, later prefixed with:
    • 🪑 (reserved, not assigned)
    • 🌍 (ccTLD, ISO-3166 or in national script)
    • 🔧 (infrastructure domain)
    • 🧪 (test domain)
    • 🏢 (generic TLD; probably only for use by the TLD owner; this flag is manually curated and has only been set for "European" domains)
    • 🦚 (generic TLD, remaining entries)
  • Type of sponsor ("Sponsoring Organisation" or "ccTLD Manager")
  • Contact address of sponsor/ccTLD manager
  • Country of the above address, later converted into "{flag} {country code}" format
  • Fixed string "Administrative Contact", later deleted
  • Address of administrative contact
  • Country of the above address, later converted into "{flag} {country code}" format
  • Fixed string "Technical Contact", later deleted
  • Address of administrative contact
  • Country of the above address, later converted into "{flag} {country code}" format
  • Sovereignty Summary, first match returned:
    • 🫙 Incomplete record: Not all three addresses set
    • 🟢 All in Europe: All three countries are in "Europe"
    • 🔷 All in extended Europe: All three countries are in "Extended Europe"
    • ⬜ Technology not in Europe: Domain owner is in Europe, but not Administrative or Technical Contact
    • ⭕ Not in Europe: Everything else
  • Link to the IANA DB entry (<a href> format)
  • URL of the IANA DB entry

This hash is output to stdout in JSON format and written to Domains.csv in CSV format

If you want to consider different countries as sovereign, feel free to change the europe and extended arrays.

extract-data.sh

Calls extract-data.py with all DB HTML files as parameters. This is the preferred way of processing the data.

TODO

  • Extend corporate list to TLDs outside of "Europe"