Updates / Opera
Opera 139: Chromium 155 underneath, four new CSS and policy features
Stable Opera on the fleet is now 139.0.6053.22, on Chromium 155. margin-trim, symbols() and two more arrive; TLS and HTTP/2 unchanged.
Opera stable · 138.0.6044.24 → 139.0.6053.22 · 2026-10-31
Opera released 139 to stable on 2026-10-27, and new opera sessions on the fleet now run 139.0.6053.22 instead of 138.0.6044.24. Opera 139 moves its Chromium base from 154.0.8037.99 to 155.0.8059.85, so web platform changes follow Chromium 155. The fleet's build is a later 139 build than the 139.0.6053.15 in Opera's changelog, on the same Chromium 155.0.8059.85.
New
- Chromium 155.0.8059.85 (Opera release notes, "Chromium is updated to 155.0.8059.85").
- New CSS features that pages can feature-test:
margin-trim,text-decoration-skip-spacesand thesymbols()counter-style function (Chromium 155; ChromeStatus release notes). - A new permission policy,
media-playback-while-not-visible, which our probe found on 139 and not on 138. - Opera's own changes: Web AI (local, browser-powered AI), "Make Opera Yours 2.0" on the Start Page, now enabled on all release streams, sidebar and tab fixes, H.264 playback fixes and crash fixes (Opera release notes).
Removed or changed
- Nothing our probe checks was removed: no web API or Playwright feature that worked on 138 is missing on 139.
What sites see / detection
- User agent and client hints:
Chrome/155.0.0.0 … OPR/139.0.0.0in the user agent, and theSec-CH-UAbrands change fromChromium 154, Opera 138, Not A(Brand 99toOpera 139, Chromium 155, Not(A:Brand 24. The placeholder brand and the order change with each Chromium major. - TLS and HTTP/2 unchanged: the JA4 hash, the full TLS fingerprint hash, the cipher and extension counts, the HTTP/2 fingerprint and the header order are identical to 138. (JA3 differs between the two snapshots, as it does between any two Chromium connections: Chromium shuffles its TLS extension order.)
- Bot checks unchanged: bot.sannysoft.com flagged one check (WebGL Renderer) 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 user agents or client hints, expect Opera 139 to report Chromium 155, one major behind the fleet's stable Chrome (156).
Measured on the fleet
The same probe ran against 138.0.6044.24 and 139.0.6053.22 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/154.0.0.0 Safari/537.36 OPR/138.0.0.0 | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36 OPR/139.0.0.0 |
| Client hint brands | Chromium 154, Opera 138, Not A(Brand 99 | Opera 139, Chromium 155, Not(A:Brand 24 |
| Client hint full versions | Chromium 154.0.8037.99, Opera 138.0.6044.24, Not A(Brand 99.0.0.0 | Opera 139.0.6053.22, Chromium 155.0.8059.85, Not(A:Brand 24.0.0.0 |
Web platform features added
- CSS
margin-trim(Chrome 155) - CSS
text-decoration-skip-spaces(Chrome 155) - CSS
symbols()(Chrome 155) - Permission policy
media-playback-while-not-visible(Chrome 155)
Raw diff
{
"engine": "opera",
"label": "stable",
"from": "138.0.6044.24",
"to": "139.0.6053.22",
"browser_version": {
"before": "154.0.8037.99",
"after": "155.0.8059.85"
},
"changes": {
"identity": [
{
"field": "user_agent",
"before": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36 OPR/138.0.0.0",
"after": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36 OPR/139.0.0.0"
},
{
"field": "client_hint_brands",
"before": "Chromium 154, Opera 138, Not A(Brand 99",
"after": "Opera 139, Chromium 155, Not(A:Brand 24"
},
{
"field": "client_hint_full_versions",
"before": "Chromium 154.0.8037.99, Opera 138.0.6044.24, Not A(Brand 99.0.0.0",
"after": "Opera 139.0.6053.22, Chromium 155.0.8059.85, Not(A:Brand 24.0.0.0"
}
],
"network": [],
"features": {
"added": [
{
"key": "css_margin_trim",
"label": "CSS `margin-trim` (Chrome 155)"
},
{
"key": "css_text_decoration_skip_spaces",
"label": "CSS `text-decoration-skip-spaces` (Chrome 155)"
},
{
"key": "css_symbols",
"label": "CSS `symbols()` (Chrome 155)"
},
{
"key": "policy_media_playback_while_not_visible",
"label": "Permission policy `media-playback-while-not-visible` (Chrome 155)"
}
],
"removed": []
},
"playwright": {
"broke": [],
"fixed": []
},
"fingerprint": [],
"bot_checks": {
"newly_failed": [],
"newly_passed": [],
"failed_before": 1,
"failed_after": 1
},
"plain_http": [],
"launch": {
"before_ms": 1147,
"after_ms": 512
}
},
"host_dependent_ignored": [
"hardware_concurrency",
"device_memory",
"launch/connect/page timings"
]
}