| Crates.io | speedo |
| lib.rs | speedo |
| version | 0.3.18 |
| created_at | 2025-11-18 19:11:11.39141+00 |
| updated_at | 2025-11-28 00:06:24.500675+00 |
| description | Network speed test tool and file downloader built in Rust |
| homepage | |
| repository | https://github.com/coryzibell/speedo |
| max_upload_size | |
| id | 1938848 |
| size | 338,640 |
Network speed test tool and file downloader. Built in rust, doesn't need curl, wget, or system ssl libs.
cargo install speedo
cargo install speedo --features gui
See GUI.md for system requirements and setup details.
cargo binstall speedo
cargo install --git https://github.com/coryzibell/speedo
speedo [URL]
speedo [-i|--interactive] [-n|--non-interactive] [-s|--speed-unit UNIT]
speedo [--json] [--format FORMAT] [--compact]
speedo --update-servers
speedo --help
speedo --version
speedo downloads a test file and reports the transfer speed. By default it runs non-interactively against Cloudflare's CDN. With the -i flag, it displays an enhanced interactive menu with numerous test servers organized by region and provider.
The tool supports multiple output formats (human-readable, JSON, CSV) for scripting and automation, and automatically updates its server list from GitHub.
If a URL is provided as an argument, the file is downloaded to the current directory and the speed is reported.
Command-line flags override the config file settings.
-g, --gui Launch graphical user interface (requires --features gui)
-i, --interactive Show enhanced server selection menu with browse modes (by region, provider, search)
-n, --non-interactive Run quick test (override config)
-s, --speed-unit UNIT Speed unit format (bits-metric, bits-binary, bytes-metric, bytes-binary)
--format FORMAT Output format: json, csv, or human (default)
--json Output JSON format (shorthand for --format json)
--compact Use compact JSON output (no pretty printing)
--update-servers Update remote server list from GitHub
-h, --help Display help text
-V, --version Display version
URL URL to download (saves file to current directory)
Configuration is read from the first file found:
# Default mode when no flags given (default: false)
interactive = false
# User agent string for requests
user_agent = "Mozilla/5.0"
# Speed unit format for progress display (default: "bytes-metric")
# Options:
# "bits-metric" or "mbps" - Megabits per second (Mbps, Gbps) - 1000-based
# "bits-binary" or "mibps" - Mebibits per second (Mibps, Gibps) - 1024-based
# "bytes-metric" or "mb/s" - Megabytes per second (MB/s, GB/s) - 1000-based (default)
# "bytes-binary" or "mib/s" - Mebibytes per second (MiB/s, GiB/s) - 1024-based
speed_unit = "bytes-metric"
# Additional test servers
[[custom_servers]]
name = "My Server"
url = "https://example.com/testfile.bin"
See speedo.toml.example for details.
Launch graphical interface:
speedo --gui
Run a quick speed test (default server):
speedo
Download a specific file:
speedo https://example.com/testfile.zip
Show interactive menu with enhanced browse modes:
speedo -i
Update server list from GitHub:
speedo --update-servers
Force non-interactive mode (override config):
speedo -n
Use bits per second instead of bytes:
speedo --speed-unit bits-metric
Download with custom speed unit:
speedo -s bits-binary https://example.com/file.bin
Output results as JSON:
speedo --json
speedo -n --json --compact | jq '.results.speed.mbps'
Output results as CSV (for logging):
speedo -n --format csv >> speed_tests.csv
Non-interactive mode prints the transfer summary and speed:
Downloaded 95.37 MiB in 4.69s - 20.33 MB/s (170.58 Mbps)
When downloading a URL, the saved filename is also printed:
Downloaded 95.37 MiB in 4.69s - 20.33 MB/s (170.58 Mbps)
Saved: testfile.zip
Interactive mode displays a progress bar during download, then shows:
speedo --json
{
"timestamp": "2025-11-19T05:00:00Z",
"server": {
"name": "Cloudflare CDN",
"url": "https://speed.cloudflare.com/__down?bytes=100000000"
},
"results": {
"status_code": 200,
"bytes_downloaded": 100000000,
"total_time": 4.532,
"connect_time": 0.123,
"ttfb": 0.245,
"speed": {
"mbps": 176.42,
"mb_s": 22.05
}
}
}
speedo --format csv
timestamp,server_name,server_url,bytes_downloaded,total_time,connect_time,ttfb,speed_mbps,status_code
2025-11-19T05:00:00Z,Cloudflare CDN,https://speed.cloudflare.com/__down?bytes=100000000,100000000,4.532,0.123,0.245,176.42,200
You can configure the speed display format in speedo.toml:
speedo includes 73 pre-configured speed test servers across all major regions worldwide, automatically updated from GitHub:
Global/CDN:
North America (30 servers):
Europe (17 servers):
Asia (10 servers):
South America (5 servers):
Middle East (2 servers):
Africa (1 server):
Oceania (6 servers):
When running speedo -i, you can browse servers by:
The server list is automatically updated from GitHub and cached locally for 7 days. Force an update with:
speedo --update-servers
Major cloud platforms (AWS, Google Cloud, Microsoft Azure) don't provide public HTTP speed test files like infrastructure providers do:
The included providers represent all major hosting companies that offer public, unauthenticated HTTP speed test downloads. Cloud platforms would require API authentication or custom resource deployment, which is outside the scope of a simple speed test tool.
cargo build --release
curl(1), wget(1)
This project is licensed under either of:
at your option.