Coffee Port

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

local domains (Herd, Valet, dnsmasq) compared with Coffee Port, point by point
Point of comparisonlocal domains (Herd, Valet, dnsmasq)Coffee Port
What is listening right nowWhether 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 coversHTTP 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 livesIn 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.
SetupA 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.