v0.1.1 · linux amd64 arm64 · ● READY

# A speed test for your terminal.

# velo measures latency, download, upload, and bufferbloat against the nearest speedtest.net server. It shows each phase live, in the colors of your Omarchy theme.

~ ❯ curl -fsSL https://raw.githubusercontent.com/bjarneo/velo/main/install.sh | sh
velo: download velo_0.1.1_linux_amd64.tar.gz
velo: installed 0.1.1 to /home/you/.local/bin/velo
velo: run velo to start a test

# Add velo to the Omarchy launcher. Then press Super + Space and type velo.

~ ❯ omarchy-tui-install velo velo tile https://raw.githubusercontent.com/bjarneo/velo/main/assets/icon.png

# Run a test. A test takes about 20 seconds.

~ ❯ velo --private
RECORDING foot on Omarchy · real Wi-Fi
velo: session closed · last run ↓ 495.8 ↑ 495.6 Mbps · 4.0 ms · C

# --private masks the IP address. Use it when you share a screenshot or a recording.

# One key per action. Press the keys on this page: it answers like velo.

KEYS click or press
SCREEN real run velo after a finished test: download 495.8 Mbps, upload 495.6 Mbps, grade C
⏎ runs the test. This run used Wi-Fi in foot on Omarchy.

# Six flags. velo starts a test without any.

~ ❯ velo --help
usage: velo [flags]

  -demo
    	simulate the network instead of testing it
  -no-autostart
    	wait for ⏎ instead of starting a test
  -private
    	mask the client IP address, for screenshots and recordings
  -server string
    	use the speedtest.net server with this id, as the server list shows it
  -theme string
    	start with this theme, for example "nord"
  -version
    	print the version and exit

themes: omarchy, tokyo-night, catppuccin, gruvbox, nord, everforest, kanagawa, rosé-pine, matte-black

# Not on Linux amd64 or arm64? Install with Go 1.26 or later.

~ ❯ go install github.com/bjarneo/velo@latest

# How velo measures. Each value has a documented method.

~ ❯ less docs/measurement.md
SEQUENCE the run in the recording
  1. 01LATENCY4.0 ms ✓

    24 HTTP probes on one warm connection. Ping is the mean time. Jitter is the mean change between 2 probes.

  2. 02DOWNLOAD495.8 Mbps ✓

    16 streams for 8 seconds. velo counts the bytes that it reads and takes a sample every 50 ms.

  3. 03UPLOAD495.6 Mbps ✓

    16 streams for 7 seconds. On Linux, velo counts only the bytes that the server acknowledged.

  4. 04ANALYZEgrade C ✓

    A latency probe every 250 ms under load. Bufferbloat is the loaded latency minus the idle latency.

GRADE bufferbloat
bufferbloatgrade
less than 5 msA+
less than 30 msA
less than 60 msB
less than 200 msC
200 ms or moreD

This run: +74.7 ms on Wi-Fi.

# Read the full method, the endpoints, and the limits in docs/measurement.md.

# velo saves each run as one JSON line. Scripts and agents can read it.

~ ❯ tail -n 1 ~/.local/share/velo/history.jsonl | jq
{
  "id": 2,
  "time": "2026-10-27T18:31:48+01:00",
  "server": "Lyse Tele AS · Oslo",
  "host": "ulvspeedtestben1.altibox.net:8080",
  "ping_ms": 3.96,
  "jitter_ms": 0.32,
  "down_mbps": 495.84,
  "up_mbps": 495.56,
  "bloat_ms": 74.69,
  "loss_pct": 0,
  "grade": "C",
  "data_mb": 945.34
}

# Coding agents: AGENTS.md tells you how to install velo and how to read this file.

# velo 0.1.1 runs on Linux amd64 and arm64. It is written in Go with Bubble Tea.

~ ❯