gospeed logo

Network speed testing,
done right.

A fast, zero-dependency network speed testing tool written in Go. 9 test types, A-F quality grades, cross-platform.

$ gospeed -s speed.example.com -a

Test Result Grade
──────────────────────────────────────────────
Path MTU 1500 bytes A
Latency 12.4 ms avg A
TCP Throughput 847.2 Mbps down A
Bufferbloat 523 RPM A
UDP Throughput 412.8 Mbps A
Packet Loss 0.02% A
Jitter 1.8 ms A
DNS Resolution 8.2 ms A
TCP Connect 14.1 ms A
Bidirectional 821/834 Mbps A

Why gospeed?

Built for engineers who need accurate, repeatable network measurements.

0

Zero Dependencies

Pure Go standard library. No external packages. Single binary, drop it anywhere.

9

9 Test Types

TCP/UDP throughput, latency, jitter, bufferbloat (RPM), path MTU, DNS, TCP connect, bidirectional.

A

Quality Grades

A-F letter grades for every metric with color-coded terminal output. Know your network quality at a glance.

{}

Multiple Output Formats

Table, JSON, and CSV output. Pipe to jq, import to spreadsheets, or feed your monitoring stack.

>_

Cross-Platform

Native support for Windows, macOS, Linux, and FreeBSD. No Cygwin, no WSL, no compromises.

//

Multi-Client Server

Concurrent client support out of the box. Unlike iperf3, multiple users can test simultaneously.

~

Test History & Trends

Local JSONL storage tracks results over time. See how your network performance changes with --history.

RFC

Scientifically Grounded

Based on RFC 6349, RFC 2544, ITU-T Y.1564. BDP-aware TCP buffers, RFC 3550 jitter calculation.

TLS

Flexible TLS

Three TLS modes: auto-generated self-signed, your own certificates, or Let's Encrypt ACME with auto-renewal.

Test Suite

Comprehensive network diagnostics in a single run.

TestProtocolWhat it measuresKey metric
LatencyTCPRound-trip time (20 samples)min/avg/p95/max ms
Path MTUUDP (DF bit)Path Maximum Transmission Unitbytes
TCP ThroughputTCPBandwidth with BDP-aware buffersMbps / Gbps
UDP ThroughputUDPBandwidth + packet loss + reorderingMbps, loss %
JitterUDPInter-packet delay variation (RFC 3550)ms
BufferbloatTCP + UDPLatency under load → responsivenessRPM
DNSUDP/53DNS resolution latencyms
TCP ConnectTCPSYN → established handshake timems
BidirectionalTCPSimultaneous upload + downloadMbps each

Grading System

Every metric gets a letter grade so you can quickly assess quality.

Latency

ABCDF
<20ms · <50ms · <100ms · <200ms · ≥200ms

Packet Loss

ABCDF
<0.1% · <0.5% · <1% · <2.5% · ≥2.5%

Jitter

ABCDF
<5ms · <10ms · <20ms · <50ms · ≥50ms

Bufferbloat (RPM)

ABCDF
≥400 · ≥200 · ≥100 · ≥50 · <50

Throughput

ABCDF
≥100 · ≥50 · ≥25 · ≥10 · <10 Mbps

gospeed vs iperf3

A modern alternative built for real-world network testing.

Featuregospeediperf3
Concurrent clientsYesNo (one at a time)
Windows supportNativeCygwin-dependent
JSON outputReliableBroken with parallel/bidir
Bufferbloat detectionBuilt-in (RPM)Not available
Unified metricsSingle runSeparate tools needed
Quality gradingA-F gradesRaw numbers only
Test historyBuilt-in trendsNot available
NAT-friendlyAll client-initiatedRequires reverse mode
DependenciesZerolibssl, etc.

InstallationDownload Latest Binary

Get running in under a minute.

Client gospeed

Linux / macOS / FreeBSD

curl -fsSL https://gospeed.goozt.org/install.sh | bash

Windows (PowerShell)

irm https://gospeed.goozt.org/install.ps1 | iex

Go Install

go install github.com/goozt/gospeed/cmd/gospeed@latest

Server gospeed-server

Linux / macOS / FreeBSD

curl -fsSL https://gospeed.goozt.org/install.sh | bash -s -- --server

Windows (PowerShell)

irm https://gospeed.goozt.org/install-server.ps1 | iex

Go Install

go install github.com/goozt/gospeed/cmd/gospeed-server@latest

Docker Server

Quick Start

git clone https://github.com/goozt/gospeed.git
cd gospeed
docker compose up -d

Quick Reference

Common usage patterns to get you started.

Start the Server

Listen on default port 9000.

gospeed-server

Run All Tests

Full test suite against a remote server.

