the Chromium logo

The Chromium Projects

User-Agent Reduction

Updates

May 11th, 2023: the Phase 6 rollout is enabled for 100% of Android clients on M110 and above via Finch.

April 25th, 2023: the Phase 6 rollout is enabled for 50% of Android clients on M110 and above via Finch.

April 4th, 2023: the Phase 6 rollout is enabled for 10% of Android clients on M110 and above via Finch.

March 21st, 2023: the Phase 6 rollout is enabled for 5% of Android clients on M110 and above via Finch.

February 21st, 2023: the Phase 6 rollout is enabled for 1% of Android clients on M110 and above via Finch.

February 7th, 2023: the Phase 5 rollout is enabled for 100% of clients on M107 and above via Finch.

Jan 23rd, 2023: the Phase 5 rollout is enabled for 50% of clients on M107 and above via Finch.

Jan 9th, 2023: the Phase 5 rollout is enabled for 10% of clients on M107 and above via Finch.

Dec 7th, 2022: the Phase 5 rollout is enabled for 5% of clients on M107 and above via Finch.

Nov 3rd, 2022: the Phase 5 rollout is enabled for 1% of clients on M107 and above via Finch.

June 13th, 2022: the Phase 4 rollout is enabled for 100% of clients on M101 and above via Finch.

June 10th, 2022: Enabled the "ReduceUserAgentMinorVersion" feature by default in the M105 branch.

May 31, 2022: Phase 4 rollout was increased to an even larger percentage of the Chrome 101 population while we evaluate stability.

May 16, 2022: Phase 4 rollout was increased to a larger percentage of the Chrome 101 population while we evaluate stability.

May 6, 2022: "Phase 4" began rolling out to a small percentage of the Chrome 101 stable population while we evaluate stability.

April 11, 2022: Add a table to map from UA to UA-CH

March 3, 2022: Added frozen Chrome OS platform version to <unifiedPlatform> value

February 18, 2022: Added information on the platforms for which User-Agent reduction is applicable, as well as links to resources.

October 12, 2021: Information on using the Origin Trial with third-party embeds was add to the blog post.

September 16, 2021: Chrome milestones were added to reflect https://blog.chromium.org/2021/09/user-agent-reduction-origin-trial-and-dates.html.

May 24, 2021: The chrome://flags#freeze-user-agent flag was renamed to chrome://flags/#reduce-user-agent in Chrome 93 and the values were updated to align with the plan below (also testable via --enable-features=ReduceUserAgent).

Proposed Rollout Plan

Reduction Preparation

Phase 1: Warn about accessing navigator.userAgent, navigator.appVersion, and navigator.platform in DevTools, beginning in M92.

Phase 2: Chrome 95 to Chrome 100 Launch an Origin Trial for sites to opt into the final reduced UA string for testing and feedback, for at least 6 months.

Reduction Rollout

Phase 3: Chrome 100 Launch a reverse Origin Trial, for instances where a site may need more time for migration, for at least 6 months.

Phase 4: Chrome 101 Ship reduced Chrome MINOR.BUILD.PATCH version numbers (“0.0.0”). Once rolled-out, the reduced UA string would apply to all page loads on desktop and mobile OSes that do not opt into the reverse Origin Trial.

Phase 5: Chrome 107 Begin roll-out of reduced Desktop UA string and related JS APIs (navigator.userAgent, navigator.appVersion, navigator.platform). Once rolled-out, the reduced UA string would apply to all page loads on desktop OSes that do not opt into the reverse Origin Trial.

Phase 6: Chrome 110 Begin roll-out of reduced Android Mobile (and Tablet) UA string and related JS APIs. Once rolled-out, the reduced UA string would apply to all page loads on Android that do not opt into the reverse Origin Trial.

Reduction Completion Phase 7: Chrome 113 reverse Origin Trial ends and all page loads receive the reduced UA string and related JS APIs.

Reduced User Agent String Reference

This reduced format will be available for testing via chrome://flags/#reduce-user-agent in Chrome 93.

Applicable platforms

User-Agent reduction will be applied to the following platforms: Windows, macOS, Linux, Chrome OS, and Chrome on Android. We don't have current plans for User-Agent Reduction on iOS and Android WebView at this time.

Unified Format

The unified format that covers all platforms post-UA Reduction looks like so:

Mozilla/5.0 (<unifiedPlatform>) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/<majorVersion>.0.0.0 <deviceCompat> Safari/537.36

Desktop

The Chrome Desktop User Agent string currently uses the following format:

Mozilla/5.0 (<platform>; <oscpu>) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/<majorVersion>.<minorVersion>; Safari/537.36

Post UA-Reduction, the new format will be:

Mozilla/5.0 (<unifiedPlatform>) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/<majorVersion>.0.0.0 Safari/537.36

Mobile and Tablet

The Chrome Mobile and Tablet User Agent strings use the following format:

Mozilla/5.0 (Linux; Android <androidVersion>; <deviceModel>)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/<majorVersion>.<minorVersion> <deviceCompat>
Safari/537.36

