← Chrome 147 reference

v147 · device memory api · privacy · shipped

Update Device Memory API limits

Limited availability

  • Chrome · API since 63; these buckets since 147
  • Edge · mirrors Chrome
  • Firefox · never shipped
  • Safari · never shipped (negative position)

The host device-memory web-feature is Baseline limited (queried 2026-09-20) — Chromium-only. The bucket change itself is recorded in BCD api/Navigator.json as version notes on deviceMemory (“From Chrome 147, reported values are 2, 4, 8, 16, and 32”, verified 2026-09-20). See the full table.

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 inChrome 147 (desktop, Android, WebView) — filed under “Enabled by default” in the milestone=147 listing
StatusEnabled by default; rolled out via the Finch flag below
Finch flagkUpdatedDeviceMemoryLimitsFor2026 (from the ChromeStatus API record)
Spec changew3c/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 Shipblink-dev thread (also archived as mail-archive msg15601)
ChromeStatus6330376953921536 — 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.

Source: Device Memory spec (TR); w3c/device-memory PR #53

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:

PlatformBefore Chrome 147Chrome 147+
Android0.25, 0.5, 1, 2, 4, 81, 2, 4, 8
Desktop (Windows, Mac, Linux)0.25, 0.5, 1, 2, 4, 82, 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
Live example from the Chrome Platform Showcase (route HEAD-checked 200, 2026-09-20). Sibling concept demos: adaptive loading, quality tier picker, memory budget optimizer, and compatibility lab.Source: chrome-platform-showcase
Source: bucket values per the Intent to Ship; snippet gendn-derived (labelled accordingly)

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:

Browsernavigator.deviceMemoryNotes
Chrome63BCD: “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)
EdgeMirrors ChromeBCD "edge": "mirror"
FirefoxNever shippedView: No signal (mozilla.dev.platform thread)
SafariNever shippedPosition: 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.

Source: BCD api/Navigator.json; ChromeStatus API record; webstatus.dev

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.

Source: Device Memory spec; w3c/device-memory PR #53; Client Hints Infrastructure §7.2 (delegation and ch-device-memory) (checked 2026-10-08)

see also