Interactive TUI for viewing and killing listening TCP ports on macOS and Linux.
Run it directly with npx -- no install required:
npx ports-cliOr install globally:
npm install -g ports-cliThen run:
ports- Real-time monitoring -- port list auto-refreshes every 2 seconds
- Interactive search -- filter by port number, address, PID, or process name
- Kill processes -- terminate processes with a confirmation prompt, or skip it with
ctrl+k - Vim-style navigation --
j/kto move,g/Gto jump to first/last - IPv6 normalization --
[::1]maps to127.0.0.1,[::]maps to0.0.0.0, deduplicating entries - Viewport scrolling -- adapts to terminal height, keeps selection visible
- Help overlay -- press
?for a full keybinding reference - Zero config -- no flags, no setup, just run it
| Key | Action |
|---|---|
↑ / k |
Move selection up |
↓ / j |
Move selection down |
g / G |
Jump to first / last |
enter / x |
Kill selected process (with confirmation) |
ctrl+k |
Kill selected process (skip confirmation) |
/ |
Enter search mode |
ESC |
Clear search / cancel |
r / R |
Refresh port list |
? |
Toggle help overlay |
q / ctrl+c |
Quit |
ports --help, -h Show help
ports --version, -v Show version
ports-cli runs lsof -iTCP -sTCP:LISTEN -nP to discover all processes listening on TCP ports. The raw output is parsed, deduplicated, and normalized (converting IPv6 loopback and wildcard addresses to their IPv4 equivalents). The result is rendered as a full-screen terminal UI using Ink, a React renderer for the terminal. The list refreshes automatically every 2 seconds. Killing a process sends SIGKILL to the target PID.
- macOS or Linux -- requires
lsof(pre-installed on macOS; install viaapt install lsofordnf install lsofon Linux) - Node.js >= 18
git clone https://github.com/patebry/ports-cli.git
cd ports-cli
npm installDevelopment commands:
npm run build # Compile to dist/ports.js
npm run typecheck # TypeScript type checking
npm run lint # ESLint
npm test # Run test suite (189 tests)
npm run coverage # Run tests with coverage reportBuilt with TypeScript, React 18, Ink 4, esbuild, and Vitest.
