You don't need DNS, a hosts-file entry, or admin rights to get dashboard.localhost: the web reserved the .localhost suffix for exactly this. What's missing is only something answering on port 80 that reads the name — that part is Localdock.

.localhost is reserved by the web itself

RFC 6761 reserves the .localhost top-level name, and browsers and macOS implement it: every *.localhost name — dashboard.localhost, api.localhost, anything — resolves to your own machine with zero configuration. Browsers even treat these names as secure contexts, the way they treat localhost itself. The naming layer every dev-domain tool rebuilds with resolvers and root privileges has been sitting in the platform all along.

So the only missing piece is a listener

A name that resolves to your Mac still needs something on your Mac to answer it. Localdock listens on port 80, reads which name was asked for, and forwards the connection — raw TCP, no rewriting — to whatever port that project's server is currently on. When the framework auto-increments the port, the name follows the newest server. And no, port 80 doesn't mean sudo: on macOS, binding it through the system networking framework needs no root at all. If something else already owns 80, Localdock steps aside to 7777 and tells you.

What the alternatives cost

The classic routes to pretty dev domains all charge setup. A hosts-file entry needs an admin password and supports no wildcards, so it's one sudo per project, forever. A local resolver — dnsmasq plus an /etc/resolver entry, the approach tools like Valet and Herd use for .test — is a one-time install with moving parts to maintain. Both exist because they predate wide .localhost support; neither is necessary for it. (And never .dev: it's a real, HSTS-preloaded TLD that forces HTTPS on names you don't own.)

Names, the index, the ladder

Names come from your project folders, so most servers are named correctly before you touch anything; renaming is one click, and a duplicate name is refused with a reason rather than silently stealing the address. Forgot what's running? Open localhost and every named project is listed. The same name is the bottom rung of a ladder: it can answer on your phone over Wi-Fi as dashboard.local, and on a public HTTPS link when someone outside your network needs to see it. If your servers are started by coding agents, the names are what keep agent port chaos irrelevant.

Questions

Do my plain localhost:3000 URLs keep working?

Completely. The name is an addition, not a replacement — your server still owns its port and still answers on it directly. Quit Localdock and the only thing you lose is the name; nothing about your setup has changed underneath.

Why doesn't this need admin rights?

Because nothing system-level is touched: no hosts-file edit, no resolver, no dnsmasq. The names already resolve — the standard did that work — and on macOS binding port 80 through the system networking framework doesn't require root. There is genuinely no sudo anywhere in the story.

Will hot reload and WebSockets survive the name?

Yes, because nothing inspects or rewrites the connection. After reading the hostname, Localdock splices bytes both ways — HMR, WebSockets, streaming and server-sent events behave exactly as they do against the raw port.

Localdock is a macOS menubar app, a one-time purchase — no subscription, no account. Get Localdock