netspd
Ping, jitter, download and upload measured against LibreSpeed-compatible servers and drawn live on a braille-canvas instrument cluster.

Why it exists
netspd measures the link and then grades bufferbloat: latency is sampled while the link is saturated and graded A+ to F against idle, per direction.
Client and server ship in one binary. netspd serve on one side and netspd --url on the other measures pod-to-pod, host-to-host or LAN links with nothing else installed.
How it’s built
- Presentation (tui/)
- Ratatui only: theme, animation, widgets and screens.
- Application (app/)
- Events → controller → state → renderer. State is plain data, changed only by reducers; the renderer just draws it.
- Engine (engine/)
- Scheduler, providers, network and metrics. It never imports Ratatui and emits typed events over a channel.
- Providers
- One trait. LibreSpeed (default), Ookla speedtest.net, Netflix Fast.com and custom servers.
- Metrics
- Pure, deterministic calculators (EMA, sampler, throughput, latency, statistics), each unit-tested.
- Library
- The engine is usable as a crate, with an embedding example.
What it does
- A hypercar tachometer: heat-gradient band, hatched redline, spring-physics needle with afterglow, ignition sweep, peak notch and a latency sub-dial; a twin cluster on wide terminals.
- Latency from multiple samples with outlier trimming, jitter, and real ICMP packet loss with a graceful fallback.
- Monitoring-ready: Prometheus textfile output, threshold exit codes (--fail-below), JSON and CSV, and history as JSON lines.
- Server discovery health-probes the list, drops dead servers, picks the nearest and fails over automatically.
- Headless automatically in containers; every flag also reads an environment variable.
- Themes: Default, Nord, Dracula, Catppuccin and Gruvbox, plus custom TOML themes.
- unsafe code is forbidden; unwrap, expect and panic are denied by Clippy.
Screens




Where it sits
Rust · Ratatui · crossterm · Tokio · reqwest (rustls) · clap · surge-ping · serde
By the numbers
- Providers
- 4
- Terminal sizes
- 80×24 up to 4K
- Defaults
- 10-second tests, 4 connections, 10 ping samples
- Built-in server port
- 9516
- Minimum Rust
- 1.88
- crates.io
- v0.1.7
Get it
- crates.io (opens in a new tab)
cargo install netspd - Homebrew
brew tap TarunVishwakarma1/tap && brew install netspd - Nix
nix run github:TarunVishwakarma1/netspd - Release binaries (opens in a new tab)
