Tarun Vishwakarma

netspd

Role
CLI & Systems
Stack
Rust, Ratatui, Tokio
License
MIT

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

netspd running in a terminal: download and upload tachometers with latency readings

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

Locating servers
The download test, live
The upload test
Test complete

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

RusticxAsync ORM for RustNext project