Register a `.dot` Domain
Introduction
Section titled “Introduction”Every published Polkadot Product is reached by a dotNS name, such as awesome.dot. That name is registered with dotNS, Polkadot's decentralized, on-chain name service. dotNS turns a human-readable name into the Product bundle it points at, and it is the lookup every Host runs when a user navigates to it.
The registry (names, owners, and the content record each name points at) lives as contract state on Polkadot Hub. Resolution runs name → namehash → contenthash → CID: the name hashes to a deterministic key, the record's contenthash points at your bundle's CID, and the Host fetches and content-verifies the bundle before loading it.
Registration happens on chain, so the name rules below hold whichever tool you use. Three CLIs can register a name: the playground CLI folds it into a deploy, pad publishes a built bundle and registers its name in one command, and the dotNS CLI drives the registry directly. This guide explains how to choose a name your account is allowed to register, which path to take, and how to manage the name afterward.
Prerequisites
Section titled “Prerequisites”Before registering, ensure you have:
- Completed Install Desktop and Pair and Get TestNet Tokens; your account needs PAS to pay fees and any name deposit.
- One of the CLIs in Ways to Register installed. On the
playgroundpath that meanspg loginhas paired it with your signer. - A Product project ready to deploy, if you are registering as part of a deploy with
playgroundorpad. Registering with the dotNS CLI needs no bundle. See Deploy Your App.
Choose a Name
Section titled “Choose a Name”A name is a bare label plus the network's TLD, as in johnsmith57.paseo. How you supply it depends on the tool: playground and the dotNS CLI take the bare label (johnsmith57) and append the TLD for you, rejecting a label that already carries a different one, while pad takes the full name.
Label Rules
Section titled “Label Rules”A label must satisfy all of these, or registration is rejected before anything is submitted on chain:
- Length: 3 to 63 characters.
- Character set: lowercase letters, digits, and dashes (
a-z,0-9,-) only. - Dashes: cannot start or end with a dash.
- Digits: allowed anywhere, in any quantity. A trailing run of digits no longer carries any special meaning.
Length Bands
Section titled “Length Bands”Which band a name falls into depends on its length, counted as written. Digits count like any other character:
| Length | Requirement |
|---|---|
| 9 characters or longer | Open to everyone, with no personhood check |
| 6 to 8 characters | Not sold on this path; earned in the Polkadot App |
| 5 characters or fewer | Reserved for governance, not sold on this path |
So johnsmith57 is open to anyone because it is 11 characters, and so is johnsmith at exactly nine. johnny and johnny01, at six and eight characters, cannot be registered on this path whatever personhood status the account holds, and neither can john at four. johnny can still be earned as a personhood name in the Polkadot App. johnny01 cannot be earned there either, because a gateway name never carries digits without a separator. Adding digits no longer lowers the tier a name demands: it only makes the name longer, which can move it into the open band.
The six-to-eight band is closed on this path by a governance switch in PopRules, which is off by default. While it is off, registering a name of that length fails with Short names are not for sale.
Every name this path admits pays the same refundable deposit, whatever its length. See the PopRules and Pricing reference for the bands and the deposit.
Ways to Register
Section titled “Ways to Register”All three CLIs write to the same registry, so the name rules above apply identically to each. They differ in how much of the deploy they own:
| Tool | Best for | What it does |
|---|---|---|
playground | A first Product, and hackathons | Registers the name as one step of an interactive playground deploy |
pad | Scripted or CI deploys of a built bundle | Uploads the bundle, registers the name if needed, and writes the content record in one command |
dotns | Managing names on their own, with no deploy | Registration, lookups, content records, transfers, subnames, and escrow |
The choice is not permanent. A name registered by any of them is an ordinary name owned by your account, and the others operate on it afterward.
Register with the playground CLI
Section titled “Register with the playground CLI”When you run playground deploy and reach the domain prompt, enter the name you want:
domain
› johnsmith57█
From there, the CLI registers the name on chain. If you deploy with the phone signer, each on-chain step is a separate approval in the Polkadot App, in this order:
- Reserve domain: Submits a dotNS commitment for the name without revealing it in the clear.
- Finalize domain: Claims the name for your account.
- Link content: Points the name's
contenthashat your uploaded bundle's CID, so the name now resolves to your Product.
Names are first come, first served. If the CLI reports that a name is already registered, choose another; if it reports that short names are not for sale, pick a name of nine characters or more. With the dev signer, these steps run without phone prompts; the deployed name is owned by the shared dev account rather than by you.
Register with pad
Section titled “Register with pad”polkadot-app-deploy publishes a built bundle and registers its name in a single command, which suits a scripted or CI deploy:
npm i -g @parity/polkadot-app-deploypad ./dist johnsmith57.paseo --mnemonic "$MNEMONIC"pad uploads the bundle to the Bulletin Chain, skipping unchanged blocks on repeat deploys, registers the name if you do not already own it, and writes the content record on Polkadot Hub. It also has a login mode: on TestNet a local worker registers the name and then transfers it to the signed-in account, so the deploy runs without phone taps unless you pass --no-transfer-to-signedin-user. pad does not read the dotNS keystore, so supply the key explicitly when you are not using login.
Register with the dotNS CLI
Section titled “Register with the dotNS CLI”The dotNS CLI registers a name on its own, with no bundle and no deploy involved. Reach for it when you want to hold a name before the Product is ready, script a batch of names, or debug a registration that failed.
From 1.0.0, the CLI targets Polkadot by default, where a registration spends DOT. To register on the TestNet this guide uses, set DOTNS_ENV=paseo-v2 or pass --env paseo-v2 on each command:
npm i -g @parity/dotns-cliexport DOTNS_ENV=paseo-v2dotns register domain --helpRegistration runs the same commit-reveal handshake described above, so expect a comparable pause whichever tool drives it. The CLI can also preview PopRules eligibility for a proposed name and account, showing the band and the deposit before you submit.
Update the Bundle a Name Points At
Section titled “Update the Bundle a Name Points At”Registration binds the name to your account once. Publishing a new version of your Product does not re-register the name; it updates the name's contenthash to the new CID. Every path handles this the same way, and re-running against a name you already own skips the reservation steps, so later deploys need fewer approvals:
playground: Re-runplayground deployagainst the same name.pad: Re-run the same command; it uploads only the changed blocks and rewrites the content record.dotns: Set the record directly with the CLI'scontent setcommand once you have the new CID, targeting the same network you registered the name on.
Because a name's content record is mutable and the owner can transfer or repoint it, treat a name as a pointer rather than a permanent identity. Code that consumes another Product should verify the contenthash it resolves at use time, not assume a name maps to the same bundle forever.
Manage Your Name
Section titled “Manage Your Name”Everything past registration is the dotNS CLI's job. A deploy tool repoints the one name it just published; dotns operates on any name your account owns:
- Transfer: A name registered on this path is owned by a Polkadot Hub account and can be transferred to another account. A transfer changes only the owner; the name and its current content record are unchanged, so users keep seeing the same bundle until the new owner updates it. Proof of Personhood status and reservations do not transfer with the name. A device or personhood name cannot be transferred at all, and some moves carry a fee. See the transfer reference.
- Subnames: The dotNS CLI can register subnames under a name you own.
- Content records: The dotNS CLI can view and set a name's content record outside a deploy.
Where to Go Next
Section titled “Where to Go Next”-
Deploy Your App
The full deploy flow that registers your name and uploads your bundle in one pass.
-
List Your App
Once your name resolves, list your Product so others can discover it.
-
dotNS Reference
The name mechanism, PopRules pricing, contract architecture, and transfer model in depth.