v147 · device memory api · privacy · shipped
Update Device Memory API limits
Chrome 147 updates the memory buckets reported by the Device Memory API (navigator.deviceMemory and the Device-Memory client hint), expanding the upper range on desktop and removing low-end Android buckets to better reflect today's device landscape. Ships in Chrome 147 on all platforms.
at a glance
| Shipped in | Chrome 147 (desktop, Android, WebView) — filed under “Enabled by default” in the milestone=147 listing |
|---|---|
| Status | Enabled by default; rolled out via the Finch flag below |
| Finch flag | kUpdatedDeviceMemoryLimitsFor2026 (from the ChromeStatus API record) |
| Spec change | w3c/device-memory PR #53 (merged 2026-01-19) — bounds are now implementation-defined and may differ per device type, replacing the fixed 0.25–8 GiB recommendation of the Device Memory specification |
| Intent to Ship | blink-dev thread (also archived as mail-archive msg15601) |
| ChromeStatus | 6330376953921536 — Update Device Memory API limits |
syntax
The two surfaces whose reported values change — the JavaScript getter and the client-hint header — keep their existing syntax from the Device Memory specification:
// JavaScript (Window and Worker contexts, secure contexts only)
partial interface mixin NavigatorDeviceMemory {
readonly attribute double deviceMemory;
};
// HTTP client hint (ABNF, quoted from the spec)
Sec-CH-Device-Memory = sf-decimal
A reported value is the device’s RAM rounded to the nearest power of two (in MiB, then divided by 1024 to yield GiB), clamped to an upper and a lower bound. Per PR #53 those bounds are implementation-defined, “may differ on different device types”, and exist so the range “exclude[s] rare device memory values to mitigate” fingerprinting (spec wording). Chrome 147’s new bounds are the table below; the legacy Device-Memory header (see MDN) reports the same bucketed value where still enabled.
what changed
The Device Memory API reports RAM in privacy-preserving buckets rather than the exact amount. Chrome 147 updates these buckets to reflect current hardware in 2026:
| Platform | Before Chrome 147 | Chrome 147+ |
|---|---|---|
| Android | 0.25, 0.5, 1, 2, 4, 8 | 1, 2, 4, 8 |
| Desktop (Windows, Mac, Linux) | 0.25, 0.5, 1, 2, 4, 8 | 2, 4, 8, 16, 32 |
The low-end buckets (0.25 GB and 0.5 GB) are removed on Android — virtually no current Android device ships with less than 1 GB RAM. The upper range on desktop expands to 16 GB and 32 GB to accommodate high-end workstations.
Source: blink-dev Intent to Ship: Update Device Memory API limits (archived as mail-archive msg15601); Chrome-147 rows confirmed by BCD version notes.reading device memory
// navigator.deviceMemory returns one of the new bucket values
console.log(navigator.deviceMemory);
// Android: 1, 2, 4, or 8
// Desktop: 2, 4, 8, 16, or 32
// Code that relied on values below 1 will never match on Android in Chrome 147+
if (navigator.deviceMemory < 1) {
// This branch is now unreachable on Android
showLowMemoryMode();
}
Client Hint HTTP exchange (a specification example, not a captured Chrome request): the server opts in on a response, and a compatible browser can send a bucket on a subsequent request.
# Server response
Accept-CH: Sec-CH-Device-Memory
# Subsequent browser request, as illustrated by the Device Memory specification
GET /example HTTP/1.1
Sec-CH-Device-Memory: 8
Source: Device Memory specification §3.1, Client Hint examples (the spec’s own illustrative 8, checked 2026-10-08); the server response and subsequent request are separate HTTP messages
browser compatibility
Per-version data for navigator.deviceMemory from BCD api/Navigator.json (verified 2026-09-20), which records this bucket change directly in its version notes:
| Browser | navigator.deviceMemory | Notes |
|---|---|---|
| Chrome | 63 | BCD: “From Chrome 147, reported values are 2, 4, 8, 16, and 32. Before Chrome 147, reported values were 0.25, 0.5, 1, 2, 4, and 8” (desktop; Android drops the sub-1 GB buckets per the Intent to Ship) |
| Edge | Mirrors Chrome | BCD "edge": "mirror" |
| Firefox | Never shipped | View: No signal (mozilla.dev.platform thread) |
| Safari | Never shipped | Position: Negative (w3c/device-memory #24) |
Baseline: limited availability per the device-memory web-feature on webstatus.dev (queried 2026-09-20). Treat the API as a Chromium-only progressive enhancement.
security and privacy
Bucketing exists precisely for privacy: the Device Memory specification requires the reported value to be rounded and bounded so the range “exclude[s] rare device memory values”, mitigating fingerprinting; the API and the Sec-CH-Device-Memory hint are limited to secure contexts, and the hint is opt-in via Accept-CH, with cross-origin delivery controlled by the ch-device-memory Permissions Policy feature (default allowlist self) in Client Hints Infrastructure. Chrome 147’s change reduces entropy on Android (four buckets instead of six) and adds two high-end desktop buckets (16, 32); the bounds remain implementation-defined per PR #53 so they can track the device landscape without spec churn.
ch-device-memory) (checked 2026-10-08)
see also
- MDN: Navigator.deviceMemory
- MDN: Device-Memory header (URL updated to MDN’s new layout, 2026-09-20)
- Device Memory specification (W3C) · PR #53 — implementation-defined bounds (merged 2026-01-19)
- chrome-platform-showcase: Device Memory demos (five concepts, route 200)
- ChromeStatus — Update Device Memory API limits (6330376953921536)
- blink-dev Intent to Ship — Update Device Memory API limits