User-Agent Client Hints and UA reduction
Chromium-based browsers send a reduced User-Agent string: the details that identified a device most precisely are frozen to fixed values, and the precise data moved to User-Agent Client Hints (UA-CH), which a site has to request. This guide parses a legacy Chrome on Android string next to a reduced one.
Worked example
Mozilla/5.0 (Linux; Android 12; SM-G991B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.88 Mobile Safari/537.36
- Browser
- Chrome 99.0.4844.88
- Engine
- Blink
- Operating system
- Android 12
- Device class
- Mobile
- Device
- Samsung SM-G991B
- CPU architecture
- Unknown
- Bot / crawler
- No
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36
- Browser
- Chrome 120.0.0.0
- Engine
- Blink
- Operating system
- Android 10
- Device class
- Mobile
- Device
- K
- CPU architecture
- Unknown
- Bot / crawler
- No
The legacy string exposes Android 12, the Samsung model SM-G991B and the full version 99.0.4844.88. In the reduced string, Android 10 and the model K are placeholders that every Android device sends, and the version ends in .0.0.0. The parser reports exactly what the string says β Android 10, model K β so only the major version 120 and the Mobile token still carry real information.
Sec-CH-UA: "Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120" Sec-CH-UA-Mobile: ?1 Sec-CH-UA-Platform: "Android" Accept-CH: Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List
Key rules
- Reduced Chrome strings keep only the major version; minor, build and patch are always 0.0.0.
- On Android, the OS version is fixed at 10 and the device model is replaced with K. On desktop, the platform is frozen to values such as Windows NT 10.0; Win64; x64, Macintosh; Intel Mac OS X 10_15_7 or X11; Linux x86_64.
- Over HTTPS, Chromium browsers send three low-entropy hints by default: Sec-CH-UA (brands and major versions), Sec-CH-UA-Mobile and Sec-CH-UA-Platform.
- Detailed hints such as Sec-CH-UA-Platform-Version, Sec-CH-UA-Model and Sec-CH-UA-Full-Version-List are sent only after the server asks for them in an Accept-CH response header. In JavaScript, use navigator.userAgentData.getHighEntropyValues().
- The brand list includes a deliberately fake "GREASE" entry such as "Not_A Brand". Look for the brand you need instead of comparing the whole header.
- Windows 11 still sends Windows NT 10.0 in the User-Agent string; a Sec-CH-UA-Platform-Version of 13.0.0 or higher identifies Windows 11.
- Client hints are a Chromium feature, so keep a User-Agent fallback for other browsers. This parser reads only the User-Agent string, not client hints.