Ping Monitor

Idle Press Start to begin probing. Looking up your public IP…

Round-trip time

Live log

Targets

A bare IP or hostname becomes https://<host>/. Targets must be https:// — this page is served over HTTPS, so the browser blocks plain http:// requests as mixed content no matter what the target allows.

How this measures things (and what it can't do)

These are HTTPS round trips, not ICMP pings

No browser can send an ICMP echo. There is no API for it and no workaround. Every sample here is a small HTTPS request issued from this device, timed with performance.now(). Nothing is measured on a server on your behalf and no result is proxied through an API — if this page says 14 ms, your machine took 14 ms.

In practice that is often the more useful number at work: corporate networks routinely block or deprioritise ICMP while HTTPS is what actually carries your traffic. But it is not the same measurement as ping(8), and it will read a few milliseconds higher because a TLS record and an HTTP response are involved.

"Loss" here means probe loss

A sample counts as lost when the request fails outright or exceeds the timeout. That covers real packet loss, DNS failure, TLS failure, and the target being down — it cannot distinguish between them the way ICMP loss can. Sustained loss to all targets is a strong internet-down signal; loss to one target usually means that target.

The first sample of each target is discarded

The first request to a host pays for DNS, TCP and the TLS handshake — roughly three extra round trips. That warm-up sample is logged but excluded from the statistics. Later samples reuse the kept-alive connection, so they sit close to true network RTT. An occasional isolated spike is usually the connection being re-established, not a network event.

Backgrounded tabs are throttled — gaps are drawn, never faked

Browsers clamp timers in hidden tabs, and after a few minutes Chrome drops them to roughly one per minute. Rather than reporting that as an outage, this page compares wall-clock time between ticks: any interval it could not actually sample is recorded as a gap, drawn as a hatched band on the chart, and excluded from the loss figures. Installing it as a desktop app and leaving the window visible avoids the throttling entirely.

Default targets

Don't judge a target by pasting its URL into a browser tab. The Cloudflare probe returns HTTP 400 if you open it by hand, because its DoH endpoint requires an Accept: application/dns-json header and the address bar doesn't send one. The monitor sends it on every probe, which is why those samples come back status=200. Trust the log rows over a manual visit — a probe that really returned 400 would show up as an amber reachable but HTTP 400 row, not a green one.

Adding your own IPs

Anything reachable over HTTPS works, including private addresses if this device can route to them. Two limits are the browser's, not this page's: plain http:// targets are blocked as mixed content, and a host with an untrusted or self-signed certificate fails the TLS handshake and will read as 100% loss. Targets that don't send CORS headers are probed in no-cors mode — the timing is still accurate, but the HTTP status code is invisible, so any completed exchange counts as reachable.

Your own public IP is offered as a target for convenience, but be aware most routers won't loop a connection back to their WAN address from inside the LAN, so it often reads as down even when everything is fine.