A small macOS desktop app for monitoring and managing dev processes, ports, and servers in real time.
Built with Tauri 2, SolidJS, Tailwind CSS v4, and Rust.
Homebrew:
brew install --cask RemingtonWilcox/tap/portguiUpgrade an existing install:
brew upgrade --cask RemingtonWilcox/tap/portguiDirect download: grab the .dmg from GitHub Releases.
Published release builds are signed with Developer ID and notarized by Apple.
PortGUI scans your machine every 1.5 seconds for dev-related processes listening on TCP ports. It shows them in a clean dashboard where you can:
- See active dev servers, databases, and tools at a glance
- Kill any process with one click (SIGTERM, then SIGKILL if needed)
- Restart services with saved commands — no terminal required
- Reboot recently stopped services from history
- Pin important services so they always appear
- Hide noise you don't care about
- Search by name, port, process, or path (Cmd+K)
- Enumerates listening TCP sockets via
netstat2(native macOS libproc syscalls) - Maps sockets to processes and reads metadata (name, command, cwd, uptime) via
sysinfo - Looks for project markers (
package.json,Cargo.toml,go.mod, etc.) near the working directory - Applies heuristics to filter dev-related processes from system noise
- Pushes the full state to the UI every scan cycle — only when something changes
Works with projects anywhere on disk. Not tied to any specific folder.
- Smart classification — dev tools (vite, next, wrangler) always show; generic runtimes (node, python) require project signals; known desktop apps (Discord, Slack) are filtered out
- Intelligent naming — reads
package.jsonname, detects monorepo structures, maps known commands to friendly names - Restart commands — user-approved, not guessed from
cmd(). Runs via/bin/zsh -ilso Homebrew, nvm, asdf, and pnpm all work - Persistent history — recently stopped services survive app restarts, with one-click reboot
- Light & Dark mode — warm stone + teal theme, follows system preference
- macOS vibrancy — frosted glass native feel
- Cmd+K search — filter across all services instantly
- No network requests. No telemetry. No analytics.
- No keystroke capture.
- Stores only local app state (pinned/hidden services, preferences, history) as plain JSON in:
~/Library/Application Support/com.portgui.desktop/
Requires macOS, pnpm, Rust (via rustup), and Xcode Command Line Tools.
pnpm install
pnpm tauri devRelease build:
pnpm tauri buildRun tests:
PATH="$HOME/.cargo/bin:$PATH" cargo test --manifest-path src-tauri/Cargo.toml --lib| Layer | Tech |
|---|---|
| Desktop shell | Tauri 2.10 |
| Frontend | SolidJS 1.9 |
| Styling | Tailwind CSS v4 |
| Build | Vite |
| Process info | sysinfo (Rust) |
| Port mapping | netstat2 (Rust) |
| Persistence | JSON files with atomic writes |
- macOS Monterey or later
- Apple Silicon (arm64)