Privacy

This site measures how fast your device draws frames and shares the numbers, anonymously, so framebudget's scores and thresholds can be calibrated on real devices instead of one desktop. Nothing here identifies you, and you can say no.

Your choice in this browser

What is collected

One report per page view, sent by the browser to /api/report on this site. It holds only these numbers and names:

FieldWhat it is
Calibration versionWhich set of reference numbers the scores were computed with.
ScoresThe device score (100 is the reference phone), and the cold and warm benchmark scores, rounded to whole numbers.
Kernel ratesHow much work each of the four benchmark kernels did per millisecond, to 3 significant digits.
Clock resolutionThe precision of the page's timer, in milliseconds.
Hardware hintsThe number of logical cores and the rounded memory size the browser reports, the Compute Pressure state when available, and whether reduced motion is on.
DecisionThe tier, the effects that ran, and the effects framebudget stepped down because frames were late.
Frame ratesThe median frames per second of the page and of each effect that reported frames, whole numbers.

The server adds a few coarse fields from the request and then discards the request headers:

FieldWhat it is
Browser engineThe engine family (Blink, Gecko or WebKit) and its major version, for example Blink 140.
Operating systemThe family only: Android, iOS, Windows, macOS, Linux, ChromeOS or other.
Form factorMobile or desktop.
CountryThe two-letter country code Cloudflare assigns to the request.
DayThe date the report arrived, in UTC, without the time of day.

What is not collected

  • No IP address. Your browser sends it with every request, as it does to any site, but it is not stored.
  • No user agent string, only the engine, its major version and the operating system family derived from it.
  • No cookies, no identifiers, no fingerprint, nothing that links one visit to another.
  • No page addresses, referrers or search terms, and no time of day.
  • No analytics or advertising scripts. The report goes to this site only.

When it is sent

  • Once per page view, as one navigator.sendBeacon request when the page is hidden or closed, after it has loaded.
  • Never when Global Privacy Control or Save-Data is on. Both are checked again right before sending.
  • Never while a device is simulated or a tier is forced, since those numbers would not describe your device.
  • Never after you choose Don't share, here or on the notice at the bottom of the home page. The choice is kept in this browser's localStorage.

The site also fetches /api/calibration at most once a day, without cookies, to use updated reference numbers on your next visit. It follows the same rules.

Storage and retention

Reports are stored in a Cloudflare D1 database, behind the Cloudflare Worker that serves this site. A daily job deletes every report older than 400 days. The reports are used only to calibrate framebudget: reference rates, thresholds and the score scale. Only aggregated numbers, such as medians and percentiles, are ever published.

On your device

framebudget keeps one localStorage entry per site with the cached score and the effects that stuttered, so the next visit starts with the right effects. The site also remembers your sound and sharing choices. None of this leaves your device.

Contact

Questions, or a request about this data: privacy@framebudget.dev. Since reports carry no identifiers, there is no way to find the reports of one visitor, so none can be shown or deleted individually.