Help us shape the future of Go! Take the 2026 Go Developer Survey

speeder

command module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 12, 2026 License: MIT Imports: 9 Imported by: 0

README

speeder

CI Go Report Card Go Version License Release

A fast, data-efficient internet speed test CLI built in Go. Uses the ndt7 protocol over M-Lab's open, nonprofit server network — no Ookla/speedtest.net dependency.

  Server:    ndt-mlab1-sin01.mlab-oti.measurement-lab.org
  Location:  Singapore SG

  Latency:   14.2 ms  jitter: 0.9 ms
  Download:  94.71 Mbps  (3.1s, 36.8 MB)
  Upload:    23.10 Mbps  (2.8s,  8.1 MB)

  Data used: 44.9 MB

Features

  • Adaptive early stopping — tests stop as soon as the speed measurement converges (coefficient of variation < 3%), minimising data usage
  • --quick preset uses 4 s max per phase, typically < 35 MB total
  • JSON output for scripting
  • Zero config, no account, no API key — M-Lab servers are publicly available worldwide
  • Pure Go, no CGO — runs on any platform Go supports

Installation

With Go (any OS, any architecture)
go install github.com/mhdiiilham/speeder@latest

The binary lands in $(go env GOPATH)/bin/. Make sure that directory is on your PATH.

Pre-built binaries

Download the latest binary for your platform from the Releases page:

Platform Binary
Linux amd64 speeder-linux-amd64
Linux arm64 speeder-linux-arm64
macOS (Apple Silicon) speeder-darwin-arm64
macOS (Intel) speeder-darwin-amd64
Windows amd64 speeder-windows-amd64.exe
macOS / Linux (curl one-liner)
# Replace OS and ARCH as needed
curl -Lo speeder \
  https://github.com/mhdiiilham/speeder/releases/latest/download/speeder-linux-amd64
chmod +x speeder
sudo mv speeder /usr/local/bin/

Usage

speeder [flags]

  --list            list nearby M-Lab servers and exit
  --server string   use a specific server hostname
  --json            output results as JSON to stdout
  --no-progress     disable live progress updates
  --duration int    max seconds per test phase (default 8)
  --quick           quick preset: 4 s max, minimal data usage
  --version         print version and exit
Examples
# Default run — auto-selects nearest server
speeder

# Minimal data usage
speeder --quick

# JSON output (pipe-friendly; progress goes to stderr)
speeder --json | jq .download_mbps

# List nearby servers, then test against a specific one
speeder --list
speeder --server ndt-mlab1-sin01.mlab-oti.measurement-lab.org

# No live output (for cron / logging)
speeder --no-progress --json >> speedlog.jsonl
JSON output format
{
  "server": {
    "hostname": "ndt-mlab1-sin01.mlab-oti.measurement-lab.org",
    "city": "Singapore",
    "country": "SG"
  },
  "latency_ms": 14.2,
  "jitter_ms": 0.9,
  "download_mbps": 94.71,
  "upload_mbps": 23.10,
  "data_used_mb": 44.9
}

Data usage

speeder uses an adaptive algorithm: each test phase (download, upload) runs for a minimum of 2 seconds to pass TCP slow-start, then stops as soon as the measured speed stabilises (coefficient of variation drops below 3%). The hard ceiling is --duration seconds (default 8).

Typical data usage:

Connection Default --quick
50 Mbps ~25 MB ~15 MB
100 Mbps ~40 MB ~25 MB
500 Mbps ~100 MB ~60 MB

Compare: Ookla's official client typically uses 150–300 MB on a fast connection.

Building from source

git clone https://github.com/mhdiiilham/speeder.git
cd speeder
go mod tidy
make build          # → bin/speeder
make test           # run tests with race detector
make coverage       # test + HTML coverage report
make release        # cross-compile all platforms to bin/

Requires Go 1.21+.

License

MIT — see LICENSE.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL