(
)\ ) ( ( ( * ) )
(()/( ( )\))( ' ( )\ ) ( ` ) /( ( ( /(
/(_)) ( ` ) ))\ ((_)()\ ) )\ (()/( )\ ( )(_)) ))\ ( )\())
(_))_ )\ /(/( /((_)_(())\_)()((_) /(_))((_)(_(_()) /((_))\ (_))/
| \ ((_)((_)_\ (_)) \ \((_)/ / (_)(_) _| (_)|_ _|(_)) ((_)| |_
| |) |/ _ \| '_ \)/ -_) \ \/\/ / | | | _| | | | | / -_)(_-<| _|
|___/ \___/| .__/ \___| \_/\_/ |_| |_| |_| |_| \___|/__/ \__|
|_|
A personal project I built for myself: a Wi-Fi/internet speed test with a terminal/ASCII look that I actually like. Made to be easy to run on mobile/desktop in the browser, and also from the terminal with a single command.
v1.0 measures latency and download only. Upload was removed to keep results consistent with the Worker-based backend.
- Terminal/ASCII UI (pure black & white, monospace)
- Live download progress (ASCII bar + Mbps)
- CLI scripts (Linux/macOS + Windows) with a one-liner
- 100% static frontend (deploy on Vercel, Netlify, Pages, etc.)
- Simple Cloudflare Worker backend (
/ping,/down)
Web:
- Open the site and run the test on the page.
CLI:
Linux / macOS:
curl -fsSL https://YOUR_DOMAIN/run | shJSON output:
curl -fsSL https://YOUR_DOMAIN/run | sh -s -- --jsonWindows (PowerShell):
irm https://YOUR_DOMAIN/run.ps1 | iexGoal: type dopewifitest and it runs the normal CLI test.
- Create a local bin folder:
mkdir -p ~/.local/bin- Create the command:
cat > ~/.local/bin/dopewifitest <<'EOF'
#!/usr/bin/env sh
curl -fsSL https://YOUR_DOMAIN/run | sh -s -- "$@"
EOF
chmod +x ~/.local/bin/dopewifitest- Ensure
~/.local/binis in your PATH:
For bash (~/.bashrc):
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrcFor zsh (~/.zshrc):
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrcNow you can run:
dopewifitestAnd JSON if supported by your script:
dopewifitest --json- Open your PowerShell profile (creates it if missing):
if (!(Test-Path $PROFILE)) { New-Item -Type File -Path $PROFILE -Force | Out-Null }
notepad $PROFILE- Paste this function into the profile file:
function dopewifitest {
param([Parameter(ValueFromRemainingArguments=$true)][string[]]$Args)
$code = irm https://YOUR_DOMAIN/run.ps1
$sb = [ScriptBlock]::Create($code)
& $sb @Args
}- Restart PowerShell (or reload the profile):
. $PROFILENow run:
dopewifitestIf your script supports JSON mode:
dopewifitest --jsonThe backend is a Cloudflare Worker exposing:
GET /ping-> 204 (latency measurement)GET /down?bytes=N-> streams N bytes (max 50 MB)
CORS is enabled and Cache-Control: no-store is set.
If you want to point the app to your own Worker:
- Set
VITE_SPEEDTEST_BASE_URL=https://your-worker.your-domain.workers.devin your host env vars (Vercel/Netlify) or a.envfile.
Web:
- Quick
/pingto verify the Worker is reachable - Ping: 10 requests to
/ping, median latency - Download: 1 warmup + 3 rounds, streaming
/down?bytes=N, live Mbps updates and final median/mean/peak
CLI:
- Ping:
curltiming against/ping - Download:
curl --write-out '%{speed_download}'against/down?bytes=N
This measures the speed between your device and the nearest Cloudflare edge where the Worker runs. It’s a solid proxy for your connection quality, but it won’t always match what your ISP advertises (routing and congestion matter).
- Frontend: Vite + React + TypeScript (no UI libs, plain CSS)
- Backend: Cloudflare Worker (
/ping,/down) - Deploy: any static host
MIT