# Your dev servers and open ports, by project.

Canonical page: https://vitalsmac.com/features/dev-servers-and-ports

Vitals groups what is running by the project folder it came from and shows the ports each one holds. It points out the dev server that has done nothing since Tuesday and offers to stop it, and nothing stops until you say so.

## Projects: Grouped by the folder it runs in, not by the command.

Everything started from the same project folder is one row, named after the folder, with the memory and CPU of all of it and every port it listens on, so three things called node become storefront, api and docs.

- One row per project, named after its folder
- Its processes, each with memory and CPU
- Every listening port, beside the process that holds it
- Compose containers under their project too

## Ports: What is on port 3000, without a terminal.

The port that is "already in use" has a name in Vitals: the process holding it, the project it belongs to, and a Stop button. Type the number into ⌘F and you are done, no lsof, no kill.

- The port beside the process that holds it
- ⌘F a number and it is found
- Whose it is: yours, a database, an app's helper
- An assistant can ask over MCP

## Idle: The server you forgot, pointed out with how long.

A dev server that has done nothing for days gets a note saying how long, and an offer to stop it along with what that frees. Nothing stops until you confirm, and you can quit a whole project in one go.

- Idle for days, pointed out
- Offered to stop, with what it frees
- Quit a whole project at once
- Force Quit for one that will not answer

## Dropdown: Find a port and stop a server from the menu bar.

The dropdown has the same Projects tab, with the same projects and ports, so the usual fix takes two clicks and never needs the window.

- The same projects and ports in the dropdown
- Stop from there, after a confirmation
- Nothing stops by itself
- In folders you trust, safe requests from an assistant go through

## Why it matters: dev servers and ports on a Mac

Every project leaves things running. A dev server from Tuesday, a database you forgot was local, a test watcher in a tab you closed. In Activity Monitor they are a dozen rows called node and python, and the port each one holds is not shown at all; for that you open a terminal, type lsof -i :3000, and kill a number.

So the second project on port 3000 fails to start, the Mac is warm for no reason you can name, and the fix is a guess.

The Projects tab groups processes by the project folder they run in, named after the folder, with the memory and CPU of all of them and every port they listen on. A dev server that has done nothing for days is pointed out with how long, and offered to stop. Quit a whole project at once, or Force Quit one process that will not answer; nothing stops until you confirm. A container started by docker compose from the folder shows under the project too, and an assistant can ask what is on a port.

## How to use it

1. **Open the Projects tab.** Each project is one row, named after its folder, with its processes, their ports, and the memory and CPU of all of them. Open a project to see each process and its listening ports.
2. **Find what is on a port.** The port is beside the process that holds it. Press ⌘F and type the number, and the project and the process behind it are named.
3. **Stop the forgotten one.** A server that has done nothing for days carries a note saying how long. Stop it, quit the whole project, or Force Quit one process that will not answer. Vitals asks first and tells you what will close.
4. **Ask from your assistant.** Over MCP: what is on port 8080, which projects have a dev server going. For a project folder you trust, safe requests can be quit without asking; add the folder in Settings → Integrations.

## Compared with Activity Monitor

| | Activity Monitor | Vitals |
| --- | --- | --- |
| By project | No | Grouped by the folder they run in |
| Ports | Not shown; lsof in Terminal | Beside the process that holds them |
| Idle servers | Nothing | Pointed out, with how long |
| Stopping | kill by number | Stop, or quit the whole project, after a confirmation |
| Containers | Processes only | Compose containers under their project |

## The words behind it

- [Listening port](https://vitalsmac.com/glossary/listening-port): A listening port is a network port where a process is waiting for incoming connections, such as a web server on port 3000.
- [PID](https://vitalsmac.com/glossary/pid): A PID, or process ID, is a number macOS assigns to each running process to identify it.
- [Zombie process](https://vitalsmac.com/glossary/zombie-process): A zombie process is a process that has finished running but still has an entry in the process table, because its parent process has not yet collected its exit status.
- [Force Quit](https://vitalsmac.com/glossary/force-quit): Force Quit ends an app or process immediately, without letting it save or clean up.
- [launchd](https://vitalsmac.com/glossary/launchd): launchd is the first process macOS starts at boot, with process ID 1.

## Questions

### How does Vitals know which project a process belongs to?

By the folder it was started from. Processes started from the same project folder are grouped under it, with the folder's name.

### Will Vitals stop a dev server by itself?

No. It points out the ones that have been idle for days and offers to stop them. Nothing stops until you confirm.

### Does it show ports held by apps that are not mine?

Yes. Every listening port is listed with the process behind it, whether that is your dev server, a database or an app's helper.

### Does it work with Docker?

Containers have a tab of their own, with their ports. A container started by docker compose from a project folder shows under that project too.

### What counts as a project?

The folder a process was started from. Everything started from the same folder is one project, named after it.

### Can I quit a whole project at once?

Yes. Quit the project and every process in it closes, after a confirmation. Force Quit is there for one that will not answer.

### Why does my port say it is already in use?

Another process is listening on it, usually a server from an earlier session. The Projects tab names it, with the project it belongs to, and offers to stop it.

### Does a container count as part of a project?

A container started by docker compose from a project folder shows under that project, and on the Containers tab with its own numbers.

## Read on

- [Claude Code using too much memory or CPU on a Mac? How to find it, and get it back](https://vitalsmac.com/claude-code-memory-usage-mac)
- [How to stop Docker containers on a Mac, one or all of them](https://vitalsmac.com/stop-docker-containers-mac)
- [Why is my Mac so slow? How to find the cause, and fix it](https://vitalsmac.com/why-is-my-mac-so-slow)
- [Vitals vs Activity Monitor](https://vitalsmac.com/vs/activity-monitor)
- [Vitals vs ProcXray](https://vitalsmac.com/vs/procxray)

## More of Vitals

Every feature is at [vitalsmac.com/features](https://vitalsmac.com/features). Vitals is one payment, with every update for life: [pricing](https://vitalsmac.com/pricing).
