Port 3773 already in use
T3 Code won't start because port 3773 is taken — find and kill the process on macOS, Linux and Windows, and handle the separate Codex conflict on 127.0.0.1:9234.
Error: listen EADDRINUSE: address already in use :::3773Two different ports cause this class of problem, and they belong to two different programs:
| Port | Owner | Symptom |
|---|---|---|
| 3773 | T3 Code server | Server won't start at all |
| 9234 | Codex CLI (remote connections) | Server starts, app-server bootstrap fails |
Check both.
Fix port 3773#
macOS and Linux#
# what's holding it
lsof -ti:3773
# more detail
lsof -i:3773
# kill it
lsof -ti:3773 | xargs kill -9Windows#
# find the PID (last column)
netstat -ano | findstr :3773
# identify the process
tasklist | findstr <pid>
# kill it
taskkill /PID <pid> /FThen start T3 Code again.
Fix port 9234#
This one belongs to Codex, not T3 Code — which is why the error message often doesn't mention T3 Code at all. Codex uses 127.0.0.1:9234 for remote connections, and a leftover process on it blocks app-server bootstrap.
lsof -ti:9234 | xargs kill -9 # macOS / Linux
netstat -ano | findstr :9234 # WindowsIf you're seeing app-server startup failures rather than a server that won't bind, check this port before anything else. App-server failures →
What's usually holding the port#
Another T3 Code instance. By far the most common. A desktop app minimised to the tray, a forgotten npx t3 in another terminal tab, or a background instance you started yesterday.
A crashed instance that didn't release the port. Kill the process and try again.
Something unrelated. 3773 isn't a well-known port, but check what lsof actually reports before killing it — don't kill a PID you can't identify.
A dev instance. Development builds default to the same port unless isolated.
Running several instances deliberately#
Development builds can run side by side with named instances, each on its own port with its own state:
T3CODE_DEV_INSTANCE=feature-xyz bun run dev:desktopRecent builds also skip browser-blocked ports when choosing one. Browsers refuse to connect to certain ports outright, and landing on one produces a failure that looks like a crashed server rather than a blocked port — so don't hand-pick an arbitrary port number.
Binding to a different address#
If the conflict is with something you can't move, change where T3 Code listens:
npx t3 serve --host 127.0.0.1Note that --host sets the interface, not the port. Run npx t3 serve --help on your build for the port options it exposes — flags change quickly on this project.
Preventing it#
- Quit properly. Check the system tray; the desktop app frequently minimises rather than exits.
- Don't background
npx t3and forget it. Keep the terminal visible — it's also where the useful errors print. - Check before launching on a machine where you run several instances:
lsof -ti:3773 || echo "port free"FAQ#
What port does T3 Code use?#
Port 3773 by default, serving the web UI over HTTP and agent sessions over WebSocket at ws://localhost:3773.
How do I fix EADDRINUSE on port 3773?#
Find the process holding the port with lsof -ti:3773 on macOS or Linux, or netstat -ano | findstr :3773 on Windows, then kill it and restart T3 Code.
What is port 9234 used for?#
It's a loopback port used by the Codex CLI for remote connections, not by T3 Code. A conflict there causes app-server bootstrap failures rather than a server that won't start.
Can I run two copies of T3 Code at once?#
Development builds can, using T3CODE_DEV_INSTANCE=<name> to give each one its own port and isolated state. Two standard instances will collide on port 3773.