Port Manager

See which process is listening on each port, grouped by the project it runs in, and free a port when something is in the way.

Open it

Type ports and press ↵ on Port Manager. Every listening TCP port is listed, and the line above says how many there are and how many other devices on your network can reach.

You can also give it a hotkey on Settings → Hotkeys.

What's on port 3000?

Type port and a number in the normal bar, for example port 3000. One row, Port 3000, says what's listening there (the process, its PID and its project) or "Nothing listens on it". Press ↵ (Show in Port Manager) to open the Port Manager filtered to that port.

The list

Ports are grouped by the project their process runs in: the Git repository (worktrees of one repository count as one project) or plain folder. Projects come first, by name, then Other. Each row shows:

Type to filter by port, process, PID, address, project, framework, app or your name for it.

Stop what's on a port

Select the port and press ↵ (Kill Process). It always asks first.

  1. The card says what happens: an app quits as with ⌘Q, so it can save; any other process is asked to shut down (SIGTERM). If the same process also holds other ports, the card names them. Press ⌘↵ to go ahead or esc to cancel.
  2. Saiki waits about a second. If the process is gone, a message says the port is free.
  3. If it's still running, a second card offers Force Kill (SIGKILL), which stops it at once with no chance to clean up.

Right before each signal Saiki checks that the PID still belongs to the same process. If it has become another process, nothing is stopped. A suspended process is woken so it can shut down.

A process that belongs to another user can only be stopped by an administrator: the card offers Stop as Administrator, macOS asks for your password, and the process is checked again just before.

What it leaves alone

Some processes are meant to keep running, and something would start them again. Their rows say so, and Kill tells you how to stop them properly instead:

Row saysWhy
Managed by macOS (launchd)launchd keeps it running and would start it again.
Runs as a Homebrew serviceStop it with brew services stop and the formula's name.
Managed by pm2pm2 would restart it. Stop it with pm2 stop.
Part of macOSThe kernel, launchd, the window server, the login window, and Saiki itself.

More with ⌘K

ActionKey
Kill Process⇧⌘K
Force Kill Process⌥⇧⌘K
Open in Browser⌘O
Copy Port⇧⌘C
Copy PID⌥⌘C
Copy Address
Copy Network URL⌃⌘C
Show Folder in Finder⇧⌘O
Name Port… / Rename Port…⌘N
Refresh⌘R

The action set for ↵ (Kill Process unless you change it in Settings) moves to the top of the list and takes ↵ instead of its own key.

Copy Network URL appears only for a port other devices can reach. It copies an address like http://192.168.1.24:3000 to open the server from your phone. Force Kill and Show Folder appear only when they apply.

Name your ports

Give a port a name, like 3000 → "Web app". The name shows beside the port in the Port Manager, and typing it finds the port.

To change a name, press ↵ on its row under Port Names. To remove it, select the row and press ⌘⌫, or use Remove Name in the form.

Settings

On Settings → Port Manager:

SettingChoices
Refresh the listOnly when opened, or every 2, 5 (the default) or 10 seconds. Only while the Port Manager is on screen; ⌘R reads it again anytime.
↵ on a portKill Process (the default), Open in Browser or Copy Port. The others stay in ⌘K, and Kill always asks first.

The switch at the top turns the Port Manager off, along with the port 3000 row.