cd /news/developer-tools/i-built-my-own-root-dns-so-i-could-s… · home topics developer-tools article
[ARTICLE · art-98765] src=anthony.dev.profullstack.com ↗ pub= topic=developer-tools verified=true sentiment=· neutral

I built my own root DNS so I could stop renting names

Anthony “chovy” Ettinger built Moshpit, a root DNS with its own resolver that lets users claim any ending (e.g., .eggs, .hacker) for free, first come first served, with 5,679 endings claimed so far. The namespace is not in the public DNS root, so resolution requires running a local bridge or using a DNS-over-HTTPS endpoint, and no public CA will issue certificates for these names.

read7 min views1 publishedAug 16, 2026

2026-08-16, by Anthony “chovy” Ettinger.

How this was written: drafted with an AI assistant from my own notes, then edited by me.

I got tired of renting names #

Every idea I have costs twelve dollars a year before it exists. Not hosting — the name. I pay a registrar, who pays a registry, who operates a top-level domain under a contract with ICANN, and at the end of that chain I get a string of text that I do not own and never will. I lease it. Miss a renewal notice in a spam folder and somebody who has never heard of my project owns my namespace and wants four figures for it back.

Multiply that by the number of half-finished things in my home directory and it is a subscription to my own imagination. So I stopped paying it and started building the other end of the stack.

It is called the Moshpit. It is a root. Not a registrar, not a reseller, not a wrapper over somebody else's TLD — an actual name authority with its own root and its own resolver, and you can claim .anything

in it right now:

What you actually get #

The namespace is one level deep and first come, first served. You claim an ending — .eggs

, .hacker

, .rank

, whatever nobody took yet — and from that moment every name under it is yours to mint. Not for a dollar each. For nothing. scrambled.eggs

, over-easy.eggs

, four hundred more at 2am because you felt like it. Holding the ending is the ownership; the names under it are just rows you write.

You can point one ending at another, too. Alias .agentic

to .agent

and the whole namespace follows — foo.agentic

resolves to foo.agent

— while any name you specifically exempt stays exactly where it is. That is a thing the real DNS root cannot do for you at any price.

As I write this the registry has 5,679 endings claimed. I am holding most of them, which is either land-grabbing or bootstrapping depending on how charitable you feel, and I have listed the ones I am sitting on for a couple of dollars so they are not just parked forever in my account. Anything nobody has claimed is still free and still first come, first served.

How it resolves, honestly #

Here is the part most “alternative DNS” projects are cagey about, so let me be blunt: a Moshpit ending is not in the public DNS root, so nothing resolves it until you turn the resolver on. There is no magic. Your laptop asks a root server about .eggs

and gets told no such thing exists, because as far as the thirteen root servers are concerned, that is true.

So you run the bridge:

sudo moshcode dns enable

That installs a local resolver that answers Moshpit names out of the registry and forwards every other lookup untouched. Your github.com

still goes where it always went. There is also a DNS-over-HTTPS endpoint at https://dns.moshcode.sh/dns-query

, standard RFC 8484, both the GET and POST forms, if you would rather point a client at it than change your system resolver.

It is opt-in and it stays opt-in. It is not in the installer, it does not happen on upgrade, and no other command turns it on as a side effect. That rule exists because I once let something enable it automatically and handed a colleague a machine whose resolver had been rewritten without being asked, which is a spectacular way to ruin somebody's morning. Rewriting how a computer resolves names is a thing a human types on purpose or not at all.

The tradeoffs I am not going to hide #

Living outside the public root has real costs and you should know them before you move anything you care about:

No public CA will issue you a certificate. Not Let's Encrypt, not anyone — they can only validate names in the DNS root, and yours is not. So it ishttp://

on port 80. In Caddy you must write the scheme explicitly or it will try to get a cert and fail forever. There is a local CA and a pinned-TLS proxy for real HTTPS on these names, and that is a whole post of its own.Targets are IPv6 or a hostname. IPv4 literals are refused on purpose: an A record on a small box is usually leased or behind NAT, and it goes stale without telling anybody. A dead name that looks alive is worse than no name.DNS carries an address, not a port. The browser goes to 80 no matter what you wish. If your thing lives on 3000, put a web server in front of it.

Standing a site up #

Put your server's IPv6 address in the name's target field — just the address. Then serve the name on port 80. Nothing proxies and nothing redirects; the browser connects straight to your box with Host: seo.rank

, so your web server needs a block that answers to it.

http://seo.rank {
	root * /var/www/seo.rank
	file_server
}

Or in nginx:

server {
	listen [::]:80;
	server_name seo.rank;
	root /var/www/seo.rank;
}

Then check your work:

moshcode dns resolve seo.rank
curl -6 http://seo.rank/

If you would rather not type any of that, ``` moshcode template install bun-caddy-sqlite


writes the Caddyfile, the systemd units and a Bun + SQLite service
already wired up correctly. `moshcode template list`

shows the rest.

## No server? The name can still be a site

This is my favourite part and it was almost an afterthought. Paste an RSS or Atom URL into the feed box on any name you hold and the pit draws the site for you. A blog feed renders as posts — date, headline, opening lines, link out to the real article. A podcast feed renders as episodes with cover art and a player on each one, from the same URL you already submit to Apple and Spotify. It is hosted nowhere and it updates whenever your feed does.

A name with both a target and a feed serves the target — a server you stood up beats a page I drew for you. Clear the target and the feed takes back over, which quietly makes the feed a soft landing for a site that has fallen down. The pit fetches and caches it for a few minutes, so getting linked somewhere busy does not turn into a traffic bill on your feed host.

## Build on it

Names are the boring half. The interesting half is that you can develop and ship applications
on this network with the Moshpit dev stack — the templates, the resolver, the local
certificate story and the deploy path, all of it assuming from the first line that your app lives
at a name nobody rented you. That lives at [dev.moshcode.sh](https://dev.moshcode.sh),
and the CLI that drives all of it installs the usual way:

curl -fsSL https://moshcoding.com/install.sh | sh


## Why I think this matters

I am not pretending this replaces ICANN or that your bank should move to
`.money`

. Names outside the root will not work for someone who has not opted in, and
that is a permanent, structural property of what I built, not a beta limitation I will fix in
version two.

But there is something worth having in a namespace with no landlord in it. Nobody invoices
me. Nobody can take `.hacker`

away because a trademark lawyer sent a letter, or
because a registry got acquired, or because I was on a plane the day a renewal failed. The
naming layer of the internet has been a rent-collection business for thirty years and most of us
just accepted it as physics. It is not physics. It is a file that says who is authoritative for
what, and anybody can write one.

So I wrote one. Go take `.anything`

—
[app.moshcode.sh/pit](https://app.moshcode.sh/pit). It is free, and the only thing I
ask is that you build something on it.
── more in #developer-tools 4 stories · sorted by recency
── more on @anthony ettinger 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/i-built-my-own-root-…] indexed:0 read:7min 2026-08-16 ·