cdpfleet Docs GitHub Dashboard

Compare / versions

Chrome 156 (beta) vs Chrome 154

Two majors ahead of stable, measured on the fleet: what 155 and 156 add and remove, which of it a page can already detect in the beta, what is identical on the wire, and what you can set before 156 ships.

Google Chrome

Chrome 154 has been stable since 22 September 2026. The fleet's channel: "beta" currently launches Chrome 156 (156.0.8078.4, in beta since 30 September), with 157 on dev; 155 is between them and already behind the beta. So this page compares the browser most of your visitors run today with the one they will run in a few weeks, two release notes apart. Below: what Google shipped in 155 and 156, 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 155 added

From the Chrome 155 beta post. Items marked measured show up in the probe table; "not exposed" means our probe found the API or property absent in the 156 beta build — behind a flag, in an origin trial, or shipped in a form we didn't probe.

What 156 adds

From the Chrome 156 release notes.

What is identical

Everything on the wire: JA4, peetprint, the Akamai HTTP/2 fingerprint and the header order are the same in 156 and 154 (the JA3 hash differs between any two Chrome runs because of GREASE — never use it to compare builds). Canvas output, the WebGL strings, screen and window metrics, plugins, permissions and navigator.webdriver (false on the fleet) are identical too, and a plain-http:// URL loads directly in both (Playwright disables Chromium's HTTPS upgrades, see Chrome 154 vs 153). Timings differ only by proxy luck.

What affects detection

Configurable — by you, by us, by nobody

