Diagnose why your network connection is slow
Project description
yslow
A command-line tool that diagnoses why your network connection is slow (or feels slow).
Instead of just reporting numbers, yslow isolates where the problem is — your local network (wifi/router), your ISP, or the broader internet — and tells you in plain language.
╻ ╻┏━┓╻ ┏━┓╻ ╻┏━┓
┗┳┛┗━┓┃ ┃ ┃┃╻┃ ╺┛
╹ ┗━┛┗━╸┗━┛┗┻┛ ╹
Is it slow?
● YES!
Why?
⚠ network no targets reachable (internet may be down) (1x, ongoing)
⚠ LAN gateway unreachable (unusual routing setup) (1x, ongoing)
⚠ WiFi very weak signal (too far from access point) (1x, ongoing)
Details
WiFi: -82 dBm (2.4 GHz), 6 Mbps TX, 6 Mbps RX
LAN: gateway 192.168.1.1 unreachable
ISP/internet: all targets unreachable
10.0.0.1: 3.0 ms cached, 45.0 ms uncached ✱
Google DNS: 25.0 ms cached, 60.0 ms uncached
OpenDNS: 35.0 ms cached, 42.0 ms uncached
Cloudflare DNS: 9.0 ms cached, 40.0 ms uncached
What it checks
- Gateway latency — how fast your machine can talk to your router. High latency or jitter here points to wifi congestion, a bad cable, or an overloaded router.
- Internet latency — TCP handshake time to multiple well-known servers (Cloudflare, Google, OpenDNS).
- DNS resolution — cached and uncached lookup times for your configured resolver and public resolvers (Google, Cloudflare, OpenDNS). Flags slow resolvers and compares your configured resolver against public alternatives.
- Packet loss — at both the local and internet level.
- Jitter — variance in latency, which causes buffering, choppy calls, and inconsistent page loads.
- Wifi Signal Strength — how strong your wifi signal is.
Usage
uvx yslow # one-shot check
uvx yslow -w # continuous monitoring (every 30s)
Requires Python 3.10+. Works on Linux and macOS.
How it works
See docs/
Development
uv sync # install deps
./check.sh # run all checks (format, lint, typecheck, tests)
uv run ruff check --fix # lint
uv run ruff format # format
Documentation
See docs/metrics.md for details on what yslow measures (RTT, packet loss, jitter, DNS), how each metric is calculated, and the thresholds used for diagnosis.
Planned
See TODO.md
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yslow-0.5.0.tar.gz.
File metadata
- Download URL: yslow-0.5.0.tar.gz
- Upload date:
- Size: 49.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a076fa8ca10c0dcd2f29715fbcea791dd01a611d7224c8bc66c1e6ea6acde8a2
|
|
| MD5 |
4e4b7a516c67f71c1e33d1108a645300
|
|
| BLAKE2b-256 |
3d10fdbad21511a09887a780241f642e8050131ccd2657b9a8fdf245a6898adb
|
File details
Details for the file yslow-0.5.0-py3-none-any.whl.
File metadata
- Download URL: yslow-0.5.0-py3-none-any.whl
- Upload date:
- Size: 18.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c726c09bf251008a56f231ae6c565c55bdfd1f9ac123dfcd304ee9e3d4be0b71
|
|
| MD5 |
38c224ef4ccb6eeda6e1b95439b67207
|
|
| BLAKE2b-256 |
112c1772e439cd9ea96a8886595b91331df502c6ca7f4bba069e94af7b6afa7e
|