v145 · Web APIs · Privacy

Reduced User-Agent strings by default

Chrome 145 completes the rollout of reduced User-Agent strings — the User-Agent HTTP header and navigator.userAgent now return a frozen, minimal string by default, with detailed signals available only via the User-Agent Client Hints API.

background

The traditional User-Agent string exposes browser name, major version, OS, OS version, device model, and more — a rich fingerprinting surface. Chrome has progressively reduced this by freezing the minor/patch version and removing device model detail.

With Chrome 145, the default User-Agent string is fully reduced: it contains only the browser name, major version, and "frozen" OS/platform tokens. Granular signals like OS version, full browser version, and device model require explicit opt-in via navigator.userAgentData (User-Agent Client Hints).

concepts

  1. UA Demo

    Shows the current navigator.userAgent string, the reduced form, and the structured data available from navigator.userAgentData.

  2. UA-CH Migration

    How to migrate from parsing the User-Agent string to using the User-Agent Client Hints API — navigator.userAgentData.getHighEntropyValues() for detailed signals.

  3. Entropy Budget

    Toggle high-entropy hints on a fingerprinting meter. Helps you reason about which UA-CH fields really need to ride on every request — and which take you past the 32-bit identification threshold.

  4. UA Field Annotator

    Paste any User-Agent string and see each token annotated: what it reveals, whether it is frozen or real data in Chrome 145, and which navigator.userAgentData hint provides the real value instead.

the change

// Before Chrome 100+: full UA string
// Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36

// Chrome 145 reduced default:
// Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36
// ^ OS version frozen to "10.0"; minor/patch version "0.0.0"; no device model

// For detailed signals, use User-Agent Client Hints:
const ua = navigator.userAgentData;
console.log(ua.brands);    // [{brand: 'Google Chrome', version: '145'}, ...]
console.log(ua.mobile);    // true | false
console.log(ua.platform);  // 'Windows'

// High-entropy values require explicit request:
const high = await ua.getHighEntropyValues([
  'platformVersion', 'fullVersionList', 'model', 'bitness'
]);
console.log(high.platformVersion); // '15.0.0' (actual OS version)

references