Full-screen TUI ping monitor with auto-reconnect and WAN failover detection
Project description
pingx
A full-screen terminal ping monitor with live RTT history, rolling loss stats, and WAN failover detection.
Standard ping gives you a wall of scrolling numbers. pingx replaces that with a live four-panel dashboard: a braille sparkline that plots RTT over time, rolling packet loss windows, and automatic detection of gateway changes — useful when your network runs dual-WAN or has a failover setup.
Features
- Auto-reconnect — detects network down after 5 consecutive timeouts, retries in the background, resumes automatically on recovery
- WAN failover detection — polls the default route every 3 seconds; announces gateway changes as they happen
- Braille sparkline — rolling RTT history rendered with Unicode braille characters; auto-scales Y-axis to the observed range so variation is always visible
- Live RTT stats — current / average / min / max, updated every ping
- Rolling loss windows — packet loss over the last 5 minutes and last 1 hour, plus all-time total
- Failover event log — last 2 WAN events with timestamps and recovery durations
- Colour themes — 6 named palettes that restyle the entire interface
- No root required — uses unprivileged ICMP (
SOCK_DGRAM) on macOS; see Linux notes below
Install
Homebrew (macOS — recommended):
brew install tom-xyz/tap/pingx
pipx (any platform — recommended for CLI tools):
pipx install pingx
pip:
pip install pingx
From source:
git clone https://github.com/Tom-xyz/pingx.git
cd pingx
pip install -e .
Requirements
- macOS or Linux (see Platform support)
- Python 3.10+
- rich (installed automatically)
Usage
pingx [OPTIONS] host
pingx 9.9.9.9
pingx google.com
pingx 192.168.1.1 # ping your router
pingx -c 100 8.8.8.8 # stop after 100 pings
pingx -i 1 -W 2 8.8.8.8 # 1-second interval, 2-second timeout
pingx --color blue 9.9.9.9 # blue theme
Press Ctrl-C to exit. A summary (packets transmitted/received, loss %, min/avg/max/stddev RTT) is printed on exit.
Options
| Flag | Long | Default | Description |
|---|---|---|---|
-c N |
--count |
unlimited | Stop after N pings |
-i S |
--interval |
0.2 |
Ping interval in seconds |
-s B |
--size |
56 |
ICMP payload size in bytes |
-t N |
--ttl |
64 |
IP Time To Live |
-W S |
--timeout |
1.5 |
Receive timeout per ping |
--color THEME |
green |
Colour theme (see below) | |
--version |
Print version and exit |
Colour themes
--color green (default) --color blue --color cyan --color amber --color red --color purple
Each theme changes the entire interface palette — borders, logo gradient, sparkline health bands, stats colouring, and status indicators.
Layout
┌────────────────────────────────┬───────────────────────────┐
│ PINGX logo + connection info │ Live RTT & packet stats │ (top, 2:5 ratio)
├────────────────────────────────┼───────────────────────────┤
│ Latency History │ WAN & Events │ (bottom, 3:2 ratio)
│ (braille sparkline, Y=RTT) │ (route + failover log) │
└────────────────────────────────┴───────────────────────────┘
The layout reflows on terminal resize. The latency history panel intentionally dominates — it's the primary visual.
Sparkline
The latency history chart uses Unicode braille characters as a 2×4-pixel canvas per character, giving high-density RTT visualization without any dependencies beyond rich.
- Y-axis auto-scales to the observed RTT range — stable networks show their micro-variation instead of a flat line
- Right edge = newest ping (bold); scrolls left as data arrives
- Dim red
⣀dots fill the chart before data arrives - True timeouts render as natural gaps (empty braille space)
- Colour bands are intentionally wide (< 80ms = ok, not < 20ms) so normal home-network variation never flips colour
Platform support
macOS works out of the box. pingx uses socket.SOCK_DGRAM with IPPROTO_ICMP, which macOS grants without elevated privileges.
Linux requires unprivileged ICMP to be enabled. If you see a permission error, run once as root:
sudo sysctl -w net.ipv4.ping_group_range="0 65535"
To make it permanent, add to /etc/sysctl.conf:
net.ipv4.ping_group_range = 0 65535
Or simply run sudo pingx ....
Windows is not supported. Use WSL2.
Running tests
pip install pytest
python3 -m pytest tests/
License
MIT — see LICENSE
Project details
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 pingx-1.0.2.tar.gz.
File metadata
- Download URL: pingx-1.0.2.tar.gz
- Upload date:
- Size: 18.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10d29c877081887243e757e6a22e3b48535df57c80831c0c48537f932dd6827c
|
|
| MD5 |
dcbeece45ceca94549f25556a40bd1f9
|
|
| BLAKE2b-256 |
8f5354f777fc88b57eab676bc983e7451eda2955df2dec6a1ee098dd83ac9d31
|
File details
Details for the file pingx-1.0.2-py3-none-any.whl.
File metadata
- Download URL: pingx-1.0.2-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5cf9e67eeb2ca6d2e89073780f2bdfe6a4110b2bccec88df99cfb71145f73375
|
|
| MD5 |
d7f037361c47dd39c281c6529784b84f
|
|
| BLAKE2b-256 |
51262c6c4dc5322dad87977fd8727dbf744207fc660ae0bdcd5c921c8417d28d
|