Updates / Google Chrome
Chrome 156: CSS random(), IndexedDB on SQLite, same TLS fingerprint
Stable Chrome on the fleet is now 156.0.8078.47: CSS random() and scroll-snap pair arrive, IndexedDB moves to SQLite, TLS and HTTP/2 fingerprints unchanged.
Google Chrome stable · 155.0.8059.84 → 156.0.8078.47 · 2026-10-23
Google promoted Chrome 156 to the stable channel on 2026-10-20, and new chrome sessions on the fleet now run 156.0.8078.47 (the Linux build) instead of 155.0.8059.84. Pin the previous major with "version" if you need it.
New
- CSS
random(): a random number within a range, with a key argument to control which values are shared between properties and elements. Our feature probe finds it on 156 and not on 155. scroll-snap-type: pair: a scroll container that snaps to an element on one axis snaps to the same element on the other. Also new in our probe.- IndexedDB on SQLite: Chrome reimplements IndexedDB on SQLite instead of LevelDB, for new data stores only (Chrome release notes).
- Also in the release notes: a
:navigation-sourcepseudo-class for the element that started a navigation, single-axis scroll containers (overflowcombining a scrollable value withclip), retrying failed module loads with a repeatedimport(), request and response headers in WebTransport, and a WebRTC diagnostic logging API.
Removed or changed
- Fenced frames are being removed: from 156,
<fencedframe>andwindow.fenceremain only as stub implementations (Chrome release notes). Our feature test (window.fenceorHTMLFencedFrameElement) still finds them on 156, so don't rely on such a test to tell whether fenced frames work. text-decoration-skip-spaces:CSS.supports('text-decoration-skip-spaces', 'all')returned true on 155 and returns false on 156. The release notes don't mention it, so treat it as unavailable for now.
What sites see / detection
- User agent and client hints:
Chrome/156.0.0.0in the user agent, and theSec-CH-UAbrands change fromGoogle Chrome 155, Chromium 155, Not(A:Brand 24toNot:A-Brand 8, Chromium 156, Google Chrome 156. Chrome changes the placeholder "Not A Brand" entry and the order with each major version, so an allowlist that matches the exact brand string needs updating. - TLS and HTTP/2 unchanged: the JA4 hash, the full TLS fingerprint hash and the HTTP/2 fingerprint are identical to 155.
- Bot checks unchanged: bot.sannysoft.com flagged one check before and after.
For scraping
- Nothing to change in your code: launch options, the Playwright 1.60 client and
wsUrlare the same, and every Playwright feature we test still works. - If you match
Sec-CH-UAbrand strings or the full user agent somewhere (an allowlist, a test), update them to 156.
Measured on the fleet
The same probe ran against 155.0.8059.84 and 156.0.8078.47 on the fleet, each when it went live: identity, TLS and HTTP/2 fingerprint, web platform features, Playwright features and bot checks. Host-dependent values (cores, memory, timings) are left out.
What the site sees: identity
| Before | After | |
|---|---|---|
| User agent | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36 | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36 |
| Client hint brands | Google Chrome 155, Chromium 155, Not(A:Brand 24 | Not:A-Brand 8, Chromium 156, Google Chrome 156 |
| Client hint full versions | Google Chrome 155.0.8059.84, Chromium 155.0.8059.84, Not(A:Brand 24.0.0.0 | Not:A-Brand 8.0.0.0, Chromium 156.0.8078.47, Google Chrome 156.0.8078.47 |
Web platform features added
- CSS
random()(Chrome 156) - CSS
scroll-snap-type: pair(Chrome 156)
Web platform features removed
- CSS
text-decoration-skip-spaces(Chrome 155)
Raw diff
{
"engine": "chrome",
"label": "stable",
"from": "155.0.8059.84",
"to": "156.0.8078.47",
"browser_version": {
"before": "155.0.8059.84",
"after": "156.0.8078.47"
},
"changes": {
"identity": [
{
"field": "user_agent",
"before": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36",
"after": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36"
},
{
"field": "client_hint_brands",
"before": "Google Chrome 155, Chromium 155, Not(A:Brand 24",
"after": "Not:A-Brand 8, Chromium 156, Google Chrome 156"
},
{
"field": "client_hint_full_versions",
"before": "Google Chrome 155.0.8059.84, Chromium 155.0.8059.84, Not(A:Brand 24.0.0.0",
"after": "Not:A-Brand 8.0.0.0, Chromium 156.0.8078.47, Google Chrome 156.0.8078.47"
}
],
"network": [],
"features": {
"added": [
{
"key": "css_random",
"label": "CSS `random()` (Chrome 156)"
},
{
"key": "css_scroll_snap_pair",
"label": "CSS `scroll-snap-type: pair` (Chrome 156)"
}
],
"removed": [
{
"key": "css_text_decoration_skip_spaces",
"label": "CSS `text-decoration-skip-spaces` (Chrome 155)"
}
]
},
"playwright": {
"broke": [],
"fixed": []
},
"fingerprint": [],
"bot_checks": {
"newly_failed": [],
"newly_passed": [],
"failed_before": 1,
"failed_after": 1
},
"plain_http": [],
"launch": {
"before_ms": 382,
"after_ms": 565
}
},
"host_dependent_ignored": [
"hardware_concurrency",
"device_memory",
"launch/connect/page timings"
]
}