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.
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).
- Packet loss — at both the local and internet level.
- Jitter — variance in latency, which causes buffering, choppy calls, and inconsistent page loads.
By comparing gateway vs internet results, yslow isolates the problem:
| Gateway | Internet | Diagnosis |
|---|---|---|
| Fast | Fast | Connection is healthy |
| Slow | Slow | Local network is the bottleneck (router/wifi) |
| Fast | Slow | ISP or internet routing issue |
| Unreachable | Slow | Unusual setup, but internet works |
Usage
uv run yslow
Requires Python 3.10+ and Linux. No dependencies beyond the standard library.
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) and falls back to ICMP ping if needed.
Development
uv sync # install deps
./check.sh # run all checks (format, lint, typecheck, tests)
uv run pytest # run tests only
uv run ty check # type check only
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), how each metric is calculated, and the thresholds used for diagnosis.
Planned
- DNS resolution timing
- Bandwidth / throughput estimation
- Bufferbloat detection (latency under load)
- Route analysis (where along the path is the bottleneck)
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.1.0.tar.gz.
File metadata
- Download URL: yslow-0.1.0.tar.gz
- Upload date:
- Size: 36.2 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 |
ec5e447f0468568dbf77d45ec574c029dbb53a6781b43bae83a7dae7dc69e056
|
|
| MD5 |
baced525c777a2f7d6b4d49a42fffcd7
|
|
| BLAKE2b-256 |
860ed0deaa65f8a02d0648cc5586e523901ba3de1966989078d872d576653abe
|
File details
Details for the file yslow-0.1.0-py3-none-any.whl.
File metadata
- Download URL: yslow-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.4 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 |
084e84275d356c4a2fa17a3b4276a248bfc5b6d9f313cf875badcfc17ce05430
|
|
| MD5 |
76974409ffa28f7a9d8c12a341ecf256
|
|
| BLAKE2b-256 |
478f401b18c6b29e671f022909bd9e077e5124855d2540fb30f8c04e67332d70
|