VPN Speed Test
This VPN speed test times latency, jitter, bufferbloat, download and upload from your browser, so you can run it with the tunnel off and on and see exactly what the VPN costs.
Timed with performance.now() in this tab against vpn.pwnsy.com or speed.cloudflare.com. Upload payloads are random bytes and nothing is stored server side. Keep the tab in the foreground while it runs.
No run yet
Run once with the tunnel off, once on, then open Compare runs. A full run moves up to about 13 MB down and 5 MB up.
No runs to compare yet
Runs from this tab land here, compared against a baseline you pick.
How the VPN speed test works
The test measures one path, now: this browser to one server. It sends 12 pings and reports the minimum, median, 90th percentile and mean. A full run then downloads 256 KB, 1 MB, 4 MB and 8 MB and uploads 1 MB and 4 MB of random bytes. The first transfer in each direction is discarded, because it includes the handshake and TCP slow start, and the larger steps stop once one transfer takes longer than 12 seconds.
While the 4 MB and 8 MB downloads run, the page keeps pinging the server with a 200 ms pause between pings. Those pings are the under load figures. Choose pwnsy in Helsinki for a long path, or Cloudflare's nearest edge for your local ceiling; with Cloudflare the page also reads the edge location code and whether WARP is on.
How to read the result
- Median latency is the middle of the 12 idle pings. Geography dominates it, so compare tunnel off and on against the same server.
- Jitter is the mean change between consecutive pings. Above 12 ms reads amber and above 30 ms red; a median above 250 ms also reads amber.
- Under load is the median ping during the download minus the idle median. That added delay is bufferbloat: up to 30 ms good, up to 100 ms fair, above that poor.
- Download and upload are the best rate after the warm-up transfer. 25 Mbps or more reads green, 6 Mbps or more amber, below that red.
- Compare runs shows each run as a percentage change from the baseline you pick. Green is better.
Healthy latency (120 ms or less) with download under 6 Mbps usually means full-size packets no longer fit once the tunnel adds headers, which the MTU finder pins down.
VPN speed test FAQ
How do I measure what my VPN costs in speed?
Run the test once with the tunnel off and once with it on, against the same server, and label each run. Compare runs puts them side by side and shows each one as a percentage change from the baseline you pick.
Which server should I test against?
Cloudflare's nearest edge shows your local ceiling. pwnsy in Helsinki shows a long path. Geography dominates latency, so compare tunnel off and on against the same server.
How is bufferbloat measured?
While the 4 MB and 8 MB downloads run, the page keeps pinging the server with a 200 ms pause between pings. The median of those pings minus the idle median is the added delay. Up to 30 ms is good, up to 100 ms fair, above that poor.
Why is the first transfer discarded?
The first transfer includes the connection handshake and TCP slow start, so it understates the rate. The reported download and upload are the best of the transfers after it.
Are my results stored anywhere?
Runs stay in this tab only and are gone when you reload. Nothing is stored server side. The page remembers your chosen server, test and label in this browser so the form is ready next time.
Timed with performance.now() against vpn.pwnsy.com in Helsinki or speed.cloudflare.com. Nothing is stored server side.