Port 3000 dev server – Free, Online, Private
TCP 3000 is the IANA hbci port. A second registry row, remoteware-cl, records an unassigned but widespread use. Development servers use 3000 by convention, which is neither of those names.
What listens on 3000
The assigned service name on 3000 is hbci, HBCI, the Home Banking Computer Interface. The same number has a second row, remoteware-cl, RemoteWare Client, and the registry says that row records an unassigned but widespread use. Neither row is a Node, Rails, or Next.js server. Those frameworks bind 3000 because a tutorial picked it and the next tutorial copied it. The protocol on the wire is whatever the process speaks, usually HTTP. UDP 3000 is also listed for both names. A dev server is TCP. Port 3000 is in the registered range, so binding it does not need extra privilege the way port 80 does.
The IANA service name is hbci: HBCI. The practical transport is TCP. The checks below use TCP. IANA may also have a UDP row for 3000. The service described here is the TCP one. A process can bind this port without being the service in the registry. The commands show who bound it. They do not prove the protocol on the wire is the one IANA named.
Service notes for port 3000
Service notes for port 3000: the IANA name is hbci (HBCI), and the program people mean is dev server. TCP 3000 is the IANA hbci port. A second registry row, remoteware-cl, records an unassigned but widespread use. Development servers use 3000 by convention, which is neither of those names. A development server on 0.0.0.0:3000 is an application with hot reload, source maps, and sometimes a debugger. Do not security-group it to the internet. Bind it to 127.0.0.1 and use a tunnel, or put a real reverse proxy with authentication in front of a deployed app and listen on 443. The React or Next dev overlay is not an access control. A server that serves the repository directory will serve .env if you point it at the wrong root. Nothing in that paragraph applies to a different number just because the software family is similar. If your listener is not on 3000, you are on the wrong page.
Two tools both want 3000, and the second fails with EADDRINUSE. ss shows the winner. Another trap is a Docker publish of 3000:3000 that forwards to a container whose app listened on 80, so the host port is open and the container connection is refused. Another is a browser on the host using localhost while the server bound 127.0.0.1 inside a container network namespace. Another is assuming IANA reserved 3000 for developers. It did not. A compliance scan that labels the flow hbci is following the registry, and it is still not describing your app.
How to check whether it is open
On the machine itself, ask the kernel which socket is bound. ss and lsof do that. A firewall, a security group, and a Docker publish rule sit in front of that socket, so a listener is not the same thing as a port the internet can use. From somewhere else, nc -vz host 3000 tries a TCP handshake when the command is the TCP form. A refusal means something answered with a reset. A timeout means a filter dropped the packet or the host is unreachable. Those are different faults. The process name is node, ruby, python, or docker-proxy, not a banking client. The listen address tells you whether your laptop is serving the LAN. A remote nc -vz proves the path. It does not prove the app compiled.
grep and findstr match text. A pattern of :80 also matches :8080 and :8000. The lsof and Get-NetTCPConnection forms take a numeric port and do not have that substring bug. Use them when the number is ambiguous. ss filters in the kernel with sport = :N, which is also exact. On macOS, netstat -p selects a protocol. It does not print the process the way Linux netstat -p does. lsof prints the process.
- The IANA name is hbci. remoteware-cl is a second row for unassigned but widespread use. A dev server is a third, unofficial use.
- UDP 3000 is not an HTTP server.
- EADDRINUSE means you already have a listener. Find it before you change the port in three config files.
- Binding all interfaces makes a demo reachable on the coffee-shop network.
Linuxsudo ss -lptn 'sport = :3000'
sudo lsof -nP -iTCP:3000 -sTCP:LISTEN
macOSsudo lsof -nP -iTCP:3000 -sTCP:LISTEN
netstat -anv -p tcp | grep '\.3000[^0-9]'
Windowsnetstat -ano | findstr :3000
Get-NetTCPConnection -LocalPort 3000
Remotenc -vz host 3000
Frequently asked questions
What is the IANA name?
hbci. The description in the registry is HBCI.
Why do frameworks use 3000?
Convention. The registry does not assign 3000 to HTTP development servers.
What is remoteware-cl?
A second record on the same number. IANA notes it as unassigned but widespread use.
Is an open 3000 a problem?
On a laptop that is serving a dev app to the LAN, yes. On a production host, nothing should be listening unless you deployed it on purpose.