Skip to content

jkleinne/lazyspeed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

393 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LazySpeed

A terminal-based internet speed test with an interactive TUI and a headless CLI for scripting and CI.

CI Go License: MIT Release

image image

Features

  • Download & upload speed measurement with live EWMA progress
  • Ping & jitter: configurable ping count, jitter as Mean Absolute Deviation
  • Network diagnostics: traceroute, DNS timing, quality scoring (lazyspeed diag)
  • Interactive TUI: server selection, results, history, export, help overlay
  • Headless CLI: JSON, CSV, and one-liner output for scripting and CI
  • Persistent history: XDG-compliant storage with configurable retention
  • Multi-test runs: --count N for sequential tests
  • Shell completions: bash, zsh, fish, powershell
  • Single binary: zero runtime dependencies, cross-platform (macOS, Linux, Windows)

Installation

Homebrew (macOS / Linux)

brew tap jkleinne/tools
brew install lazyspeed

GitHub Releases

Download the latest binary from Releases.

Build from Source

Requires Go 1.24+.

git clone https://github.com/jkleinne/lazyspeed.git
cd lazyspeed
make build

Usage

TUI (Interactive)

lazyspeed
Key Action
n Start a new speed test
d Run network diagnostics
e Export latest result (JSON or CSV)
h Toggle help overlay
/ or k/j Navigate lists
Enter Select
Esc Back
q / Ctrl+C Quit

Speed Test

# Default (human-readable progress on stderr)
lazyspeed run

# Structured output
lazyspeed run --json
lazyspeed run --csv
lazyspeed run --simple          # DL: X Mbps | UL: X Mbps | Ping: X ms

# Options
lazyspeed run --server <id>     # Use a specific server
lazyspeed run --no-upload       # Skip upload phase
lazyspeed run --no-download     # Skip download phase
lazyspeed run --count 5 --json  # Run 5 sequential tests

Network Diagnostics

# Interactive diagnostics in TUI
lazyspeed diag

# Headless with structured output
lazyspeed diag --json
lazyspeed diag --csv
lazyspeed diag --simple

# Specify target
lazyspeed diag --server <host>

# View diagnostics history
lazyspeed diag --history
lazyspeed diag --history --last 5

History

lazyspeed history                    # Table view
lazyspeed history --format json      # JSON output
lazyspeed history --format csv       # CSV output
lazyspeed history --last 10          # Last N entries
lazyspeed history --clear            # Delete all history

Server List

lazyspeed servers                    # Table of servers sorted by latency
lazyspeed servers --format json
lazyspeed servers --format csv

Other Commands

lazyspeed version                    # Version, commit, build date
lazyspeed completion bash            # Shell completions (bash/zsh/fish/powershell)

Configuration

Config file: ~/.config/lazyspeed/config.yaml (respects $XDG_CONFIG_HOME)

history:
  max_entries: 50          # Maximum history entries (default: 50)
  path: ""                 # Override history path (default: ~/.local/share/lazyspeed/history.json)

test:
  ping_count: 10           # Ping iterations per test (default: 10)
  fetch_timeout: 30        # Server list fetch timeout in seconds (default: 30)
  test_timeout: 120        # Speed test timeout in seconds (default: 120)

export:
  directory: ""            # Default export directory (default: current directory)

All settings are optional: sensible defaults are used when omitted.

InfluxDB export

Push speed test results to InfluxDB (v1 or v2) for graphing in Grafana. Configure one or more endpoints in ~/.config/lazyspeed/config.yaml:

metrics:
  endpoints:
    - url: "https://influx.example.com:8086"
      v2:
        token: "your-influx-token"
        org: "my-org"
        bucket: "speedtest"
  timeout: 10
  max_retries: 1

For InfluxDB v1, use a v1: block with database, optional username, and optional password instead. Exactly one of v1: or v2: must be set per endpoint.

Metrics writes fire after every successful speed test in both headless (lazyspeed run) and interactive (TUI) modes. Failures are logged as warnings and do not fail the test itself.

Comparison

Feature LazySpeed Ookla CLI fast-cli speedtest-go CLI
Interactive TUI Yes No No No
Headless CLI Yes Yes Yes Yes
Persistent history Yes No No No
JSON/CSV export Yes JSON only No JSON only
Network diagnostics Yes No No No
Configurable Yes (YAML) Limited No No
Single binary Yes Yes No (Node.js) Yes
Cross-platform macOS, Linux, Windows All All All
Open source MIT Proprietary MIT MIT

Contributing

See CONTRIBUTING.md for setup instructions, coding conventions, and PR guidelines.

License

MIT

About

A simple terminal-based internet speed test application built with Go and Bubble Tea

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors