Your dev servers and open ports, by project.
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.
The numbers are simulated: a web page cannot read your Mac, and should not.
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
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
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
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
Dev servers and ports, before and after
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.
Where it is in Vitals
The tab, the menu bar item and the setting, in the order you would reach for them.
- 01
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.
- 02
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.
- 03
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.
- 04
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.
Dev servers and ports: Activity Monitor and Vitals
The whole comparison is row by row. These are the rows about dev servers and ports.
The words behind it
What the numbers mean, from the Activity Monitor 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
A PID, or process ID, is a number macOS assigns to each running process to identify it.
- 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
Force Quit ends an app or process immediately, without letting it save or clean up.
- launchd
launchd is the first process macOS starts at boot, with process ID 1.
Questions
The ones people ask about dev servers and ports before they buy.
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
Guides that use this, and how Vitals compares with the apps people buy for it.
More of Vitals
All featuresDocker containers
Inside the one big Docker process: every container's memory, CPU, network and ports, with Stop on each.
Volume mixer
Turn the meeting up and the music down: a slider for every app with sound, the mic, and your Bluetooth batteries.
Temperature and fans
CPU and GPU temperature and fan speed, the apps making it hot, and a fan you can hold at a speed.
Get Vitals for $15 while the launch price lasts
50 left at this price. The regular price is $39. One payment, lifetime updates, 14-day refund.
Get Vitals for $15