A fast, safe, GUI-first utility to identify which process holds a specific port and free that port by terminating the owning process (gracefully, then forcefully if needed). Supports multiple ports, batch actions, and minimal friction across macOS, Windows, and Linux.
- Port Scanning — Search for processes using specific ports or scan all listening ports
- Process Termination — Graceful or force kill with confirmation dialogs
- Batch Operations — Select multiple processes and terminate at once
- Source Detection — Identify Docker containers, Node.js, systemd, launchd, and brew services
- Dashboard — Overview with active port stats, quick actions, recent activity, and watched port status
- Port Monitoring — Watchlist with real-time polling, CPU/memory/uptime stats per process
- Favorites — Save ports into groups with labels, create quick commands for common operations
- History — Timeline view of all scan and kill actions, filterable by type
- Dark/Light Theme — Follows OS system preference with manual override (System/Light/Dark)
- Settings — Configure theme, kill mode, confirmation dialogs, polling interval
- Responsive UI — Sidebar navigation on desktop, collapsed icons on tablet, bottom nav on mobile
- Cross-Platform — Works on macOS, Windows, and Linux
Screenshots will be updated with the new UI. The app now features a sidebar-based developer tool aesthetic with amber accent colors and monospace typography.
Download the latest .dmg file from Releases and drag to Applications.
Download the .exe or .msi installer from Releases.
Download the .AppImage from Releases and make it executable:
chmod +x zporter.AppImage
./zporter.AppImage- Clone the repository:
git clone https://github.com/hasanyalmanbas/zporter.git
cd zporter- Install dependencies:
npm install- Run in development mode:
npm run tauri:dev# Development build
npm run tauri:dev
# Production build
npm run tauri:buildThe app has 6 pages accessible via the sidebar:
- Dashboard — Overview with active port count, process count, watched ports status, quick actions, and recent activity timeline
- Scanner — Enter port numbers (comma-separated or ranges like 8000-8100), filter by protocol (TCP/UDP), select multiple processes for batch kill
- Monitor — Add ports to your watchlist, see real-time CPU/memory/uptime stats with configurable polling interval
- Favorites — Organize ports into named groups (e.g. "Dev Stack"), create quick commands like "Kill all dev ports"
- History — Timeline of all actions (kills, scans) grouped by day, filterable by type
- Settings — Theme (System/Light/Dark), compact mode, kill confirmation toggle, default kill mode, polling interval
For CLI alternatives, consider using:
lsof -i :PORTnetstat -tulpn | grep :PORTss -tulpn | grep :PORT
- Frontend: React 19 + TypeScript + shadcn/ui + Tailwind CSS 4
- Backend: Rust + Tauri 2 + sysinfo
- Packaging: Tauri bundler for cross-platform distribution
src/
├── App.tsx # Root layout shell + page router
├── index.css # CSS variables, theme tokens
├── hooks/ # Custom React hooks
│ ├── use-theme.ts # OS theme detection + manual override
│ ├── use-settings.ts # Settings with localStorage persistence
│ ├── use-ports.ts # Port scanning via Tauri invoke
│ ├── use-monitor.ts # Watchlist polling + process stats
│ ├── use-favorites.ts # Favorites groups + quick commands
│ └── use-history.ts # Action history logging
├── pages/ # Page components
│ ├── dashboard.tsx
│ ├── scanner.tsx
│ ├── monitor.tsx
│ ├── favorites.tsx
│ ├── history.tsx
│ └── settings.tsx
├── components/
│ ├── ui/ # shadcn/ui primitives
│ ├── layout/ # Sidebar, bottom nav, app shell
│ ├── scanner/ # Search bar, table, cards, filters
│ ├── dashboard/ # Stat cards, activity feed
│ ├── monitor/ # Watch cards, polling indicator
│ ├── favorites/ # Favorite cards, groups, commands
│ ├── history/ # Timeline entries
│ ├── settings/ # Appearance, behavior sections
│ └── process-detail-panel.tsx
└── types/
└── index.ts # Shared TypeScript interfaces
list_ports— Find processes on specific portslist_all_ports— Scan all listening portskill_process— Terminate a process by PID (graceful or force)kill_by_port— Terminate process on a specific portdetect_source— Identify service source (docker, node, brew, etc.)get_process_stats— Get CPU%, memory, uptime for a process
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Make your changes and test thoroughly
- Submit a pull request
Port not found: Make sure the port is actually in use. Check with lsof -i :PORT
Permission denied: Some processes require administrator privileges. The app will prompt for elevation.
Process won't terminate: Try force termination, or the process may be protected by the system.
- macOS: 12.0+
- Windows: 10/11
- Linux: glibc-based distributions
This project is licensed under the MIT License - see the LICENSE file for details.
- Tauri for the desktop app framework
- shadcn/ui for the UI components
- Tailwind CSS for styling
- sysinfo for system information
- Lucide Icons for the icon set
- Claude (Anthropic) + Superpowers plugin for AI-assisted development
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with Tauri, React, and Claude Code + Superpowers