A real-time TUI app to monitor, filter, and kill processes using dev ports — with conflict alerts and built-in config UI.
Project description
🖥️ PortWatch — Real-Time Port & Process Monitor
A sleek, cross-platform desktop app to monitor, filter, and kill processes using dev ports — with conflict alerts and customizable port lists via UI.
Built with Python + Textual TUI — works on Windows, macOS, Linux.
✨ Features
✅ Live Process Table — See all running processes, ports, PIDs, and statuses
✅ Dev Port Conflict Detection — Highlights ports you’ve marked as “dev” (e.g., 3000, 8080)
✅ Desktop Notifications — Get alerts when dev ports are in use ⚠️
✅ One-Click Kill — Terminate any process with confirmation
✅ Smart Filters — Filter by “All”, “New”, or “Conflict”
✅ Built-in Port Config UI — No manual .portconfig editing! Add/remove/reset ports via GUI
✅ Persistent Config — Your dev port list is saved automatically to .portconfig
✅ Cross-Platform — Works on Windows, macOS, Linux
🚀 Quick Start
1. Install
pip install portwatch
Or if installing from source:
git clone https://github.com/MadushankaRajapaksha/portwatch
cd portwatch
pip install -e .
Requires Python 3.9+
2. Run
portwatch
→ Opens interactive TUI app.
🎯 How to Use
🔍 Main Screen
You’ll see a live table of processes using network ports:
| PID | PORT | PROCESS | STATUS | ACTION | NOTE |
|---|---|---|---|---|---|
| 1234 | 3000 | node.exe | LISTEN | KILL | 🆕 NEW |
| 5678 | 5432 | postgres.exe | LISTEN | KILL | ⚠️ Conflict |
⚙️ Manage Dev Ports (NO MANUAL FILE EDITING!)
Click the “⚙️ Config” button → opens Port Config Modal
- ➕ Add Port — Type port number (e.g.,
3001) → click “Add Port” - 🗑️ Delete Port — Select row → click “Delete Selected”
- 🔄 Reset to Default — Restores common dev ports (3000, 8080, 5432, etc.)
- ❌ Close — Saves automatically — no manual
.portconfigediting needed!
✅ All changes are saved instantly to
.portconfig— you never need to touch the file.
🧭 Filter Processes
Use the filter bar:
- Text Filter — Type app name or port (e.g., “node” or “3000”)
- Toggle Filters:
All— Show everything🆕 New— Only processes appeared since last scan⚠️ Conflict— Only processes using your marked dev ports
☠️ Kill a Process
- Click any row in the table (or use arrow keys + Enter)
- Confirm “Kill?” in popup
- Process is terminated — table auto-refreshes
🔔 Notifications
When a process starts using a dev port (e.g., 3000), you’ll get a desktop notification:
“⚠️ Port 3000 in use by node.exe”
❗ If notifications don’t work, you’ll see a one-time alert modal explaining it.
📁 Configuration
Your dev port list is stored in .portconfig in the app directory — but you should never edit it manually.
Example auto-generated .portconfig:
'3000': React Dev
'8080': Backend API
'5432': PostgreSQL
'27017': MongoDB
✍️ Use the “⚙️ Config” UI to manage this — it’s safer and instantly reloads in the app.
🛠️ Troubleshooting
❌ “Notifications not working”
- Windows: Make sure “Focus Assist” is off
- macOS: Go to System Settings → Notifications → Allow notifications for Terminal/Python
- Linux: Install
libnotify-bin→sudo apt install libnotify-bin
App will show a warning modal if notifications are disabled.
🐛 App crashes or shows errors
Run in dev mode for logs:
textual run -d portwatch
📦 Dependencies
textual— TUI frameworkpsutil— Process/port scanningplyer— Desktop notificationspyyaml— Config file handling
📄 License
MIT — Use freely for personal or commercial projects.
🙌 Contributing
PRs welcome! Especially for:
- Export/import config
- Process graphs
- Dark/light mode toggle
- Keyboard shortcuts
💬 Support
Open an issue on GitHub or message @yourusername.
🔐 No more manual
.portconfigediting — Use the UI. It’s faster, safer, and updates live.
✅ Save this as README.md in your project root.
🧩 Bonus: Add to setup.py or pyproject.toml
If distributing via pip:
[project]
name = "portwatch"
version = "0.1.0"
description = "Real-time port and process monitor with dev port alerts"
readme = "README.md"
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 portwatch-0.1.2.tar.gz.
File metadata
- Download URL: portwatch-0.1.2.tar.gz
- Upload date:
- Size: 36.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83df046d4bcb1f22b34bb3c298e4b56127d3b2b120b95c3477d74830d5510235
|
|
| MD5 |
2ca27fe481f8ea97dec2166c422c2307
|
|
| BLAKE2b-256 |
1acc984da20a8dff0fb52b60db1c59507564fe2cd02ab15c4807f9d821343776
|
File details
Details for the file portwatch-0.1.2-py3-none-any.whl.
File metadata
- Download URL: portwatch-0.1.2-py3-none-any.whl
- Upload date:
- Size: 34.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a526eb22523cb62820f7e6511eeffe002ce0b4df5a7d5c78b7050840ae4e7599
|
|
| MD5 |
607ad94e6b633aca55cd779987c5d60a
|
|
| BLAKE2b-256 |
70169b2e4a35d7f095e67f1d28afdd2b0856700a80ec80112b7cec754dca50e6
|