updates‎ > ‎

User-Agent Reduction

Updates

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).

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

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.

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


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.

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/”).

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