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)
Details
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.
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
yslow uses TCP handshake timing rather than ICMP ping. A TCP connect to port 443 measures the same network round-trip as ping, but works without root privileges and inside containers where ICMP is often blocked.
For the gateway, it tries common TCP ports (80, 443, 53, 22) and falls back to ICMP ping if needed.
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
- Bufferbloat detection (latency under load)
- Bandwidth / throughput estimation
- IPv6 health check
- Route analysis (where along the path is the bottleneck)
See TODO.md for more
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.3.1.tar.gz.
File metadata
- Download URL: yslow-0.3.1.tar.gz
- Upload date:
- Size: 44.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 |
81892c54a6bdf1c37b1df3549aceaf5336c8ddfcdb07ded49796fa489d92138c
|
|
| MD5 |
f6899a932c52986693b2d9341fbd55ce
|
|
| BLAKE2b-256 |
52235913db56f69355150735ee48c73acdc1e3c15727a6c62bfe8f51293568eb
|
File details
Details for the file yslow-0.3.1-py3-none-any.whl.
File metadata
- Download URL: yslow-0.3.1-py3-none-any.whl
- Upload date:
- Size: 16.8 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 |
8b5a05be08c304d2dc8b1f256aeb66086bf5198bf3a70a373685f19e7368cd39
|
|
| MD5 |
df9dcf2aaa4deeeaeea2518829c6e674
|
|
| BLAKE2b-256 |
b40cd92d3de647f144ca48aacc8e425514a5d8f3203917a123ef2eca6493f7c3
|