Port 3000 is the most common development server port used by Node.js/Express, React (Create React App), Grafana, Gitea, and many other tools. It is unofficial – there is no IANA registration for a single service. Port 3000 is safe for local development but should never be exposed publicly without authentication. Grafana's default port 3000 is particularly commonly misconfigured.
Port Number
3000
Protocol
TCP
Service
Generic Development HTTP Server
Range
Unofficial
Check what process owns port 3000 and its bind address
ss -tnlp sport = :3000Grafana health check (if Grafana is running)
curl -s http://localhost:3000/api/healthFind the process using port 3000 (macOS/Linux)
lsof -i :3000npm start # React: http://localhost:3000
node app.js # Express default
grafana-server --port 3000Port 3000 became a JavaScript convention from Express.js (2010) which used it as the default in documentation examples. Create React App (2016) cemented it for frontend development. Grafana (2014) independently chose port 3000. The collision means 'port 3000' requires context to identify the service.
Why do so many tools use port 3000?
Express.js tutorials used 3000 in examples, and the JavaScript ecosystem copied it. It is above 1024 (no root needed), below 10000 (easy to type), and was rarely used when Node.js emerged. Now it is the most overloaded dev port – check what is actually running before assuming.
How do I fix 'port 3000 already in use'?
Find what is using it: lsof -i :3000 (macOS/Linux) or netstat -ano | findstr :3000 (Windows). Common culprits: Grafana service, a backgrounded npm start, or macOS AirPlay (port 5000, not 3000 – but related confusion). Kill the process or use a different port: PORT=3001 npm start.