Portus
A native macOS menu-bar app that lists every process listening on your machine — port, process, CPU, memory, and origin — so you can spot and kill whatever is holding a port in one click.
Portus is a native macOS menu-bar app for seeing — and stopping — whatever is listening on your machine. It lives in the menu bar, opens to a popover listing every TCP listener with its port, process name, PID, CPU, memory, and where it came from, and lets you kill any of them in one click.
The product is intentionally small: it answers a single recurring question — “Port 3000 is taken. Again. By what?” — without making you drop into a terminal to run lsof and kill by hand.
The problem
Local development collides with itself constantly. A dev server is already bound to a port, a container forgot to shut down, an old process is orphaned but still holding a socket. Finding the culprit usually means remembering the right lsof incantation, reading PID columns, and then killing the process manually — every time.
Portus turns that into a glance. Open the menu-bar popover, read a clean table of what is listening, and click to kill. No terminal, no flags to remember.
What I built
- A live view of every TCP listener: port, process name, PID, CPU, memory, and an origin label (
docker,system,from IDE,from Terminal, ororphan?). - One-click kill straight from the popover.
- Deduplicated rows so dual-stack and
SO_REUSEPORTprocesses collapse into one stable entry instead of appearing several times. - A native vibrancy popover with no Electron, so the app feels like part of macOS and stays light.
Key technical decisions
Portus is a Tauri v2 app: a Rust core does the system inspection while a SvelteKit frontend renders the popover. The Rust side uses the listeners and sysinfo crates to enumerate sockets and read per-process CPU and memory, and tauri-specta generates typed bindings so the frontend and backend share one contract instead of hand-written glue.
Choosing Tauri over Electron keeps the binary small and the popover genuinely native. The trade-off is distribution: the build is ad-hoc signed but not notarized, so the first launch requires approving it in System Settings.
Current status
Portus is in v0.1 beta, distributed as a .dmg from GitHub releases. Coming next: Docker container control (via the bollard crate) and a managed dev-service runner with live log tailing.