Rust · Ratatui · Cloudflare edge tests

Grade the network before usersfeel it.

A terminal rig that measures latency, jitter, loaded overhead, DNS, TLS, packet loss, and every hop between you and the edge. Not a speed number. The actual shape of the connection.

grade.rs

A score that punishes unstable links.

Bandwidth is only part of the story. The grade weights the moments that make calls stutter, games spike, deploys hang, and dashboards feel slow.

composite score 0-100 to letter grade
35%Latency
25%Jitter
25%Packet loss
15%Loaded overhead

When loaded latency is not available, the overhead weight is reassigned to latency, producing a 50 / 25 / 25 / 0 split.

A+95+
A85-94
B75-84
C60-74
D45-59
F<45
traceroute.rs

Every hop, mapped and timed.

TTL-exceeded ICMP probes walk the route to the edge one router at a time. When a page feels slow and throughput looks fine, the answer is usually sitting in this list.

Six-hop traceroute from local gateway to Cloudflare edge, latency increasing with each hop gateway isp core peering border transit 1.1.1.1
192.168.1.10.4 ms
10.90.4.13.9 ms
ae12.core.isp8.1 ms
border2.ord10.6 ms
203.0.113.111.8 ms
1.1.1.1 edge12.4 ms
engine/

Nine probes, each with a job.

The engine separates baseline speed from loaded behavior, transport setup, resolver cost, packet loss, route shape, and IP stack differences.

9 probes
#MeasurementDescriptionEngine moduleStatus
01Idle LatencyMean, median, P25/P75 RTT, jitter, and loss to the Cloudflare edge with no competing trafficlatency.rsmeasured
02Loaded LatencyRTT during active download/upload, the bufferbloat telllatency.rsmeasured
03Download ThroughputMulti-stream parallel download averaged across sampled segmentsthroughput.rsmeasured
04Upload ThroughputParallel upload with independent sampling windowsthroughput.rsmeasured
05UDP Packet LossBurst probes through Cloudflare TURN endpoint, counting lost and reordered packetsturn_udp.rsmeasured
06DNS ResolutionSystem-resolver timing for the configured speed-test hostname, with resolved addresses and DNS serversdns.rsmeasured
07TLS HandshakeTLS handshake time in isolation after TCP connects, with negotiated protocol and cipher suitetls.rsmeasured
08ICMP TracerouteTTL-exceeded probes mapping the path to Cloudflare edge per hoptraceroute.rsraw socket
09IPv4 vs IPv6Side-by-side latency and throughput over both stacksip_comparison.rsinformational
No probes match that filter. Try latency, TLS, DNS, or throughput.
tui/widgets/

The terminal stays readable while the test is moving.

Each widget is scoped to one diagnostic job, so the TUI can update live without turning the result screen into a wall of numbers.

--json example output excerpt · pipeable to jq
"timestamp_utc": "2026-06-29T14:22:07Z",
"base_url": "https://speed.cloudflare.com",
"idle_latency": { "median_ms": 12.4, "jitter_ms": 1.8, "loss": 0.0 },
"download": { "mbps": 943.0 },
"upload": { "mbps": 821.0 },
"dns": { "resolution_time_ms": 4.2 },
"tls": { "handshake_time_ms": 38.0, "protocol_version": "TLSv1_3" },
"ip_comparison": { "ipv4_result": { "latency_ms": 12.4 }, "ipv6_result": { "latency_ms": 11.9 } }
private beta

Run it once. Know what broke.

cloudflare-speed-tui is a private Rust/Ratatui project I'm building for fast, no-nonsense network diagnosis, straight from the terminal.

Return to portfolio