PortKiller
Lightweight macOS menu bar app to monitor and kill processes on development ports
Install / Use
/learn @gupsammy/PortKillerREADME
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.
Features
- 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
Screenshots
<img src="screenshots/ui.png" alt="PortKiller Menu UI" width="400"> <br> <em>Menu bar interface showing active processes, Docker containers, and Homebrew services</em> <img src="screenshots/notifications.png" alt="Desktop Notifications" width="400"> <br> <em>Desktop notifications when new processes start listening on your ports</em>Installation
- 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.
Build from Source
git clone https://github.com/gupsammy/PortKiller.git
cd PortKiller
cargo build --release
./target/release/portkiller
Requires Rust 1.85+ (2024 edition).
Configuration
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.
Uninstall
Quit PortKiller, move PortKiller.app from Applications to Trash, optionally rm ~/.portkiller.json
Platform Support
macOS 10.15 (Catalina) and later — Intel and Apple Silicon
Development
# 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.sh
Feature Requests & Bug Reports
Have an idea or found a bug? Open an issue — contributions welcome!
License
MIT License — do whatever you want with it.
Acknowledgments
Built with tray-icon, winit, and nix.
<p align="center"><em>Made for developers who have better things to do than hunt PIDs</em></p>
Related Skills
node-connect
351.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
351.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
351.8kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
