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.

Proposed Rollout Plan

Reduction Preparation

Phase 1: Warn about accessing navigator.userAgent, navigator.appVersion, and navigator.platform in DevTools, beginning in M92.
Phase 2: 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: Launch a reverse Origin Trial, for instances where a site may need more time for migration, for at least 6 months.
Phase 4: 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: 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: 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: 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


Sample UA Strings: Phase 4


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




Desktop (user on macOS, for example)

Phase 1 UA 

Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Safari/537.36

Phase 2 UA

Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36




Mobile (user on Samsung Galaxy, for example)

Phase 1 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 2 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 1 UA

Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Safari/537.36

Phase 2 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.




Desktop (user on macOS, for example)

Phase 2 UA

Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36

Phase 3 UA

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36




Mobile (user on Samsung Galaxy, for example)

Phase 2 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 3 UA

(No changes for Mobile UAs from Phase 2)




Tablet (user on Samsung Galaxy, for example)

Phase 2 UA 

Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36

Phase 3 UA

(No changes for Tablet UAs in Phase 2)


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 10, for example)

Phase 3 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 4 UA

No changes for Desktop UAs from Phase 3)




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.0.0 Mobile Safari/537.36

Phase 2 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 3 UA 

Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36

Phase 2 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 macOS, for example)

Old UA 

Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Safari/537.36

Final Reduced UA

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) 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