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.

Last reviewed · verified against the pingdotgg/t3code repo

text
Error: listen EADDRINUSE: address already in use :::3773

Two different ports cause this class of problem, and they belong to two different programs:

PortOwnerSymptom
3773T3 Code serverServer won't start at all
9234Codex CLI (remote connections)Server starts, app-server bootstrap fails

Check both.

Fix port 3773#

macOS and Linux#

bash
# what's holding it
lsof -ti:3773

# more detail
lsof -i:3773

# kill it
lsof -ti:3773 | xargs kill -9

Windows#

powershell
# find the PID (last column)
netstat -ano | findstr :3773

# identify the process
tasklist | findstr <pid>

# kill it
taskkill /PID <pid> /F

Then 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.

bash
lsof -ti:9234 | xargs kill -9      # macOS / Linux
netstat -ano | findstr :9234       # Windows

If 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:

bash
T3CODE_DEV_INSTANCE=feature-xyz bun run dev:desktop

Recent 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.

Configuration →

Binding to a different address#

If the conflict is with something you can't move, change where T3 Code listens:

bash
npx t3 serve --host 127.0.0.1

Note 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 t3 and 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:
bash
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.