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.

Projects 5 dev servers · 4 idle
4322
storefront-web
node · up 3 days, barely used
458 MB Stop…
8000
scraper-api
python · up 4 days, barely used
412 MB Stop…
4321
marketing-site
node · idle 2 hours
296 MB Stop…
3000
billing-api
node · idle 45 min
204 MB Stop…
5173
docs
node
188 MB working
storefront-web stopped. 458 MB and port 4322 are free.

The numbers are simulated: a web page cannot read your Mac, and should not.

01Projects

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
storefront1.8 GB · 41%
next dev:3000412 MB
postgres:5432 · container1.4 GB
api96 MB · 0%Idle 3 daysStop
uvicorn:808096 MB
docs210 MB · 2%
astro dev:4321210 MB
Named by its folder Every port, beside its process
02Ports

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
3000⌘F
:3000next devstorefrontYoursStop
:5432postgresstorefrontA container
:7000ControlCentermacOSThe system's
The port, the process, the project Whose it is
03Idle

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
Stop api?
uvicorn on :8080 has done nothing for 3 days. Stopping it frees 96 MB.
KeepStop
Idle for days, pointed out Nothing stops until you say
04Dropdown

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
OverviewMemoryProjectsAgentsContainers
storefrontnext dev:3000Stop
apiuvicorn:8080idle 3 dStop
docsastro dev:4321Stop
A click from the menu bar Stop, after a confirmation
Why it matters

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.

How to use it

Where it is in Vitals

The tab, the menu bar item and the setting, in the order you would reach for them.

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

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

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

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

Compared

Dev servers and ports: Activity Monitor and Vitals

The whole comparison is row by row. These are the rows about dev servers and ports.

Activity Monitor Vitals
By project
Activity MonitorNo
VitalsGrouped by the folder they run in
Ports
Activity MonitorNot shown; lsof in Terminal
VitalsBeside the process that holds them
Idle servers
Activity MonitorNothing
VitalsPointed out, with how long
Stopping
Activity Monitorkill by number
VitalsStop, or quit the whole project, after a confirmation
Containers
Activity MonitorProcesses only
VitalsCompose containers under their project

The words behind it

What the numbers mean, from the Activity Monitor glossary.

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 features

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