documentation

Methodology hub

Bufferbloat.org is designed to be inspectable. This is the trust layer: how the browser test runs, what is scored, why the scorecard uses median ping and p95 latency spread, what can be exported, and where the limits are.

Run the bufferbloat testThen use this page to inspect how the result was produced.
test flow

How the browser test runs

Warm-up, quiet-line ping, download load, upload load, and result computation.

Jump to test flow
reference point

Why median ping is used

The scorecard uses the middle of the measured samples so one odd browser hiccup does not become the whole story.

Read median guide
upper delay

Why p95 latency spread is used

The test looks at repeated high-delay behavior instead of showing a vague jitter number or one worst ping.

Read spread guide
export

How to inspect and export your data

The result page includes a technical drawer and CSV export so the measurement can be reviewed outside the website.

Read export guide
field reference

Technical-detail export fields

Stable variable names, value types, and definitions for the CSV export and technical table.

Jump to fields
limits

Limits and privacy

What a browser test can and cannot promise, what is retained, and what the export deliberately excludes.

Jump to limits
phase 1

Warm-up

Small preflight ping, download, upload, and quiet-line ping requests prepare the browser path. These samples are excluded from final medians.

phase 2

Quiet latency

The test first warms the quiet ping path, then samples baseline latency before adding download or upload pressure.

phase 3

Download load

The browser creates download pressure with parallel streams and keeps probing latency during a short unscored settling period before recording the scored samples.

phase 4

Upload load

The browser sends repeated upload chunks, keeps probing during the unscored ramp period, then records latency while upload pressure is established.

phase 5

Result computation

The scorecard compares quiet latency with loaded latency, draws the final trace, and exposes the technical record behind the result.

Measurement method

The browser test uses median-style reporting, a Cloudflare Speed latency probe, a 100 MB download payload repeated across four streams, and repeated 1 MB upload chunks across three streams. The result grade is primarily about latency stability under load; low throughput is reported separately and is not automatically treated as bufferbloat. Latency spread is computed from the scored latency samples as 95th percentile ping minus median ping for each phase. It remains visible as a diagnostic tail-latency signal. Application performance uses a more robust upper-tail estimate when sample counts are small, so one or two isolated spikes can be shown without dominating the rating.

The running test asks the tab to stay in the foreground. If the tab is hidden, the run stops instead of producing a result from throttled or paused browser activity.

What the scorecard exposes

Results show quiet latency, download stress, upload stress, download throughput, upload throughput, and test duration. The completed chart uses orange for quiet-line samples, blue for download-loaded samples, purple for upload-loaded samples, and highlighted median ping dots for the final comparison.

The technical-details drawer contains the structured measurement record used by the scorecard: phase medians, stress deltas, p95 latency spread, robust application-tail estimates, throughput estimates, scored sample counts, raw scored latency sample lists, sample ranges, method notes, and application-performance scoring. The same record can be exported as CSV for review.

Technical-detail export fields

The result page exposes a technical-details drawer and CSV export. The scorecard keeps the table compact, while this section documents what each exported variable means. The CSV export uses stable variable names and raw values so the record can be reviewed in a spreadsheet or cited in a technical report. For the user-facing explanation, read how to inspect and export your test data.