Post UA-Reduction, the new format will be:

Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/<majorVersion>.0.0.0 <deviceCompat> Safari/537.36

Token Reference

Tokens Description
<androidVersion> Represents Android major version
<deviceModel> Represents Android device model.
<minorVersion> Represents the Chrome MINOR.BUILD.PATCH version numbers.
<oscpu> Represents the device operating system and (optionally) CPU architecture.
<platform> Represents the underlying device platform.
Post-Reduction Tokens
<deviceCompat> Represents device form-factor.

The possible values are:

  • "Mobile"
  • "" (empty string, used by Tablets and Desktop)
<majorVersion> Represents the Chrome major version.
<unifiedPlatform> The intersection of <platform>, <oscpu>, <androidVersion>, and <deviceModel>, depending on device.

The possible desktop values* are:

  • Windows NT 10.0; Win64; x64
  • Macintosh; Intel Mac OS X 10_15_7
  • X11; Linux x86_64
  • X11; CrOS x86_64 14541.0.0
  • Fuchsia

The possible mobile values* are:

  • Linux; Android 10; K

* Note that these strings are literal values; they will not update even if a user is on an updated operating system or device.

UA Token to UA-CH Mapping

UA string token HTTP UA-CH token (ref) UA-CH JS API (ref)
<androidVersion> Sec-CH-UA-Platform-Version UADataValues.platformVersion
<deviceCompat> Sec-CH-UA-Mobile NavigatorUAData.mobile
<deviceModel> Sec-CH-UA-Model UADataValues.model
<majorVersion> Sec-CH-UA NavigatorUAData.brands
<minorVersion> Sec-CH-UA-Full-Version-List UADataValues.fullVersionList
<oscpu> Any combination of the following, as relevant:
Sec-CH-UA-WoW64, Sec-CH-UA-Arch, Sec-CH-UA-Bitness
Any combination of the following, as relevant:
UADataValues.wow64, UADataValues.arch, UADataValues.bitness
<unifiedPlatform> Sec-CH-UA-Platform and Sec-CH-UA-Platform-Version UADataValues.platform and UADataValues.platformVersion

Sample UA Strings: Phase 4

In Phase 4 we change the <minorVersion> token to “0.0.0”.

Desktop (user on Windows 8.1, for example)
Phase 3 UA Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Safari/537.36
Phase 4 UA Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36
Mobile (user on Samsung Galaxy, for example)
Phase 3 UA Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Mobile Safari/537.36
Phase 4 UA Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36
Tablet (user on Samsung Galaxy, for example)
Phase 3 UA Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Safari/537.36
Phase 4 UA Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36

Sample UA Strings: Phase 5

In Phase 5 we change the <platform> and <oscpu> tokens from their platform-defined values to the relevant <unifiedPlatform> token value (which will never change).

Note: There may not be user-visible changes here, unless the user was on a lower version.

Also note that the macOS platform version was already capped to 10_15_7 in Chrome 90 for site compatibility reasons.

Desktop (user on Windows 8.1, for example)
Phase 4 UA Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36
Phase 5 UA Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36
Mobile (user on Samsung Galaxy, for example)
Phase 4 UA Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36
Phase 5 UA (No changes for Mobile UAs in Phase 5)
Tablet (user on Samsung Galaxy, for example)
Phase 4 UA Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36
Phase 5 UA (No changes for Tablet UAs in Phase 5)

Sample UA Strings: Phase 6

In Phase 6, we change the <deviceModel> token to “K” and change the <androidVersion> token to a static “10” string.

Desktop (user on Windows 8.1, for example)
Phase 5 UA Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36
Phase 6 UA (No changes for Desktop UAs from Phase 5)
Mobile (user on Samsung Galaxy, for example)
Phase 5 UA Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36
Phase 6 UA Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36
Tablet (user on Samsung Galaxy, for example)
Phase 5 UA Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36
Phase 6 UA Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36

Sample UA Strings: Final Reduced State

Desktop (user on Windows 8.1, for example)
Old UA Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Safari/537.36
Final Reduced UA Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36
Mobile (user on Samsung Galaxy, for example)
Old UA Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Mobile Safari/537.36
Final Reduced UA Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36
Tablet (user on Samsung Galaxy, for example)
Old UA Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Safari/537.36
Final Reduced UA Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36

Reduced navigator.platform values (for all versions)

Platform Reduced value
macOS MacIntel
Windows Win32
Chrome OS Linux x86_64
Linux Linux x86_64
Android Linux armv81

Reduced navigator.appVersion values

navigator.appVersion is effectively an alias of navigator.userAgent (it’s everything after “Mozilla/”).

Reduced navigator.userAgent values

To avoid confusion and reduce implementation complexity, we aim to follow the same plan for navigator.userAgent.

Alternative: high entropy client hints

All of the information that was contained in the User-Agent string prior to reduction is available through the high entropy client hints, which are available by request through the User-Agent Client Hints request headers, as well as the navigator.userAgentData.getHighEntropyValues Javascript API.

FAQ

Resources

Education

Proposed Timeline

Migration

Testing