How to uninstall PortKiller on Mac
PortKiller is a free, open source menu bar app that lists the TCP ports your Mac is listening on and lets you end the process behind one, from its GitHub project. The README also lists favorites, watched ports with notifications, Kubernetes kubectl port-forward sessions and Cloudflare Tunnel views. It has no account. The test found only its preferences, caches and a network storage folder; where it keeps favorites and watched ports was not checked, so note any you want before you remove it. This guide covers the disk image from the project's GitHub release and the Homebrew cask portkiller.
Quit and remove the app
- If you used its Kubernetes port forwards, stop them in PortKiller first, so no forward keeps running without the app.
- Quit PortKiller from its menu bar icon. It runs as a menu bar app, so there is no Dock icon. In the test it needed more than the first quit request: Mole sent a quit request and then a force quit about four seconds later.
- Open Finder, go to Applications and drag PortKiller to the Trash.
PortKiller registered no login item or launch agent in the test. If it is still listed under System Settings › General › Login Items & Extensions after the app is gone, turn it off there.
Where the data lives
Press Shift + Command + G in Finder to open each path. Skip any path that is not on your Mac.
| Location | What it holds | What to do |
|---|---|---|
~/Library/Preferences/com.portkiller.app.plist |
Preferences, 362 bytes in the test | Remove. Selected by default. |
~/Library/Caches/com.portkiller.app |
Cache, 135 KB | Remove. Selected by default. |
~/Library/HTTPStorages/com.portkiller.app |
Network storage, 57 KB | Remove. Selected by default. |
The folder getconf DARWIN_USER_CACHE_DIR prints, then com.portkiller.app |
Mole's temporary cache row, 270 KB | Remove. Selected by default. |
~/Library/HTTPStorages/com.portkiller.app.binarycookies |
Cookie file, named in the Homebrew cask's zap list; it did not exist in the test | If it exists on your Mac, remove it. |
Check the result
pgrep -il portkiller
pgrep -fl 'kubectl port-forward'
ls -d /Applications/PortKiller.app "$HOME/Library/Preferences/com.portkiller.app.plist" "$HOME/Library/Caches/com.portkiller.app"
- No output from the first
pgrepmeans PortKiller is not running. A printed line names a process still alive; quit it, or restart the Mac once. - No output from the second
pgrepmeans no port forward is running. A printed line is akubectlforward that outlived the app; it is not PortKiller itself, so end it only if you no longer need it. - For
ls -d, "No such file or directory" means that path is gone. A printed path is still on disk.
If you installed it with Homebrew
brew uninstall --cask portkiller
The cask quits PortKiller (com.portkiller.app) on an ordinary uninstall, then removes the app. Its zap list trashes the cache, the HTTPStorages folder and its cookie file, and the preferences file, all inside ~/Library. brew uninstall --cask --zap portkiller does not read Mole's checkboxes. Mole adds --zap only when its whole removal scope passes its zap gate: every zap path is inside ~/Library, none touches a row you left unchecked, and every path that exists is a row Mole listed. Otherwise Mole leaves --zap off and removes the rows you selected itself.
What Mole lists
Mole selects the app, the preferences file, the cache, the HTTPStorages folder and the temporary cache row. Before removing, Mole asks PortKiller to quit and force quits it if it does not. Status shows PortKiller as one row, and the update page reads PortKiller's Sparkle feed.
What this test covered
On November 9, 2026, on a second Mac running macOS 26, the test took PortKiller 3.4.0 (Universal) from the project's GitHub release disk image, whose checksum matched the Homebrew cask portkiller, copied it to Applications without running brew install, opened it once and removed it with a source-built, re-signed Debug build of Mole with every review row ticked. Mole's notarized release build was not used. Mole moved the app and 4 rows to the Trash after a quit request and, four seconds later, a force quit; nothing failed and a rescan found no PortKiller path left. Status showed one PortKiller row with 3 processes. Mole detected a Sparkle update feed, and no update was run. Port killing, Kubernetes port forwards, Cloudflare Tunnels, Homebrew and Mole's notarized release build were not tested.
