v152 · performance · device
CPU Performance API
A new navigator.cpuPerformance attribute that exposes a bucketed, privacy-safe signal about the device's CPU performance tier — letting web applications adapt their rendering quality, workload parallelism, and feature set to the actual hardware without fingerprinting individual machines.
at a glance
| Shipped in | Chrome 152 (Enabled by default) |
|---|---|
| Status | Enabled by default |
| Flag | None — on by default |
| Spec | wicg.github.io/cpu-performance (WICG) |
| Standards position (Firefox) | No signal (Mozilla standards position #1364) |
| Standards position (Safari) | Oppose (WebKit standards position #622) |
| ChromeStatus | 5189864286978048 — CPU Performance API (API record) |
why it exists
Web applications — especially WebGL/WebGPU games, video editors, and complex data-visualization dashboards — often need to tailor their workload to the device. Today, developers are forced to approximate CPU power by measuring the time taken to run synthetic microbenchmarks, which is slow, unreliable, and a fingerprinting vector in itself.
The CPU Performance API surfaces a coarsened bucket rather than precise clock speed or core counts, deliberately preventing individual device identification while still allowing the application to pick an appropriate quality preset. The API is specifically scoped to use cases like "should I enable 4× supersampling or 1×?" or "how many Web Workers should I spin up for this task?"
Historical shape note: this page's earlier draft recorded a nested floating-point shape (navigator.cpu.normalizedPerformance, 0.0–1.0). That shape is unverified against any surviving public source — neither the WICG specification nor the explainer (both fetched 2026-10-07) contains it. As verified against the normative WICG specification and explainer on 2026-10-07, the standardized shipped API surface is the navigator.cpuPerformance integer attribute.
Syntax
Web IDL definition from the WICG CPU Performance specification extending Navigator:
[
SecureContext,
Exposed=Window
] partial interface Navigator {
readonly attribute unsigned short cpuPerformance;
};
Source: WICG CPU Performance specification §idl
shape of the API
| Property | Type | Description |
|---|---|---|
navigator.cpuPerformance | unsigned short (0–4) | Coarsened performance tier where 1 represents entry-level hardware and 4 represents high-end hardware; 0 indicates an undetermined tier |
The exact tier mapping is defined by the user agent based on platform heuristics. Higher integer values represent higher performance tiers, and forward-compatible applications should anticipate additional tiers (such as tier 5) in the future.
Source: WICG CPU Performance explainerInputs and parameters
The cpuPerformance attribute is a read-only property with no parameter inputs. It cannot be mutated by script. System administrators can override the reported tier enterprise-wide via the CpuPerformanceTierOverride enterprise policy, which supersedes the user setting.
Outputs and return values
Returns an unsigned short integer. Values 1 through 4 map to coarse device capability tiers: 1 denotes severely constrained devices, 2 denotes low-tier devices, 3 denotes typical desktop and mobile devices capable of multi-tasking, and 4 denotes high-performance workstations and gaming rigs. The value 0 indicates that the browser is unable to classify the device.
Errors and exceptions
Reading navigator.cpuPerformance does not raise exceptions when accessed in a valid SecureContext Window environment. If accessed on a non-Window context or on an object that does not implement Navigator, standard Web IDL binding checks throw a TypeError: Illegal invocation.
Execution context and exposure
The attribute is restricted by [SecureContext, Exposed=Window]. It is accessible only in secure origin (HTTPS or localhost) Window documents. It is explicitly not exposed to Web Workers, Service Workers, or insecure HTTP contexts, preventing silent background worker profiling.
Lifecycle and state transitions
The device CPU performance tier is resolved by the browser process at browser startup or profile initialization. The returned integer remains static throughout the lifetime of the document session, ensuring stable application configuration without fluctuating between frames.
Source: WICG CPU Performance explainerExamples
// Adjust rendering quality based on CPU performance tier (1–4, 0 = unknown)
const tier = navigator.cpuPerformance;
switch (tier) {
case 4:
// High-end workstation: enable full fidelity effects and high frame rate
initRenderer({ shadows: true, msaa: 4, targetFps: 60, workerCount: 8 });
break;
case 3:
// Capable device: standard high-definition quality
initRenderer({ shadows: true, msaa: 2, targetFps: 30, workerCount: 4 });
break;
case 2:
// Underpowered device: lower quality to preserve interactivity
initRenderer({ shadows: false, msaa: 0, targetFps: 30, workerCount: 2 });
break;
case 1:
// Constrained device: minimal visual overhead
initRenderer({ shadows: false, msaa: 0, targetFps: 15, workerCount: 1 });
break;
case 0:
default:
// Unknown tier or unsupported browser: apply conservative default settings
initRenderer({ shadows: false, msaa: 0, targetFps: 30, workerCount: 2 });
break;
}
Supplementary live example: the Chrome Platform Showcase device-tier readout lets you reread the coarse tier and run a benchmark. Both controls responded in Chrome 154 (2026-10-08); the benchmark is a comparison, not the definition of the reported tier. It is an optional companion, not a conformance test of the API.
Source: WICG CPU Performance explainer §Proposed Approach; blink-dev Intent to Ship; supplementary interactive example: Chrome Platform Showcase device-tier readoutBrowser compatibility
| Browser | Support | Notes |
|---|---|---|
| Chrome 152+ | Enabled by default | All desktop and Android platforms (Chromium issue 449760252) |
| Firefox | No signal | Standards position issue #1364 |
| Safari | Oppose | WebKit position #622 citing fingerprinting surface |
Security and privacy considerations
The API is designed specifically to mitigate device fingerprinting by exposing only four broad integer tiers rather than fine-grained CPU frequency, cache sizes, or core architecture details. It is constrained to Secure Contexts, is not exposed to Web Workers, and offers explicit user settings and enterprise policy overrides.
Source: WICG CPU Performance explainer §Security and Privacysee also
- Chrome Platform Status — CPU Performance API
- ChromeStatus API record (5189864286978048)
- WICG CPU Performance specification
- WICG CPU Performance repository & explainer
- Chromium Issue 449760252
- blink-dev Intent to Ship — CPU Performance API
- Mozilla Standards Position #1364
- WebKit Standards Position #622
- Chrome Enterprise Policy: CpuPerformanceTierOverride
- MDN Web Docs — Navigator