VariableValue typeDescription
gradeA+ through FOverall bufferbloat grade computed from quiet latency, loaded latency, and latency movement under download/upload load.
measured_atISO timestampBrowser-side completion time for the run. This is the time attached to the exported scorecard.
test_durationseconds or m:ssElapsed time from measurement start through result computation, displayed in the same compact format as the scorecard.
quiet_latency_samples_mscomma-separated millisecondsRaw scored latency / ping samples collected during the quiet phase before intentional load is applied.
download_latency_samples_mscomma-separated millisecondsRaw scored latency / ping samples collected while download load is active, after the settling interval is excluded.
upload_latency_samples_mscomma-separated millisecondsRaw scored latency / ping samples collected while upload load is active, after the settling interval is excluded.
quiet_median_latency_msmillisecondsMedian latency / ping before intentional download or upload traffic is applied.
download_loaded_latency_msmillisecondsMedian latency / ping while the download load phase is active, after the settling interval is excluded.
upload_loaded_latency_msmillisecondsMedian latency / ping while the upload load phase is active, after the settling interval is excluded.
download_stress_msmillisecondsDownload-loaded median latency minus quiet median latency. Positive values mean added delay under download pressure.
upload_stress_msmillisecondsUpload-loaded median latency minus quiet median latency. Positive values mean added delay under upload pressure.
worst_loaded_latency_msmillisecondsHigher of the download-loaded and upload-loaded median latency values.
quiet_latency_spread_msmilliseconds95th percentile scored latency / ping minus the median during the quiet phase. This shows the upper-end spread of normal ping before intentional load.
download_latency_spread_msmilliseconds95th percentile scored latency / ping minus the median during download load. This is shown as a diagnostic tail-latency signal.
upload_latency_spread_msmilliseconds95th percentile scored latency / ping minus the median during upload load. This is shown as a diagnostic tail-latency signal.
quiet_application_tail_msmillisecondsRobust quiet-line upper-tail estimate used for application-fit scoring. For small sample counts, this leans closer to p90-style spread so isolated spikes do not dominate the rating.
download_application_tail_msmillisecondsRobust download-load upper-tail estimate used for application-fit scoring. The visible p95 spread remains available as a diagnostic metric.
upload_application_tail_msmillisecondsRobust upload-load upper-tail estimate used for application-fit scoring. The visible p95 spread remains available as a diagnostic metric.
download_throughput_mbpsMbpsEstimated downstream throughput measured during the download load phase.
upload_throughput_mbpsMbpsEstimated upstream throughput measured during the upload load phase.
quiet_scored_samplescountNumber of quiet latency samples included in the displayed median and score calculation.
download_scored_samplescountNumber of download-loaded latency samples included after warm-up and settling exclusions.
upload_scored_samplescountNumber of upload-loaded latency samples included after warm-up and settling exclusions.
total_scored_latency_samplescountTotal quiet, download-loaded, and upload-loaded latency samples used for the displayed medians and grade.
latency_probeendpoint nameLatency probe endpoint used for small ping-like browser requests during the test.
download_stream_countstreamsNumber of parallel browser download requests used to create downstream load.
download_payload_size_mbMBSize of the payload file requested by each download stream.
upload_stream_countstreamsNumber of parallel browser upload requests used to create upstream load.
upload_chunk_size_mbMBSize of the repeated upload payload chunk sent by each upload stream.
warm_upinclusion ruleIndicates that session warm-up and quiet-line ping warm-up requests are excluded from the scored medians.
quiet_warmup_period_secsecondsUnscored quiet-line latency probe interval excluded before baseline latency samples are recorded.
settling_period_secsecondsInitial interval excluded from loaded phases so throughput and latency are scored after load begins to stabilize.
web_browsing_score0-100 scoreApplication-fit score for web browsing, derived from loaded latency, latency movement, and a light robust-tail adjustment.
video_streaming_score0-100 scoreApplication-fit score for video streaming, weighted more heavily toward download throughput with some latency-stability adjustment.
audio_calls_score0-100 scoreApplication-fit score for audio calls, derived from baseline latency, latency movement, robust tail latency, and minimum upload capacity.
video_calls_score0-100 scoreApplication-fit score for video calls, derived from baseline latency, latency movement, robust tail latency, download throughput, and upload throughput.
low_latency_games_score0-100 scoreApplication-fit score for low-latency games, weighted toward low baseline latency, low added latency under load, and robust tail latency.
cloud_backup_score0-100 scoreApplication-fit score for cloud backup, weighted toward upload throughput with a latency-stability adjustment.
export_contentsprivacy statementStates that the CSV export contains measurement data only and excludes IP address, location, browser fingerprint, and device identity.

Limits and privacy

Browser networking tests are useful but noisy. Results can be affected by browser scheduling, device load, Wi-Fi conditions, VPNs, background apps, router queues, ISP congestion, and mobile network variability.

The technical export contains measurement data only. It does not include IP address, location, browser fingerprint, user-agent string, or device identity.

Bufferbloat.org records first-party operational analytics for test quality and shared result links: session/test events, success or failure, coarse location from hosting headers, broad browser/OS/device category, bucketed viewport, measured results, chart samples, and application-fit scores. It does not store IP addresses, precise geolocation, full user-agent strings, or fingerprinting signals.

Shared result pages are backed by the same completed-test analytics record; they do not create a second copy of the result. Analytics and shared result records are retained for up to 180 days and are deleted automatically after that window.