Fix: EADDRINUSE: address already in use :::3000
Step-by-step fix for 'EADDRINUSE: address already in use' port conflict when starting OpenClaw.
This page helps you fix the port conflict error when starting OpenClaw.
🔴 Raw Error Log (What You Actually See)
When you run npm run start, OpenClaw crashes immediately with:
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (node:net:1372:16)
at listenInCluster (node:net:1420:12)
...
npm ERR! code ELIFECYCLE
npm ERR! errno 1If your error looks like this, you are in the right place.
🔍 Why This Happens (Root Cause)
Another program is already using Port 3000.
OpenClaw needs Port 3000 to serve its dashboard. If another application (like React dev server, another bot instance, or Grafana) is already running on that port, OpenClaw cannot start.
✅ How to Fix It (Step-by-Step)
Option A: Kill the Blocking Process (Recommended)
Mac / Linux
# Step 1: Find what's using port 3000
lsof -i :3000
# Output example:
# COMMAND PID USER FD TYPE DEVICE NODE NAME
# node 12345 user 21u IPv6 0x1234 TCP *:3000 (LISTEN)
# Step 2: Kill the process (replace 12345 with actual PID)
kill -9 12345Windows (PowerShell)
# Step 1: Find what's using port 3000
netstat -ano | findstr :3000
# Output example:
# TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 12345
# Step 2: Kill the process (replace 12345 with actual PID)
taskkill /PID 12345 /FOption B: Run on a Different Port
If you can't stop the other program, tell OpenClaw to use a different port:
Mac / Linux
PORT=3001 npm run startWindows (PowerShell)
$env:PORT="3001"; npm run startThen access OpenClaw at http://localhost:3001 instead.
🔎 Verify the Fix
After applying the fix, run:
npm run start✅ Expected Result
OpenClaw starts successfully:
> OpenClaw@1.0.0 start
> node server.js
Server running on http://localhost:3000
OpenClaw is ready! 🚀❌ Still Not Working?
If the port is immediately taken again after killing the process:
- You may have OpenClaw set to auto-start (check your OS startup programs)
- Another service is configured to use port 3000 (Docker, NGINX, etc.)
Solution: Use Option B and run on a different port permanently.
🔗 Related: Common Errors Summary | Error Dictionary
Internal Ref: ERROR_RUNTIME_001