Skip to main content

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.

pingx demo

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

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

pingx-1.0.2.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pingx-1.0.2-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

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

Hashes for pingx-1.0.2.tar.gz
Algorithm Hash digest
SHA256 10d29c877081887243e757e6a22e3b48535df57c80831c0c48537f932dd6827c
MD5 dcbeece45ceca94549f25556a40bd1f9
BLAKE2b-256 8f5354f777fc88b57eab676bc983e7451eda2955df2dec6a1ee098dd83ac9d31

See more details on using hashes here.

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

Hashes for pingx-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5cf9e67eeb2ca6d2e89073780f2bdfe6a4110b2bccec88df99cfb71145f73375
MD5 d7f037361c47dd39c281c6529784b84f
BLAKE2b-256 51262c6c4dc5322dad87977fd8727dbf744207fc660ae0bdcd5c921c8417d28d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page