ItemWho controls itHow
Which major runsYouchannel: "beta" for 156 today, "dev" for 157, nothing for stable (154). When 156 goes stable, 154 becomes a pinned previous major for a while (version: "154"). See Chrome.
Features that exist but aren't exposed yet (corner, streamAppendHTML, windowing controls, linear canvas)cdpfleet (launch flags)Chromium --enable-features / --enable-blink-features switches are set by the fleet, not by launch options. Tell us if you need one for testing.
Local Network Access permissionsNot relevant on the fleetThe browser runs on our servers; sessions can't reach our local network either way.
Ask before HTTP (the http:// warning)Playwright / cdpfleetOff for fleet sessions through Playwright's --disable-features=…HttpsUpgrades… (measured: http:// loaded directly in both builds).
<fencedframe> / window.fenceNobodyStubbed in 156, removed from 157 on; still present in both builds we measured.
Privacy Sandbox APIs (requestStorageAccessFor, Shared Storage, Attribution Reporting)NobodyAlready gone in 154 and 156 (document.browsingTopics and joinAdInterestGroup are still present in both).
Fingerprint surface (UA, client hints, canvas, WebGL, screen)You, per contextUnchanged between the versions; newContext options as before, or Camoufox when the identity itself must change.

Measured on the fleet (2026-10-05)

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 156 betaChrome 154
Launch body{"headless":false,"channel":"beta"}{"headless":false}
Threads used2 (linux_headful)2 (linux_headful)
Browser version156.0.8078.4154.0.8037.97
Launch request → browser ready0.7 s0.7 s
Playwright connect0.0 s0.1 s
Load example.com0.5 s1.0 s
Load tls.peet.ws/api/all2.4 s2.5 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 156 betaChrome 154
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 156 betaChrome 154
navigator.userAgentMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36
UA-CH brandsNot:A-Brand 8 · Chromium 156 · Google Chrome 156Chromium 154 · Google Chrome 154 · Not A(Brand 99
UA-CH full version listNot:A-Brand 8.0.0.0 · Chromium 156.0.8078.4 · Google Chrome 156.0.8078.4Chromium 154.0.8037.97 · Google Chrome 154.0.8037.97 · Not A(Brand 99.0.0.0
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 / deviceMemory48 / 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 156 betaChrome 154
Iterator.prototype.includes (new in Chrome 154)yesyes
FontFace.width (new in Chrome 154)yesyes
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)nono
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
CSS margin-trim (Chrome 155)yesno
CSS text-decoration-skip-spaces (Chrome 155)nono
CSS corner shorthand (Chrome 155)nono
CSS symbols() (Chrome 155)yesno
Element.streamAppendHTML (Chrome 155)nono
WebTransport.reliability (Chrome 155)nono
window.maximize() — Additional Windowing Controls (Chrome 155)nono
Canvas srgb-linear colour space (Chrome 155)nono
Permission policy media-playback-while-not-visible (Chrome 155)yesno
CSS random() (Chrome 156)yesno
CSS scroll-snap-type: pair (Chrome 156)yesno
Fenced frames (window.fence) — removal starts in 157yesyes
rel=compression-dictionary (Chrome 156 updates)yesyes

bot.sannysoft.com

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

Chrome 156 betaChrome 154
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 156 betaChrome 154
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 156 betaChrome 154
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-05T21:09:52.065Z",
  "sides": [
    {
      "label": "Chrome 156 beta",
      "engine": "chrome",
      "body": {
        "headless": false,
        "channel": "beta"
      },
      "launch": {
        "browser": "chrome",
        "resource_class": "linux_headful",
        "weight": 2,
        "launch_ms": 669,
        "connect_ms": 40,
        "example_ms": 470,
        "peet_ms": 2405
      },
      "network": {
        "http_version": "h2",
        "ja4": "t13d1517h2_8daaf6152771_cb7bf5808d99",
        "ja3_hash": "9c429a8ece1d6d255c17d625673fa006",
        "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/156.0.0.0 Safari/537.36",
        "platform": "Linux x86_64",
        "vendor": "Google Inc.",
        "languages": [
          "en-US",
          "en"
        ],
        "hardware_concurrency": 48,
        "device_memory": 32,
        "max_touch_points": 0,
        "webdriver": false,
        "plugins": 5,
        "pdf_viewer": true,
        "ua_data": {
          "brands": [
            {
              "brand": "Not:A-Brand",
              "version": "8"
            },
            {
              "brand": "Chromium",
              "version": "156"
            },
            {
              "brand": "Google Chrome",
              "version": "156"
            }
          ],
          "mobile": false,
          "platform": "Linux",
          "architecture": "x86",
          "bitness": "64",
          "formFactors": [
            "Desktop"
          ],
          "fullVersionList": [
            {
              "brand": "Not:A-Brand",
              "version": "8.0.0.0"
            },
            {
              "brand": "Chromium",
              "version": "156.0.8078.4"
            },
            {
              "brand": "Google Chrome",
              "version": "156.0.8078.4"
            }
          ],
          "model": "",
          "platformVersion": "",
          "uaFullVersion": "156.0.8078.4",
          "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,
          "css_margin_trim": true,
          "css_text_decoration_skip_spaces": false,
          "css_corner_shorthand": false,
          "css_symbols": true,
          "stream_append_html": false,
          "webtransport_reliability": false,
          "window_maximize": false,
          "media_display_state": true,
          "canvas_srgb_linear": false,
          "policy_media_playback_while_not_visible": true,
          "css_random": true,
          "css_scroll_snap_pair": true,
          "fenced_frames": true,
          "compression_dictionary": true
        }
      },
      "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": "156.0.8078.4"
    },
    {
      "label": "Chrome 154",
      "engine": "chrome",
      "body": {
        "headless": false
      },
      "launch": {
        "browser": "chrome",
        "resource_class": "linux_headful",
        "weight": 2,
        "launch_ms": 719,
        "connect_ms": 128,
        "example_ms": 956,
        "peet_ms": 2543
      },
      "network": {
        "http_version": "h2",
        "ja4": "t13d1517h2_8daaf6152771_cb7bf5808d99",
        "ja3_hash": "06971656b55d8d6c33e327e2e51e8440",
        "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,
          "css_margin_trim": false,
          "css_text_decoration_skip_spaces": false,
          "css_corner_shorthand": false,
          "css_symbols": false,
          "stream_append_html": false,
          "webtransport_reliability": false,
          "window_maximize": false,
          "media_display_state": true,
          "canvas_srgb_linear": false,
          "policy_media_playback_while_not_visible": false,
          "css_random": false,
          "css_scroll_snap_pair": false,
          "fenced_frames": true,
          "compression_dictionary": true
        }
      },
      "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"
    }
  ]
}

Bottom line

For scrapers, 156 is a quiet release: identical on the wire, identical fingerprint surface, and five new CSS-level ways for a page to confirm it really is 156. The practical items are the client-hint brand order change and the Local Network Access permissions — both invisible unless something inspects them.

For testers, the beta channel is already there: launch channel: "beta" next to stable, run the same script, and diff the output — which is exactly what this page did.