Service directory and comparison
Localhost ports hub
A port is a numbered connection point, not an application identity. Use this directory to form a hypothesis, then confirm it from the process, startup log, protocol, and HTTP response.
Localhost developer tools
Port Command Generator
Build copy-ready listener, process, HTTP, WSL, and Docker checks.
ParsePort Output Parser
Turn netstat, PowerShell, ss, lsof, and Docker output into a readable table.
VisualizeDocker Port Mapper
Map Compose host ports to services and find conflicts or exposed bindings.
DiagnoseCORS Header Analyzer
Check origins, credentials, methods, request headers, and preflight responses.
UnderstandLocalhost URL Explainer
Break down origins, effective ports, paths, queries, fragments, IPv4, and IPv6.
ReviewFramework Config Linter
Check common framework ports, bind addresses, overrides, and risky settings.
Choose a port guide
:3000
React, Next.js, Express, and other configurable development servers.
Python · APIs:5000
Flask and other local backends; verify the route and bind address.
Frontend · Vite:5173
Vite’s documented default, automatic fallback ports, and host configuration.
Python · Django:8000
Django’s development default plus FastAPI and file-server distinctions.
Java · Proxies:8080
Spring Boot, Tomcat, reverse proxies, containers, and GeoServer contexts.
TLS · Admin:8443
A common HTTPS alternative used by Java and network-management tools.
Data science:8888
Jupyter token URLs, fallback ports, kernels, and secure remote access.
Tools · Services:9000
A shared convention used by SonarQube, MinIO consoles, Portainer, and custom apps.
Elasticsearch:9200
Authenticated HTTPS checks for Elasticsearch’s HTTP API.
Port comparison
| Port | Common association | Usually open with | Important distinction |
|---|---|---|---|
| 3000 | Next.js, React tooling, Node apps | http://localhost:3000 | Frameworks can be configured to any free port. |
| 5000 | Flask and custom APIs | http://localhost:5000 | An API may return JSON or 404 at the root. |
| 5173 | Vite | http://localhost:5173 | Vite may move to 5174 when 5173 is busy. |
| 8000 | Django development server | http://localhost:8000 | /admin/ exists only when the project maps it. |
| 8080 | Spring Boot, Tomcat, proxies | http://localhost:8080 | A 404 can mean the context path, not the server, is wrong. |
| 8443 | Alternative HTTPS | https://localhost:8443 | HTTP sent to a TLS endpoint produces misleading failures. |
| 8888 | Jupyter Server | Tokenized URL from jupyter server list | Authentication is separate from kernel startup. |
| 9000 | Multiple unrelated services | Check the product log first | Never infer SonarQube, MinIO, or PHP-FPM from the number alone. |
| 9200 | Elasticsearch HTTP API | Often authenticated HTTPS | 9300 is node transport; 5601 is commonly Kibana. |
One diagnostic sequence for any port
Read the application’s startup log
Use the exact address, port, protocol, and base path printed by the process.
Confirm the listener
# Windows PowerShell — replace 3000 with the target port Get-NetTCPConnection -LocalPort 3000 -State Listen # macOS or Linux lsof -nP -iTCP:3000 -sTCP:LISTENProbe the protocol directly
Use
curl -ifor HTTP, but do not force HTTP onto a known HTTPS service. A status response proves more than a browser’s generic error page.Inspect the application layer
Once connected, use the response status and server logs to distinguish a missing route, rejected credentials, proxy failure, or application exception.
Focused troubleshooting
localhost:3000 not working
Resolve connection refused, port conflicts, Docker/WSL binding, and blank-page failures.
GeoServerGeoServer on port 8080
Check the application context, account configuration, and data directory.
WordPressLocal wp-admin access
Separate web-server reachability, the WordPress path, and login recovery.