A high-performance, minimalist desktop app to visualize and kill system ports.
Built with Tauri v2, Rust, and vanilla JavaScript. No frameworks, no bloat.
curl -fsSL https://raw.githubusercontent.com/try-samuel/port-tray/main/install.sh | bashThen run:
findportsNote (macOS): This app is unsigned. The installer automatically bypasses Gatekeeper, but if you download manually, run:
xattr -cr /Applications/Port\ Tray.app
Download the latest .msi or .exe installer from GitHub Releases and run it.
- View all listening TCP ports in a clean grid layout
- Search/filter by port number, process name, PID, or user
- Kill processes with a single click (with confirmation)
- System tray integration
- Auto-refresh every 5 seconds
- Keyboard shortcuts (Cmd+R to refresh, / to search, Esc to clear)
- Dark theme
- macOS (10.15+)
- Linux (deb, rpm)
- Windows (msi, exe)
- Rust (1.70+)
- Node.js (18+)
lsofcommand (pre-installed on macOS,apt install lsofon Debian/Ubuntu) — not needed on Windows
# Install dependencies
npm install
# Run in development mode
npm run tauri dev# Build for production
npm run tauri buildBuild outputs will be in src-tauri/target/release/bundle/:
- macOS:
.appand.dmg - Linux:
.deband.rpm - Windows:
.exe(NSIS) and.msi
port-tray/
├── src/
│ └── index.html # Frontend (HTML + CSS + JS)
├── src-tauri/
│ ├── src/
│ │ ├── main.rs # Entry point
│ │ └── lib.rs # Core logic (lsof, kill)
│ ├── capabilities/
│ │ └── default.json # Shell permissions
│ ├── icons/ # App icons
│ ├── Cargo.toml # Rust dependencies
│ └── tauri.conf.json # Tauri configuration
├── package.json
└── README.md
- Backend (Rust): Runs
lsof(macOS/Linux) ornetstat(Windows) to get listening ports - Frontend (JS): Displays ports in a grid, handles search/filter
- Kill: Sends
kill -9(macOS/Linux) ortaskkill /F(Windows) to terminate processes
| Key | Action |
|---|---|
Cmd/Ctrl + R |
Refresh port list |
/ |
Focus search input |
Escape |
Clear search / Close modal |
MIT