macOS · menu bar · native SwiftUI
Every listening port,
on one ledger page.
PortHawk keeps a ledger of every TCP listening port on your Mac: who is listening, which project it belongs to, and whether the LAN can reach it. Native SwiftUI, about 1 MB, no Electron.
Ports arrive as they open
Every TCP listener lands in the ledger with its process, PID, and owning project — inferred from the process's working directory, so dev servers stop being anonymous.
Favorites keep their place
Star the ports you care about. An idle favorite still shows a faint placeholder row, so a service that quietly died is obvious at a glance.
End a process in two steps
Hover for "end"; the first click arms a solid confirm, the second sends the signal. The row is struck through with a vermilion line, like ink cancelling a ledger entry.
Know when a port is taken
When something new grabs a port you favorited, the menu bar lights a dot and the row gets a "taken" seal. New listeners get a blue "new" seal.
See your attack surface
Anything not bound to loopback gets an ochre "LAN" badge — wildcards and specific interface addresses alike. The "LAN only" chip filters the ledger to what the network can reach.
Drill into any row
A full page per process: complete command line, executable path, working directory, user, threads, memory, and live CPU%. Open the port in your browser, copy its PID or port, or end the process — all from here.
Small, quiet, out of the way
Refresh interval, menu bar count, launch at login. If a scan ever fails it keeps the last snapshot and says so — it never pretends there are no ports.
Install
One terminal command downloads the latest build into /Applications and sidesteps Gatekeeper entirely:
curl -fsSL https://volcanicll.github.io/PortHawk/install.sh | bash
Or download the DMG and drag it in.
Building from source needs only Command Line Tools: git clone, then ./build.sh.
Ad-hoc signed, not notarized — if macOS reports it as damaged, run
xattr -cr /Applications/PortHawk.app.