Why?
lsof on a normal machine returns thirty-odd listening sockets, almost all of them
system noise: Control Center, Spotify, Adobe, mDNS helpers. DevPorts watches only
the ranges you actually develop on, so the list stays the length of your dev servers
The status dot
The dot reports a state the extension actually measured:
| dot |
state |
meaning |
| hollow grey |
all inactive |
nothing listening in your ranges |
| solid green |
serving |
every port answered an HTTP request |
| solid amber |
starting |
a port is bound but did not answer, compiling, hung, or not an HTTP service |
A listening socket always accepts a TCP connection, so connecting proves nothing.
Only a real HTTP reply separates "serving traffic" from "bound but silent", which is
why the check is an actual HEAD /
It runs once per server. A server that answered will keep
answering, so its verdict is cached and never requested again. A port that stays
silent is retried a few times and then left alone, because it is probably not an
HTTP service at all. In practice each dev server sees a single HEAD / for its
whole lifetime, which keeps your terminal free of a request every few seconds.
Press the refresh button in the dropdown to force a re-check, or turn the whole
thing off with devports.healthCheck
The dropdown
Click the status bar item:
- Enter kills the selected port with
SIGTERM, the same signal Ctrl-C sends
- Globe opens
http://localhost:PORT
- Clipboard copies the URL
- Bolt force kills with
SIGKILL
- Kill all sends
SIGTERM to every port in range, behind a confirmation
Each row shows the owning process, its pid, the HTTP status it answered with, and
the working directory it was started from, which is how you tell which of your
checkouts is holding :3000
Ports are named by their project, not by their runtime. lsof truncates the command
to nine characters and reports every JS server as node, so DevPorts reads the
name field of the package.json at the process working directory instead
Settings
| setting |
default |
what it does |
devports.ranges |
3000-3999, 4000-4999, 5173, 8000-8099, 8787 |
ranges to watch |
devports.refreshSeconds |
5 |
rescan interval |
devports.healthCheck |
true |
send HEAD / to classify each port |
devports.healthTimeoutMs |
900 |
health check timeout |
Requirements
macOS and Linux. DevPorts reads ports through lsof, which Windows does not ship;
on Windows the extension loads but stays inert rather than guessing
Privacy
No network access beyond a HEAD / to 127.0.0.1 on ports you configured, once
per server. No telemetry. Processes are signalled through Node's process.kill, so no shell command is ever assembled from process data
License
MIT