Encoding

Punycode / IDN

Convert internationalised domain names to their ASCII (xn--) form and back.

Punycode / IDN options

Direction
Mode

Converts each label of a domain or email: münchen.de ↔ xn--mnchen-3ya.de

Keyboard shortcuts

Esc
Close a menu or overlay, then leave full screen
↓ on a menu
Open it; ↑ ↓ move through its items
← → in the menu bar
Move between menus

Where your data goes

Using this page Using the API, MCP or A2A
Where it runs In your browser. Conversion uses the bundled punycode library (RFC 3492) running in the page. In a Cloudflare Pages Function at the Cloudflare data centre nearest the caller.
What leaves your device Nothing you enter. After the page and its scripts load, no request carries your input. The browser enforces this: the page's Content-Security-Policy sets connect-src 'none' and form-action 'none', which block fetch, XHR, WebSocket, EventSource, beacons and form posts.

The server receives the input text and mode, converts it in memory inside the request, and returns the result. Your input is not stored or logged; only the per-call metadata row (operation, time, status, sizes) is recorded. Send secrets in a POST body, not the query string: URLs are recorded in Cloudflare request logs, proxies, and shell history.

Stored Nothing leaves the page. No cookies, analytics or third-party scripts; the browser keeps only your View → Inline config choice. Your inputs and results: never. What is stored is your client record (client ID, a SHA-256 hash of your secret, expiry, and the profile you registered with) and one metadata row per call: operation, time, transport, status, error code, duration, request and response sizes, and country.
Logged Nothing (no requests are made). Only the per-call metadata above, attributed to your client ID. Never parameters, bodies, results, or credentials. Cloudflare, as the host, also processes request metadata (IP address, full URL including the query string, headers) under its own policies, so put inputs in POST bodies.
Access Open to anyone. Requires a client ID and secret (how to get one). HTTPS only; TLS terminates at Cloudflare.

Details and how to verify this yourself: Security & privacy.

User guide

The tool sits in a window that works like a desktop app: menus on the top row and the full-screen icon at its right (Esc leaves full screen). The set-up options described below are in Settings → Options…, an overlay, and the Settings menu also lists the common choices directly. To keep the options in view instead, choose View → Inline config; the page remembers that choice. Help → Keyboard shortcuts… lists the keys.

To ASCII converts an internationalised domain name to the form DNS actually stores: münchen.de → xn--mnchen-3ya.de. To Unicode reverses it.

  • Domain (IDN) mode works label by label and preserves dots. It also handles email addresses: only the domain part is converted.
  • Raw mode applies bare Punycode with no xn-- prefix. You rarely need it except to debug encoders.

Spotting look-alike domains. If a link shows a familiar name but its ASCII form contains xn--, it includes non-ASCII characters. Paste the address here, convert To ASCII, and compare. For example аpple.com written with a Cyrillic а becomes xn--pple-43d.com.

Specification

  • Algorithm. RFC 3492 Punycode (Bootstring with the IDNA parameters). Labels containing non-ASCII characters get the xn-- ACE prefix (RFC 5890).
  • Domain mode.
    • Splitting. Labels are split on . and on the IDNA2003 alternative dots 。 . 。.
    • ASCII labels pass through unchanged.
    • Email addresses. The local part, before @, is never converted.
  • What this tool does not do.
    • No Unicode normalisation (NFC).
    • No case folding.
    • No IDNA2008 / UTS #46 validity checks (disallowed characters, bidi rules, label length limits).
    • So it converts strings that a registry would refuse. Use it to inspect names, not to validate registrations.
  • Errors. To Unicode fails on malformed Punycode (invalid digits, overflow). To ASCII fails on input that can’t be represented, such as a lone surrogate.

API & MCP

The same logic is available over HTTP and as MCP tools. Unlike this page, these run on the server: see where your data goes.