Portis lists every open port on your Mac and the process behind it.
What Portis does
The table has one row for every listening TCP port and every bound UDP port on your Mac, no matter who owns it. Your dev servers and databases are in there, and so are system services and root daemons.
The dot beside each address shows who can reach the port. Green means it's bound to loopback, so only this Mac can connect; orange means other machines on the network can. The status bar keeps a count of the orange ones, which is worth a look on café Wi-Fi.
One search field matches everything in a row, so you can type 5173, postgres or the name of a project folder. The columns sort, and each has a filter of its own.
Select a row and the bar at the bottom shows its full command line, working directory and parent process. With several node rows in the list, the folder is usually what tells you which project each one belongs to. Clicking a port number opens that server in your browser, and Kill Process frees the port (how that works).
Portis is a native SwiftUI app and a 1.4 MB download. It follows Light and Dark Mode, and ⌘R refreshes the list.
node process on port 5173, a Vite dev server.lsof is free. Why pay $9.99?
For a one-off you don't need Portis. This shows what is listening on port 3000:
lsof -nP -iTCP:3000 -sTCP:LISTEN
Portis is for you if you look this up most weeks, or if what you want to know takes several commands in Terminal: which ports the Wi-Fi can reach, which of five node processes is the one you mean, what root is listening on.
| Tool | What you get | Where it stops |
|---|---|---|
lsofbuilt in, free | Every detail about a socket, and it scripts well. | Without sudo it lists only your own processes. Folder, command line and parent take three more commands. |
netstatbuilt in, free | Addresses and states for every socket. | On macOS 27 it can come back with no TCP or UDP sockets at all, and exit 0. |
| Activity Monitorbuilt in, free | Open Files and Ports for a process you already suspect. | One process at a time, and you can't search by port. |
| Menu bar port killersseveral are free | A quick popover for the dev server you just started. | Mostly TCP, often a fixed range of dev ports, rarely the whole Mac. |
| Portis$9.99, once | Every TCP and UDP listener for every user in one searchable table, with reach, folder and command line, and Kill Process for your own. | It ends only your own processes. It doesn't show established connections or traffic, and it isn't a firewall. |
Portis still sees every port on macOS 27.
macOS 27 filters the kernel's socket tables for most callers. netstat can come back with no TCP or UDP sockets and still exit 0, and lsof shows only your own processes unless you add sudo.
On macOS 27 Portis gets its list from Apple's nettop, so system services, root daemons and other users' ports are still in the table, and it doesn't need sudo for that.
Ending a process
Select one or more rows and choose Kill Process. Portis asks first, then sends SIGTERM, the signal kill sends when you give it no flags, so a server gets the chance to shut down cleanly.
This works for your own processes only. Ports held by root or by other users are in the list, but Portis can't end those processes, the same as kill without sudo.
The first kill takes one extra step. The Mac App Store sandbox doesn't let an app signal other processes, so Portis opens a save panel and asks you to install a short script into ~/Library/Application Scripts/dev.keks.portis. You click Install, once. The script is plain text, runs as you, and takes a process ID and nothing else.
Privacy
Portis collects no data and makes no network connections. It has no analytics, no crash reporter, no account and no ads.
It never runs anything as root and never asks for your password.
$9.99 once, on the Mac App Store.
macOS 14 or later, Apple silicon and Intel. No subscription and no in-app purchases. Refunds go through Apple.