unispeedtest — command-line internet speed test
unispeedtest measures the quality of a network connection from the terminal. It currently drives Cloudflare speed test endpoints, and the provider layer is structured so other backends can be added later.
What it measures
Section titled “What it measures”| Metric | How it is derived |
|---|---|
| Download throughput | 90th percentile of sampled Mbps values |
| Upload throughput | 90th percentile of sampled Mbps values |
| Unloaded latency | Median of 20 samples |
| Loaded latency | Measured separately during the download and upload phases |
| Jitter | Mean absolute difference between consecutive unloaded latency samples |
| Packet loss | 1000 requests at concurrency 50 |
| Network metadata | Cloudflare colo, ASN and AS organization, public IP |
The reports also grade the connection for streaming, gaming, and video chat. The full sampling plan and the grading thresholds are in How measurements work.
Install
Section titled “Install”From GitHub Releases
Section titled “From GitHub Releases”The installer script resolves the latest release, verifies the archive against the release checksums.txt with SHA-256, and installs to /usr/local/bin:
curl -fsSL https://raw.githubusercontent.com/hsblabs/universal-speedtest-cli/main/install.sh | shSet INSTALL_DIR to install elsewhere:
curl -fsSL https://raw.githubusercontent.com/hsblabs/universal-speedtest-cli/main/install.sh | INSTALL_DIR="$HOME/.local/bin" shTo install by hand, download an archive from Releases and place the unispeedtest binary somewhere on your PATH.
With Go
Section titled “With Go”go install github.com/hsblabs/universal-speedtest-cli/cmd/unispeedtest@latestThe binary is named unispeedtest.
unispeedtestA full run takes roughly a minute and prints a colored summary. Set NO_COLOR=1 to disable ANSI colors.
Options
Section titled “Options”| Flag | Effect |
|---|---|
-html <path> |
Write a self-contained HTML report to <path> |
-html-title <title> |
Append a title to the HTML report; requires -html |
-json |
Print compact single-line JSON |
-pretty |
Print indented JSON; implies -json |
-v, --version |
Print the CLI version and exit |
unispeedtest -html report.html -html-title "Home Wi-Fi"unispeedtest -jsonunispeedtest -prettyunispeedtest --versionPassing -html-title without -html is an error and exits with status 2.
Both report formats are covered in Output formats.
Under -json, progress output is suppressed so stdout stays parseable.