Real-time bandwidth monitoring in your terminal.
SpeedMeter is a fully interactive, real-time internet speed meter that runs entirely in your terminal. It combines a beautiful Textual-based Terminal UI (TUI) with the power of speedtest-cli to give you live download/upload speed tests, historical tracking, system resource monitoring, and interactive controls β all without leaving your command line.
- Interactive Terminal UI β Beautiful real-time dashboard with speed gauges, charts, and live data
- Full Speed Tests β Download speed, upload speed, ping, and jitter measurements
- Live Speed Gauges β Animated visual indicators for download, upload, and ping
- Speed History Chart β Sparkline-style chart showing test results over time
- Server Browser β Browse and select from available speedtest.net servers
- System Monitor β Live CPU, memory, uptime, and network traffic display
- Test History β Persistent storage of all speed test results (JSON-backed)
- Quick Mode β Run a one-shot speed test from the CLI without the TUI
- Export Results β Save test data to JSON files for analysis
- Cross-Platform β Works on Linux, macOS, and Windows
- Configurable β Custom themes, thresholds, units, and auto-refresh intervals
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β βββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ββ Download ββ ββ Upload ββββ ββ Ping βββββ β β
β β β 256.42 Mbpsβ β 42.18 Mbpsβ β 12.3 ms β β β
β β β βββββββββββ β βββββββββββ β βββββββββββ β β
β β ββββββββββββββ ββββββββββββββ ββββββββββββββ β β
β β ββ Speed History βββββββββββββββββββββββββββββββ β β
β β β βββββββββββββββββββββββββββββββββββββ β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β ββ Connection ββββ ββ System ββββββββββββββββ β β
β β β Server: XYZ β β CPU: 23.4% β β β
β β β ISP: ABC β β Memory: 45.2% β β β
β β β IP: 1.2.3.4 β β Uptime: 12h 34m β β β
β β ββββββββββββββββββ ββββββββββββββββββββββββββ β β
β β [Run Test] [Stop] [History] [Quick Mode] β β
β β β 14:32:15 β DL: 256.42 | UL: 42.18 | 12.3ms β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Python 3.10+
- pip (Python package manager)
- git (optional, for cloning the repository)
Linux / macOS:
curl -fsSL https://raw.githubusercontent.com/Uthuman/speedmeter/main/install.sh | bashWindows (PowerShell):
iwr -useb https://raw.githubusercontent.com/Uthuman/speedmeter/main/install.ps1 | iex# Clone the repository
git clone https://github.com/Uthuman/speedmeter.git
cd speedmeter
# Create a virtual environment (recommended)
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Install SpeedMeter
pip install -e .pip install speedmeterspeedmeterThis opens the full interactive terminal dashboard. Use keyboard shortcuts:
| Key | Action |
|---|---|
Space / R |
Run a speed test |
S |
View test history |
C |
View configuration |
D |
Toggle detail view |
Q |
Quit |
Tab |
Navigate between widgets |
Run a single speed test and exit (no TUI):
speedmeter --quickspeedmeter --list-serversspeedmeter --quick --server 12345speedmeter --quick --output results.jsonspeedmeter --config /path/to/config.jsonspeedmeter --verbosespeedmeter --versionpython -m speedmeter
python -m speedmeter --quickConfiguration is stored at standard OS locations via platformdirs:
| OS | Config Path |
|---|---|
| Linux | ~/.config/speedmeter/config.json |
| macOS | ~/Library/Application Support/speedmeter/config.json |
| Windows | C:\Users\<USER>\AppData\Local\speedmeter\config.json |
{
"app": {
"refresh_interval": 5,
"theme": "auto",
"history_size": 50,
"chart_points": 30,
"timeout": 30
},
"units": {
"speed": "Mbps",
"precision": 2
},
"notifications": {
"enabled": true,
"threshold_download": null,
"threshold_upload": null
}
}# Install dev dependencies
pip install -e ".[dev]"
# Run all tests
pytest
# Run with verbose output
pytest -v
# Run specific test file
pytest tests/test_speedmeter.py
# Run without network-dependent tests
pytest -m "not network"speedmeter/
βββ speedmeter/ # Main package
β βββ __init__.py # Package init
β βββ __main__.py # CLI entry point & arg parsing
β βββ app.py # Textual TUI application
β βββ config.py # Configuration management
β βββ history.py # Test history persistence
β βββ tester.py # Speed test execution
β βββ widgets.py # Custom Textual widgets
βββ tests/
β βββ test_speedmeter.py # Pytest test suite
βββ install.sh # Unix installation script
βββ install.ps1 # Windows installation script
βββ uninstall.sh # Unix uninstallation script
βββ requirements.txt # Python dependencies
βββ setup.py # Package setup script
βββ pyproject.toml # Modern build configuration
βββ pytest.ini # Pytest configuration
βββ .gitignore # Git ignore rules
βββ LICENSE # MIT License
βββ README.md # This file
| Package | Purpose |
|---|---|
speedtest-cli |
Internet speed test engine (download, upload, ping) |
rich |
Terminal rendering with styled output and progress bars |
textual |
Terminal UI framework for interactive layouts |
prompt_toolkit |
Interactive terminal input and key bindings |
psutil |
System resource monitoring (CPU, memory, network) |
colorama |
Cross-platform terminal color support (Windows) |
platformdirs |
Standard OS paths for config, cache, and logs |
requests |
HTTP fallback and API-based network checks |
asyncio |
Non-blocking async operations for live UI |
argparse |
CLI argument parsing |
logging |
Runtime event and error logging |
pytest |
Automated test suite |
| Platform | Status | Notes |
|---|---|---|
| Linux | β Full support | Tested on Ubuntu 22.04+, Fedora |
| macOS | β Full support | Tested on macOS 13+ (Apple Silicon & Intel) |
| Windows | β Full support | Tested on Windows 10/11 (PowerShell, cmd, Git Bash) |
- 256-color support recommended (most modern terminals)
- Minimum 80Γ24 terminal size
- Works in: GNOME Terminal, iTerm2, Windows Terminal, Alacritty, Kitty, tmux, VS Code integrated terminal
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
git clone https://github.com/Uthuman/speedmeter.git
cd speedmeter
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install -e ".[dev]"This project is licensed under the MIT License β see the LICENSE file for details.
- speedtest-cli β Internet speed test library
- Textual β Terminal UI framework
- Rich β Terminal formatting library
Made with β€οΈ for the terminal community
SpeedMeter v1.0.0