cdpfleet Docs GitHub Dashboard

Compare / versions

Chrome 154 vs Chrome 153

What changed between the two Chrome majors on the fleet — new features, removals, the new HTTP warning and why automated sessions don't see it — and which of it a site can use to tell a browser's version, or to tell that the version is a lie.

Google Chrome

Chrome 153 went stable on 8 September 2026 and 154 on 22 September. The fleet runs 154 as stable and keeps 153 as a pinned previous major ({"version": "153"}) until it rotates out; 155 and 157 are available as beta and dev. Below: what Google shipped and removed in each, what we could measure as different from inside a page and on the wire, which of those differences matter for detection, and what can be configured — by you in the launch, by us on the fleet, or by nobody.

What 154 adds

From the Chrome 154 release notes. Items marked measured show up in the probe table below.

What 153 added, and what it took away

What is identical

Everything on the wire. JA4, the peetprint, the Akamai HTTP/2 fingerprint, cipher and extension counts and the header order are byte-for-byte the same in 153 and 154 (the JA3 hash differs between any two Chrome runs because of GREASE randomisation — never use it to compare builds). Canvas output, WebGL strings, screen, window metrics, plugins, permissions and navigator.webdriver (false on the fleet) are also identical. Only the host's core count differs, and that is the fleet node, not the version.

What affects detection

Configurable — by you, by us, by nobody

