Skip to main content

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

yslow-0.1.0.tar.gz (36.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yslow-0.1.0-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

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

Hashes for yslow-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ec5e447f0468568dbf77d45ec574c029dbb53a6781b43bae83a7dae7dc69e056
MD5 baced525c777a2f7d6b4d49a42fffcd7
BLAKE2b-256 860ed0deaa65f8a02d0648cc5586e523901ba3de1966989078d872d576653abe

See more details on using hashes here.

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

Hashes for yslow-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 084e84275d356c4a2fa17a3b4276a248bfc5b6d9f313cf875badcfc17ce05430
MD5 76974409ffa28f7a9d8c12a341ecf256
BLAKE2b-256 478f401b18c6b29e671f022909bd9e077e5124855d2540fb30f8c04e67332d70

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page