A modern, btop-like system monitor TUI (Text User Interface) for Linux, built with Python and Textual.
systop is a comprehensive system monitoring tool that displays real-time information about your system's resources in a beautiful terminal interface. Inspired by btop, it provides detailed insights into CPU, memory, disk, network, GPU, and process activity with an intuitive and responsive UI.
- CPU Monitoring: Real-time CPU usage with per-core graphs and frequency tracking
- Memory Tracking: RAM and swap usage with detailed statistics
- Disk I/O: Monitor disk read/write speeds and storage usage across all partitions
- Network Bandwidth: Real-time upload/download speeds for all network interfaces
- GPU Monitoring: NVIDIA GPU usage, memory, and temperature (displays "N/A" if unavailable)
- Temperature Sensors: System temperature monitoring (when available)
- Interactive Process List: View all running processes with CPU, memory, and runtime
- Sorting: Sort processes by CPU usage, memory, PID, or name
- Search/Filter: Quick search functionality to filter processes
- Pagination: Navigate through large process lists efficiently
- Kill Processes: Terminate processes directly from the interface (with confirmation)
- Lightweight: Minimal CPU and memory overhead
- Real-time Updates: Automatic refresh with configurable intervals
- Efficient Data Collection: Circular buffers for historical data
- Responsive UI: Handles terminal resizing gracefully
- Linux operating system (tested on Ubuntu 22.04+)
- Python 3.10 or higher
- Terminal with good Unicode support (recommended: kitty, alacritty, or modern gnome-terminal)
-
Clone the repository:
git clone <repository-url> cd task-manager
-
Create a virtual environment:
python3 -m venv env
-
Activate the virtual environment:
For bash/zsh:
source env/bin/activateFor fish shell:
source env/bin/activate.fish -
Install dependencies:
pip install -r requirements.txt
Run the application with:
python main.pyOr, if installed as a package:
systop| Key | Action | Description |
|---|---|---|
q |
Quit | Exit the application |
r |
Refresh | Force refresh all widgets |
k |
Kill Process | Kill the selected process (requires confirmation) |
/ |
Search | Enter search mode to filter processes |
β / β |
Navigate | Move up/down in the process list |
PgUp / PgDn |
Page Navigation | Move between pages in the process list |
Enter |
Apply Search | Apply the search filter |
Esc |
Clear Search | Exit search mode and clear filter |
- Focus on Process Widget: Click on the process table or press
Tabto focus on it for keyboard navigation - Search Processes: Press
/, type part of a process name, and pressEnterto filter - Kill Process: Select a process with arrow keys, press
k, then confirm withy - View All Data: Scroll through the widgets to see all system information
- Operating System: Linux (Ubuntu, Debian, Fedora, Arch, etc.)
- Python Version: 3.10 or higher
- Terminal: Modern terminal with Unicode and color support
textual>=0.50.0- TUI frameworkpsutil>=5.9.0- System and process utilitiesplotext>=5.2.0- Terminal plottingpy-cpuinfo>=9.0.0- CPU informationnvidia-ml-py>=12.560.30- GPU monitoring (optional, for NVIDIA GPUs)pytest>=7.4.0- Testing framework (development)pytest-asyncio>=0.21.0- Async testing support (development)
systop/
βββ src/
β βββ monitors/ # Data collection modules
β β βββ cpu.py # CPU monitoring
β β βββ memory.py # Memory monitoring
β β βββ disk.py # Disk I/O monitoring
β β βββ network.py # Network monitoring
β β βββ processes.py # Process management
β β βββ gpu.py # GPU monitoring
β β βββ sensors.py # Temperature sensors
β βββ widgets/ # UI components
β β βββ cpu_widget.py
β β βββ memory_widget.py
β β βββ disk_widget.py
β β βββ network_widget.py
β β βββ process_widget.py
β β βββ gpu_widget.py
β β βββ sensors_widget.py
β βββ utils/ # Helper utilities
β β βββ formatters.py # Data formatting
β β βββ history.py # Historical data tracking
β βββ app.py # Main application
β βββ config.py # Configuration constants
βββ tests/ # Test suite
βββ main.py # Entry point
βββ requirements.txt # Dependencies
- GPU Monitoring: Only works with NVIDIA GPUs via
nvidia-smi. AMD and Intel GPUs are not currently supported. - Temperature Sensors: May not be available on virtual machines or systems without sensor support.
- Process Termination: Requires appropriate permissions to kill processes. System processes may require root/sudo.
- Platform: Linux only. Not compatible with Windows or macOS due to platform-specific system calls.
- Network Interface Names: Very long interface names may be truncated in the display.
Run the test suite with pytest:
# Activate virtual environment first
source env/bin/activate.fish
# Run all tests
pytest
# Run with verbose output
pytest -v
# Run with coverage
pytest --cov=src --cov-report=html
# Run specific test file
pytest tests/test_monitors/test_cpu.pyCurrent test status: 142/142 tests passing, 74% coverage
Three test scripts are available:
-
Automated Test Suite (< 1 minute):
pytest tests/ -v
Runs all unit and integration tests.
-
Quick Stability Test (5 minutes):
python scripts/qa/test_stability.py
Monitors memory and CPU usage for 5 minutes to detect leaks and performance issues.
-
Comprehensive Testing (45-60 minutes):
python scripts/qa/test_final_verification.py
Interactive guide through all manual test cases including:
- Widget functionality
- Process widget interactions
- Keybindings
- 30-minute performance test
- Edge cases
- Follow PEP 8 guidelines
- Use type hints for function signatures
- Include docstrings for all public functions and classes
- Keep functions focused and modular
Contributions are welcome! Here's how you can help:
- Bug Reports: Open an issue describing the bug, steps to reproduce, and your environment
- Feature Requests: Open an issue describing the feature and why it would be useful
- Pull Requests: Fork the repo, create a feature branch, and submit a PR
- Write tests for new features
- Ensure all tests pass before submitting
- Update documentation as needed
- Follow the existing code style
- Keep commits focused and write clear commit messages
GPU shows "N/A":
- This is normal if you don't have an NVIDIA GPU
- Ensure
nvidia-smiis installed and accessible if you do have an NVIDIA GPU
Temperature sensors not showing:
- Temperature sensors may not be available on all systems, especially VMs
- Try installing
lm-sensorspackage and runningsensors-detect
Permission denied when killing processes:
- You can only kill processes owned by your user
- Use
sudoto run systop if you need to manage system processes
High CPU usage:
- This is normal during initial startup as monitors initialize
- If sustained, try reducing update frequency in
config.py
This project is licensed under the MIT License - see below for details:
MIT License
Copyright (c) 2026 systop contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
- Inspired by btop
- Built with Textual
- Thanks to the Python community for excellent system monitoring libraries
- Issues: Report bugs or request features via GitHub Issues
- Discussions: Join the conversation in GitHub Discussions
Enjoy monitoring your system with systop! π