ItemWho controls itHow
Which major runsYouversion: "153" while it is pinned on the fleet; channel: "beta" / "dev" for 155 and 157; omit both for stable. See Chrome.
Ask before HTTP (the http:// warning page)Playwright / cdpfleetAlready off for fleet sessions: Playwright's launcher disables Chromium's HttpsUpgrades feature (measured: no warning in 154). The HttpsOnlyMode enterprise policy is the supported switch if Chrome ever stops honouring the flag; only the fleet can set it. Nothing for you to do; http:// targets load as in 153.
Local Network Access permission (Background Fetch to local servers)Not relevant on the fleetThe browser runs on our servers; "local" is our network, which sessions cannot reach.
ServiceWorkerAutoPreloadThe siteOpt-in by the site's service worker; nothing to set on the browser.
WebSocket options and targetAddressSpacePage scriptsNew API surface, available to any script you run in the page.
Privacy Sandbox APIs (requestStorageAccessFor, Protected Audience, Shared Storage, Attribution Reporting)NobodyRemoved or being removed from Chromium; no flag or policy brings document.requestStorageAccessFor back in 154. Sites that relied on it fall back to the Storage Access API prompt.
_current navigation targetNobodyRemoved in 153.
Fingerprint surface (UA, client hints, canvas, WebGL, screen)You, per contextUnchanged between the versions; set with newContext options as before, or use Camoufox when the identity itself must change.

Measured on the fleet (2026-10-04)

One headful launch of each on the production fleet through the same proxy, probed from inside a page and via tls.peet.ws. Timings are a single sample; core counts are the node's.

Launch and cost

Single run; timings depend on the proxy and on fleet load.

Chrome 154Chrome 153
Launch body{"headless":false}{"headless":false,"version":"153"}
Threads used2 (linux_headful)2 (linux_headful)
Browser version154.0.8037.97153.0.8010.36
Launch request → browser ready0.7 s1.3 s
Playwright connect0.0 s0.1 s
Load example.com0.5 s1.2 s
Load tls.peet.ws/api/all0.6 s3.2 s

What the network sees

From tls.peet.ws/api/all, requested by the browser itself. JA3 hashes change between runs of the same build (GREASE), so compare JA4 and the HTTP/2 fingerprint.

Chrome 154Chrome 153
HTTP versionh2h2
JA4t13d1517h2_8daaf6152771_cb7bf5808d99t13d1517h2_8daaf6152771_cb7bf5808d99
Peetprint hashfc97c1cdfb1409c9a9326c1b726d1deefc97c1cdfb1409c9a9326c1b726d1dee
Akamai HTTP/2 fingerprint1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p
Cipher suites / extensions16 / 1916 / 19
Header order (first 12)method, authority, scheme, path, sec-ch-ua, sec-ch-ua-mobile, sec-ch-ua-platform, upgrade-insecure-requests, user-agent, accept, sec-fetch-site, sec-fetch-modemethod, authority, scheme, path, sec-ch-ua, sec-ch-ua-mobile, sec-ch-ua-platform, upgrade-insecure-requests, user-agent, accept, sec-fetch-site, sec-fetch-mode

What page scripts see

Read with page.evaluate on example.com. Cores and memory are the server's and vary between fleet nodes.

Chrome 154Chrome 153
navigator.userAgentMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.0.0 Safari/537.36
UA-CH brandsChromium 154 · Google Chrome 154 · Not A(Brand 99Google Chrome 153 · Not_A Brand 8 · Chromium 153
UA-CH full version listChromium 154.0.8037.97 · Google Chrome 154.0.8037.97 · Not A(Brand 99.0.0.0Google Chrome 153.0.8010.36 · Not_A Brand 8.0.0.0 · Chromium 153.0.8010.36
navigator.platform / vendorLinux x86_64 / Google Inc.Linux x86_64 / Google Inc.
Languagesen-US, enen-US, en
Timezone / localeUTC / en-USUTC / en-US
Screen (w×h×availW×availH×depth)1280x720x1280x720x241280x720x1280x720x24
Window outer / inner / DPR1288x805 / 1280x720 / 11288x805 / 1280x720 / 1
hardwareConcurrency / deviceMemory64 / 3264 / 32
WebGL vendorGoogle Inc. (Google)Google Inc. (Google)
WebGL rendererANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)
WebGL versionWebGL 2.0 (OpenGL ES 3.0 Chromium)WebGL 2.0 (OpenGL ES 3.0 Chromium)
WebGPU (navigator.gpu)yesyes
Canvas hashf5a94624f5a94624
navigator.webdrivernono
window.chrome / navigator.connectionyes / yesyes / yes
Plugins / PDF viewer5 / yes5 / yes
Notification.permission / permissions.querydefault / promptdefault / prompt

Web platform features

Presence probes; a user agent that claims one version while exposing another's features is a detectable inconsistency.

Chrome 154Chrome 153
Iterator.prototype.includes (new in Chrome 154)yesno
FontFace.width (new in Chrome 154)yesno
CSS text-decoration-inset (new in Chrome 154)nono
Iterator.prototype.join (Chrome 153)yesyes
Iterator.zip (Chrome 153)yesyes
CSS scroll-axis-lock (Chrome 153)nono
<camera> element (Chrome 153)yesyes
document.requestStorageAccessFor (deprecated in 153)noyes
Topics API (document.browsingTopics)yesyes
Protected Audience (navigator.joinAdInterestGroup)yesyes
Shared Storage (window.sharedStorage)nono
Attribution Reporting (window.attributionReporting)nono
Private Aggregationnono
WebHID (navigator.hid)yesyes

bot.sannysoft.com

The classic headless-detection test page; what it marks red.

Chrome 154Chrome 153
Checks / failed57 / 157 / 1
Failed checksWebGL RendererWebGL Renderer

A plain-HTTP URL (http://ip-api.com/json)

Chrome 154 warns before loading insecure HTTP by default — does that reach an automated session?

Chrome 154Chrome 153
Final URLhttp://ip-api.com/json/?fields=statushttp://ip-api.com/json/?fields=status
HTTP status200200
Content loaded / warning page firstyes / noyes / no

Playwright over the remote connection

Which client features work on this side.

Chrome 154Chrome 153
page.evaluate runs in the page's own worldyesyes
addInitScript visible to page scriptsyesyes
Console eventsyesyes
Request interception (page.route)yesyes
Screenshotyesyes
PDFyesyes
Mobile device emulationyesyes
Tracingyesyes

Rows where the two sides differ are highlighted. IP addresses are replaced with placeholders (203.0.113.x). The probe is compare/probe.mjs in our repository; the raw result is below.

Raw output
{
  "ran_at": "2026-10-04T21:08:09.390Z",
  "sides": [
    {
      "label": "Chrome 154",
      "engine": "chrome",
      "body": {
        "headless": false
      },
      "launch": {
        "browser": "chrome",
        "resource_class": "linux_headful",
        "weight": 2,
        "launch_ms": 653,
        "connect_ms": 32,
        "example_ms": 512,
        "peet_ms": 641
      },
      "network": {
        "http_version": "h2",
        "ja4": "t13d1517h2_8daaf6152771_cb7bf5808d99",
        "ja3_hash": "b3289d099f33354de20fb487a2d42241",
        "peetprint_hash": "fc97c1cdfb1409c9a9326c1b726d1dee",
        "ciphers": 16,
        "extensions": 19,
        "akamai_h2": "1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p",
        "akamai_h2_hash": "52d84b11737d980aef856699f885ca86",
        "header_order": [
          "method",
          "authority",
          "scheme",
          "path",
          "sec-ch-ua",
          "sec-ch-ua-mobile",
          "sec-ch-ua-platform",
          "upgrade-insecure-requests",
          "user-agent",
          "accept",
          "sec-fetch-site",
          "sec-fetch-mode"
        ]
      },
      "page": {
        "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36",
        "platform": "Linux x86_64",
        "vendor": "Google Inc.",
        "languages": [
          "en-US",
          "en"
        ],
        "hardware_concurrency": 64,
        "device_memory": 32,
        "max_touch_points": 0,
        "webdriver": false,
        "plugins": 5,
        "pdf_viewer": true,
        "ua_data": {
          "brands": [
            {
              "brand": "Chromium",
              "version": "154"
            },
            {
              "brand": "Google Chrome",
              "version": "154"
            },
            {
              "brand": "Not A(Brand",
              "version": "99"
            }
          ],
          "mobile": false,
          "platform": "Linux",
          "architecture": "x86",
          "bitness": "64",
          "formFactors": [
            "Desktop"
          ],
          "fullVersionList": [
            {
              "brand": "Chromium",
              "version": "154.0.8037.97"
            },
            {
              "brand": "Google Chrome",
              "version": "154.0.8037.97"
            },
            {
              "brand": "Not A(Brand",
              "version": "99.0.0.0"
            }
          ],
          "model": "",
          "platformVersion": "",
          "uaFullVersion": "154.0.8037.97",
          "wow64": false
        },
        "screen": "1280x720x1280x720x24",
        "window": {
          "outer": "1288x805",
          "inner": "1280x720",
          "dpr": 1
        },
        "timezone": "UTC",
        "locale": "en-US",
        "webgl": {
          "vendor": "Google Inc. (Google)",
          "renderer": "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)",
          "version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)"
        },
        "canvas_hash": "f5a94624",
        "webgpu": true,
        "chrome_object": true,
        "chrome_runtime": false,
        "notification_permission": "default",
        "notification_query": "prompt",
        "has_focus": true,
        "connection_api": true,
        "stack_read_by_debugger": false,
        "features": {
          "iterator_includes": true,
          "iterator_join": true,
          "iterator_zip": true,
          "fontface_width": true,
          "css_text_decoration_inset": false,
          "css_scroll_axis_lock": false,
          "websocket_options_bag": null,
          "camera_element": true,
          "topics_api": true,
          "protected_audience": true,
          "shared_storage": false,
          "attribution_reporting": false,
          "request_storage_access_for": false,
          "webhid": true,
          "private_aggregation": false
        }
      },
      "page_main_world": null,
      "sannysoft": {
        "checks": 57,
        "failed": 1,
        "failed_names": [
          "WebGL Renderer"
        ],
        "passed": 30
      },
      "plain_http": {
        "final_url": "http://ip-api.com/json/?fields=status",
        "status": 200,
        "title": "",
        "loaded": true,
        "warning_page": false,
        "page_text": "{\"status\":\"success\"}"
      },
      "playwright": {
        "evaluate_in_main_world": true,
        "console_events": true,
        "init_script": true,
        "route": true,
        "screenshot": true,
        "pdf": true,
        "mobile_emulation": true,
        "tracing": true
      },
      "browser_version": "154.0.8037.97"
    },
    {
      "label": "Chrome 153",
      "engine": "chrome",
      "body": {
        "headless": false,
        "version": "153"
      },
      "launch": {
        "browser": "chrome",
        "resource_class": "linux_headful",
        "weight": 2,
        "launch_ms": 1302,
        "connect_ms": 126,
        "example_ms": 1201,
        "peet_ms": 3235
      },
      "network": {
        "http_version": "h2",
        "ja4": "t13d1517h2_8daaf6152771_cb7bf5808d99",
        "ja3_hash": "8c199af547de1666a4e3d7fade58dbb2",
        "peetprint_hash": "fc97c1cdfb1409c9a9326c1b726d1dee",
        "ciphers": 16,
        "extensions": 19,
        "akamai_h2": "1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p",
        "akamai_h2_hash": "52d84b11737d980aef856699f885ca86",
        "header_order": [
          "method",
          "authority",
          "scheme",
          "path",
          "sec-ch-ua",
          "sec-ch-ua-mobile",
          "sec-ch-ua-platform",
          "upgrade-insecure-requests",
          "user-agent",
          "accept",
          "sec-fetch-site",
          "sec-fetch-mode"
        ]
      },
      "page": {
        "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.0.0 Safari/537.36",
        "platform": "Linux x86_64",
        "vendor": "Google Inc.",
        "languages": [
          "en-US",
          "en"
        ],
        "hardware_concurrency": 64,
        "device_memory": 32,
        "max_touch_points": 0,
        "webdriver": false,
        "plugins": 5,
        "pdf_viewer": true,
        "ua_data": {
          "brands": [
            {
              "brand": "Google Chrome",
              "version": "153"
            },
            {
              "brand": "Not_A Brand",
              "version": "8"
            },
            {
              "brand": "Chromium",
              "version": "153"
            }
          ],
          "mobile": false,
          "platform": "Linux",
          "architecture": "x86",
          "bitness": "64",
          "formFactors": [
            "Desktop"
          ],
          "fullVersionList": [
            {
              "brand": "Google Chrome",
              "version": "153.0.8010.36"
            },
            {
              "brand": "Not_A Brand",
              "version": "8.0.0.0"
            },
            {
              "brand": "Chromium",
              "version": "153.0.8010.36"
            }
          ],
          "model": "",
          "platformVersion": "",
          "uaFullVersion": "153.0.8010.36",
          "wow64": false
        },
        "screen": "1280x720x1280x720x24",
        "window": {
          "outer": "1288x805",
          "inner": "1280x720",
          "dpr": 1
        },
        "timezone": "UTC",
        "locale": "en-US",
        "webgl": {
          "vendor": "Google Inc. (Google)",
          "renderer": "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)",
          "version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)"
        },
        "canvas_hash": "f5a94624",
        "webgpu": true,
        "chrome_object": true,
        "chrome_runtime": false,
        "notification_permission": "default",
        "notification_query": "prompt",
        "has_focus": true,
        "connection_api": true,
        "stack_read_by_debugger": false,
        "features": {
          "iterator_includes": false,
          "iterator_join": true,
          "iterator_zip": true,
          "fontface_width": false,
          "css_text_decoration_inset": false,
          "css_scroll_axis_lock": false,
          "websocket_options_bag": null,
          "camera_element": true,
          "topics_api": true,
          "protected_audience": true,
          "shared_storage": false,
          "attribution_reporting": false,
          "request_storage_access_for": true,
          "webhid": true,
          "private_aggregation": false
        }
      },
      "page_main_world": null,
      "sannysoft": {
        "checks": 57,
        "failed": 1,
        "failed_names": [
          "WebGL Renderer"
        ],
        "passed": 29
      },
      "plain_http": {
        "final_url": "http://ip-api.com/json/?fields=status",
        "status": 200,
        "title": "",
        "loaded": true,
        "warning_page": false,
        "page_text": "{\"status\":\"success\"}"
      },
      "playwright": {
        "evaluate_in_main_world": true,
        "console_events": true,
        "init_script": true,
        "route": true,
        "screenshot": true,
        "pdf": true,
        "mobile_emulation": true,
        "tracing": true
      },
      "browser_version": "153.0.8010.36"
    }
  ]
}

Bottom line

For automation the headline change of 154 — the warning before plain http:// pages — turns out not to reach fleet sessions: Playwright launches Chromium with HTTPS upgrades disabled, and we measured http:// targets loading as before. What does change is that a version is now checkable from inside the page in at least three new ways (Iterator.prototype.includes, FontFace.width, the missing requestStorageAccessFor); the cheapest way to pass those checks is to run the version you claim.

Everything that an anti-bot system reads on the wire is identical between the two, so moving from 153 to 154 (or back, while 153 is pinned) does not change your TLS or HTTP/2 standing — only your JavaScript-level version story.