A beautiful TUI port manager โ see and kill processes on any port without googling lsof
Project description
portzup ๐
Because
lsof -i :3000is not a personality.
A Interactive terminal UI that shows every process running on your machine's network ports โ live, searchable, and killable in one keypress. No more googling commands. No more chaining lsof | grep | kill. Just open portzup and see everything.
Install
pip install portzup
Then run:
portzup
That's it. Zero to running in under 30 seconds.
Why portzup?
You know this moment:
Error: listen EADDRINUSE: address already in use :::3000
Then the ritual:
- Google "how to kill port 3000"
- Find a Stack Overflow answer
- Run
lsof -ti:3000 | xargs kill -9 - Forget it by next week
- Google it again
portzup ends this loop.
Features
| Live port table | Every open port, process name, PID, protocol, status โ updated every 2 seconds |
| Fuzzy search | Press / and type to filter by port number, process name, or status |
| Kill with one key | Press k to terminate the selected process (with confirmation) |
| Process detail pane | Press i to see full command, user, local/remote addresses |
| Sort | Press s to cycle between sort modes: port โ PID โ process name |
| Auto-refresh | Table stays live โ or press r to force an instant refresh |
| Cross-platform | Linux โ macOS โ Windows (v1.1) |
Keybindings
| Key | Action |
|---|---|
โ / โ |
Navigate the port list |
/ |
Open fuzzy search |
Escape |
Clear search / close detail pane |
k |
Kill selected process |
i |
Toggle process detail pane |
r |
Force refresh |
s |
Cycle sort (port โ PID โ name) |
q |
Quit |
? |
Show help |
Status colours
| Colour | Status |
|---|---|
| ๐ข Green | LISTEN |
| ๐ต Cyan | ESTABLISHED |
| ๐ก Yellow | TIME_WAIT |
| ๐ฃ Magenta | CLOSE_WAIT |
| ๐ด Red | FIN_WAIT |
Platform support
| Platform | Status |
|---|---|
| Linux | โ Fully supported |
| macOS | โ Fully supported |
| Windows | โ Fully supported (run as Administrator) |
Stack
| Language | Python 3.10+ |
| TUI | Textual |
| System data | psutil |
| Packaging | pip / PyPI |
Contributing
PRs are welcome! The project is MIT licensed.
portzup/
โโโ portzup/
โ โโโ main.py # Textual App โ entry point
โ โโโ ui/
โ โ โโโ table.py # Port table widget
โ โ โโโ detail.py # Process detail pane
โ โ โโโ footer.py # Status bar
โ โโโ core/
โ โ โโโ ports.py # psutil port fetching
โ โ โโโ killer.py # Safe process kill
โ โ โโโ models.py # PortEntry dataclass
โ โโโ config.py
โโโ tests/
โโโ pyproject.toml
โโโ README.md
Run tests:
pip install pytest
pytest tests/
License
MIT โ open, contribution-friendly, no friction.
Built with Python + Textual. Inspired by the daily frustration of every developer who has ever googled "how to kill port 3000".
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file portzup-1.0.4.tar.gz.
File metadata
- Download URL: portzup-1.0.4.tar.gz
- Upload date:
- Size: 213.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fdf83ac5eea0a036690aa3905312db6f564f11079bfd25a4eedaaffaed896dc
|
|
| MD5 |
2696ebb0777208650b2b872c07ced686
|
|
| BLAKE2b-256 |
299fa1d54159eeb24faee69236daacb5892c3026b1476d4cd77c288e5277fd6e
|
File details
Details for the file portzup-1.0.4-py3-none-any.whl.
File metadata
- Download URL: portzup-1.0.4-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c7121fdcc4b98033488a54110d4166e2afada2fe4109bdf32d4db1d890de992
|
|
| MD5 |
3c6c560a18dc682cbda59226c26d24fe
|
|
| BLAKE2b-256 |
c3ee1b19bbae7b87b7e3c337638be4e71854badac52c509e9baec377e0d9f909
|