Coffee Port vs local domains (Herd, Valet, dnsmasq)
If every project of yours can sit behind a name, this is the better answer and you should take it. Ports do not go away — they move underneath the name, where they are harder to see.
Remembers it only while it is running
What it remembers
A name is a record of sorts: `invoices.test` is easier to remember than 4012. But the mapping lives in a web server's configuration, one project at a time, and the port a process actually binds is still chosen somewhere — usually in a `.env` file nobody has read in months.
Sources: Laravel Valet: why .test, Laravel Herd. Checked .
What Coffee Port cannot do
It cannot see what is running. A web page has no way to list the sockets on your machine, and the way to get one — a daemon on localhost for the browser to talk to — would mean opening up the policy that stops a compromised page sending your decrypted ledger somewhere else. That is not a trade worth making for a list of process ids you can already get in a second.
So these are not rivals. local domains (Herd, Valet, dnsmasq) answers what is on 3000 right now; this answers what 3000 is for. Most people who want the second one already have the first.
Point by point
| Point of comparison | local domains (Herd, Valet, dnsmasq) | Coffee Port |
|---|---|---|
| What is listening right now | Whether a site responds, which you find out by opening it. The web server knows what it is proxying; nothing lists the ports underneath. | Nothing. A web page cannot see what is bound to a port, and this one does not pretend to — pair it with any of the tools on this page for that half. |
| What you type | `invoices.test`, which is a great deal nicer than a number. | `localhost:4012`, with one click to copy it. |
| What it covers | HTTP services the local web server can proxy. A database, a queue worker or a Vite dev server on its own port is outside it. | Any port, whatever is on it — web, api, database, worker, or something you have not named yet. |
| Where the number lives | In a per-site server config and in your project's environment file. | In one list you can read, search and hand a number out of. |
| Setup | A local web server, a DNS resolver for the TLD, and a certificate story if you want https. | Sign in and start typing. |
Which to use
Use local domains (Herd, Valet, dnsmasq) when
- Your projects are web apps that a local proxy can front, and you would rather type a name than a number.
- You already run Herd or Valet for the PHP version management, and the domains come along with it.
- You want local https without arguing with a certificate.
Use Coffee Port when
- You have services that are not HTTP — databases, workers, gRPC — that a proxy will not front.
- You want to know which numbers are spoken for before you pick the next one.
- You want the record to include the ports you have retired, so nobody claims 3000 back by accident.
- You would rather not install a DNS resolver to answer a question about numbers.
Questions
- Should I use .test domains instead of localhost ports?
- For HTTP services that a local proxy can sit in front of, a name is easier to remember than a number and worth setting up. It does not remove the ports — each site still binds one — so the two answer different halves of the problem.
- Why .test and not .local or .dev?
- `.test` is reserved for exactly this by the IETF. `.local` is claimed by multicast DNS on macOS and will not resolve the way you expect, and `.dev` is a real public TLD with HSTS preloaded, which means browsers insist on https.