gospeed -s host:9000 -a

Specific Tests

Run only the tests you need.

gospeed -s host:9000 --latency --tcp

JSON Output

Machine-readable output for scripting.

gospeed -s host:9000 --json | jq .

View History

See past results with trend indicators.

gospeed --history

TLS Connection

Encrypted testing over untrusted networks.

gospeed -s host:9000 --tls

Custom Streams

Adjust parallel streams for throughput tests.

gospeed -s host:9000 -t 8

Environment Variable

Set server address once.

export GOSPEED_SERVER_ADDR=host:9000 gospeed

Server with Self-Signed TLS

Quick encrypted server, no cert files needed.

gospeed-server --tls-self-signed

Server with Own Cert

Use your own TLS certificate.

gospeed-server --tls-cert cert.pem --tls-key key.pem

Server with Let's Encrypt

Auto-provisioned ACME certificate.

gospeed-server --tls-acme --domain speed.example.com --email [email protected]

Architecture

Client-server model with dedicated control and data channels.

gospeed
(client)
Control (TCP, JSON-framed)
Data (TCP/UDP Streams)
gospeed-server
(server)

TLS Modes

Two ways to encrypt connections — self-signed for quick setups, ACME for production.

Self-Signed Certificate
gospeed
(client)
--tls --tls-skip-verify
TLS (self-signed cert)
gospeed-server
(server)
--tls-self-signed
Let's Encrypt ACME
gospeed
(client)
--tls
TLS (trusted cert)
gospeed-server
(server)
--tls-acme --domain --email
Let's Encrypt
ACME auto-renewal

Client CLI Reference

All available client flags and options.

FlagDescriptionDefault
-s, --serverServer address (host:port)localhost:9000
-t, --streamsNumber of parallel streams4
-d, --durationTest duration in seconds10
-h, --historyShow previous results with trends-
-v, --versionPrint version and exit-
--jsonOutput as JSON-
--csvOutput as CSV-
--tlsUse TLS connection-
--tls-skip-verifySkip TLS certificate verification-

Available Tests

Individual test flags to run specific diagnostics.

FlagDescriptionDefault
--pingCheck if server is reachable (5 retries)-
--latencyUnloaded latency (RTT)-
--mtuPath MTU discovery-
--tcpTCP throughput-
--udpUDP throughput + packet loss-
--jitterJitter measurement-
--bufferbloatBufferbloat detection (RPM)-
--dnsDNS resolution latency-
--connectTCP connection setup time-
--bidirBidirectional throughput-
-a, --allRun all tests-

Server CLI Reference

All available server flags and options.

FlagDescriptionDefault
-a, --addrListen address (host:port)0.0.0.0:9000
-h, --hostSpecific host address-
-p, --portListening port9000
-v, --versionPrint version and exit-
--tls-certTLS certificate file-
--tls-keyTLS key file-
--tls-self-signedUse auto-generated self-signed certificate-
--tls-acmeUse Let's Encrypt ACME for certificates-
--domainDomain name for ACME (required with --tls-acme)-
--emailEmail for ACME account (required with --tls-acme)-
--cert-dirDirectory to cache ACME certificates~/.gospeed/certs
--healthStart HTTP health check server on given port (GET /health)-

Changelog

Version history and notable changes.

v1.2.2 Latest

2026-03-19

Fixed

  • Data race in TCP progress loop
  • CI test failures on Windows
  • Removed real domain from README examples

v1.2.1

2026-03-19

Improved

  • Comprehensive test coverage across all packages
  • Reduced cyclomatic complexity in 10 functions
  • CI pipeline with coverage reporting via Codecov
  • Added project badges (CI, coverage, Go Report Card, and more)

v1.2.0

2026-03-19

Added

  • --ping flag for quick server reachability check with 5 retries
  • Server advertises supported tests in handshake; client skips unsupported tests

v1.1.0

2026-03-19

Added

  • TLS support with self-signed certificates and Let's Encrypt ACME
  • Shorthand flags (-s, -h, -t, -d, -v, -a) for CLI
  • Build info retrieval for version, commit, and date

Fixed

  • .gitignore updated to include node_modules

v1.0.2

2026-03-19

Fixed

  • Archive configuration to use ids instead of builds for correct artifact referencing

v1.0.1

2026-03-19

Added

  • Windows ARM architecture support in build configurations

v1.0.0

2026-03-19

Added

  • Core speed testing: latency, TCP/UDP throughput, jitter, bufferbloat, MTU discovery, DNS, TCP connect, bidirectional
  • Quality grading system (A-F)
  • JSON and CSV output formats
  • Test history tracking
  • Docker support with UDP

Changed

  • Migrated build tasks from Makefile to Taskfile
  • Improved context handling and error reporting