|
Stop hunting. Start killing. |
Every developer knows the drill: lsof -i :3000, squint at the output, find the PID, kill -9 1234, repeat. PortKiller lives in your menu bar and does all that for you. One click. Done.
- One-Click Process Termination — Kill any process hogging your dev ports instantly from the menu bar
- Docker Integration — See which containers are using ports and stop them directly
- Homebrew Services — Detect and stop brew services (PostgreSQL, Redis, MySQL) without touching the terminal
- Desktop Notifications — Get notified when new processes start listening on your ports
- Project Detection — Shows which git project each process belongs to
- Smart Graceful Shutdown — SIGTERM first, SIGKILL only if needed
- Native Menu Bar App — Lightweight, adapts to light/dark mode, zero resource usage when idle
- Pre-configured for Dev Ports — Monitors Node.js, React, Vite, Django, Flask, PostgreSQL, Redis, MongoDB, and more out of the box
- Fully Configurable — Add or remove port ranges via simple JSON config
- Auto-Update Notifications — Get notified when a new version is available
Menu bar interface showing active processes, Docker containers, and Homebrew services
Desktop notifications when new processes start listening on your ports
- Download PortKiller.dmg
- Open the DMG and drag PortKiller to Applications
- First launch (macOS security): Run this in Terminal, then open the app:
xattr -cr /Applications/PortKiller.app
- After that, launch normally from Applications or Spotlight
The app appears in your menu bar — click to see active port listeners.
git clone https://github.com/gupsammy/PortKiller.git
cd PortKiller
cargo build --release
./target/release/portkillerRequires Rust 1.85+ (2024 edition).
PortKiller creates ~/.portkiller.json on first run. Edit via the menu bar (Edit Configuration) or directly:
{
"monitoring": {
"poll_interval_secs": 2,
"port_ranges": [[3000, 3010], [5432, 5432], [8080, 8090]],
"show_project_names": true
},
"integrations": {
"brew_enabled": true,
"docker_enabled": true
},
"notifications": {
"enabled": true
},
"system": {
"launch_at_login": false
},
"updates": {
"check_enabled": true,
"check_interval_hours": 24
}
}Changes apply automatically via hot-reload.
Quit PortKiller, move PortKiller.app from Applications to Trash, optionally rm ~/.portkiller.json
macOS 10.15 (Catalina) and later — Intel and Apple Silicon
# Debug build with logging
RUST_LOG=debug cargo run
# Code quality
cargo fmt && cargo clippy
# Install pre-commit hook (auto-formats on commit)
./scripts/install-hooks.shHave an idea or found a bug? Open an issue — contributions welcome!
MIT License — do whatever you want with it.
Built with tray-icon, winit, and nix.
Made for developers who have better things to do than hunt PIDs


