hints / ua · opt-in

Sec-CH-UA-Platform-Version

Sec-CH-UA-Platform-Version reports the operating system version behind an Accept-CH opt-in, including the only reliable way to tell Windows 11 from Windows 10.

requires Accept-CH UA · opt-in
Example
Sec-CH-UA-Platform-Version: "14.0.0"
JavaScript
getHighEntropyValues(['platformVersion'])
Available since
Chrome 90 (2021)
Engines
Chrome Edge Opera Firefox Safari
References
MDN · Specification

Where Sec-CH-UA-Platform names the OS family, Sec-CH-UA-Platform-Version adds the version. It is the only honest source for it, because the frozen User-Agent string now lies (every Windows reports Windows NT 10.0, every macOS reports 10_15_7).

Accept-CH: Sec-CH-UA-Platform-Version

Sec-CH-UA-Platform-Version: "14.0.0"    # Android 14
Sec-CH-UA-Platform-Version: "15.0.0"    # Windows 11, see below

The Windows decoder ring

Windows is the famous quirk: the value is not the marketing version but a mapped number derived from the internal build:

Reported valueActual Windows
"0.1.0" / "0.2.0" / "0.3.0"Windows 7 / 8 / 8.1
"1.0.0""10.0.0"Windows 10 (by release wave)
"13.0.0" and aboveWindows 11

So the practical Windows 11 test is: platform is "Windows" and the major of platform-version is ≥ 13. This mapping is documented by Microsoft and Chromium rather than guessable, which is why it belongs on this page.

macOS, Android and ChromeOS report their real versions ("14.5.0" for macOS Sonoma 14.5, "14.0.0" for Android 14). Linux always reports an empty-ish or zero value, since desktop Linux does not expose a meaningful OS version.

Why request it

  • OS-conditional support matrices (“this feature needs Android 13+”).
  • Security analytics: traffic from end-of-life OS versions.
  • Replacing every Windows NT 10.0 regex that silently broke when the UA froze.

In JavaScript

const { platform, platformVersion } = await navigator.userAgentData
  .getHighEntropyValues(['platformVersion']);
if (platform === 'Windows' && parseInt(platformVersion) >= 13) {
  // Windows 11+
}