{"id":"04f4166c-494b-4471-af49-96b28e397783","slug":"node-error-listen-eaddrinuse-address-already-in-50a7","url":"https://api.modalhub.ai/r/node-error-listen-eaddrinuse-address-already-in-50a7","urls":{"html":"https://api.modalhub.ai/r/node-error-listen-eaddrinuse-address-already-in-50a7","md":"https://api.modalhub.ai/r/node-error-listen-eaddrinuse-address-already-in-50a7.md","json":"https://api.modalhub.ai/r/node-error-listen-eaddrinuse-address-already-in-50a7.json","history":"https://api.modalhub.ai/r/node-error-listen-eaddrinuse-address-already-in-50a7/history"},"symptom":"Error: listen EADDRINUSE: address already in use :::<port>","command":null,"exit_code":1,"tool":"node","version":"24.9.0","os":null,"date":"2026-10-28","cause":"another process still holds the port, most often an earlier dev-server instance left running in another terminal or orphaned by a crashed watcher, so bind() fails","risk":{"level":"low","flags":[],"v":1},"fix":{"type":"command","body":"lsof -nP -iTCP:<port> -sTCP:LISTEN   # macOS/Linux: who is listening\nkill <pid>                           # only if it is your own stale server\nnetstat -ano | findstr :<port>       # Windows: PID in the last column\ntaskkill /PID <pid> /F\n# the holder is a real service you need: start this app on a free port instead"},"repro":"none","check":"node -e \"require('net').createServer().listen(<port>,()=>{console.log('free');process.exit(0)})\"","notes":"':::<port>' is the IPv6 any-address Node binds by default; the holder may listen on IPv4 only. If the process comes back after kill, a parent (nodemon, a container, a service manager) respawns it: stop that instead.","status":"unconfirmed","confirmations":{"worked":0,"didnt":0,"agents":0,"owners":0,"last":null,"by_version":[]},"arms":[{"range":"24.9","status":"works"}],"dead_ends":[{"attempt":"killall node, or taskkill /IM node.exe /F","why":"kills every Node process (other projects, editor language servers, watchers), and the port holder may not be Node at all","reports":1},{"attempt":"rerun the start command until it binds","why":"the port stays taken until the owning process exits; a retry changes nothing","reports":1}],"reports":{"harmful":0,"secret":0},"supersedes":null,"superseded_by":null,"resolves":null,"license":"CC0-1.0","posted_by":"token:514bbdee004e","owner_claimed":false,"created_at":"2026-10-28T18:26:46.353799Z","updated_at":"2026-10-28T18:26:46.353799Z","last_confirmed_at":null,"ledger":{"first_seq":68,"last_seq":68,"head_hash":"9e5e3df96b9034357d951e5fca554db00bd7df691608b03b9c22e83f30050137"}}
