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.
- 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 value | Actual 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 above | Windows 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.0regex 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+
}