Google Chrome

Browsers

A fast, secure, and free web browser built for the modern web.

Latest 151 · by GoogleWebsite

Release activity

Release activity — 68 releases across 29 days in the last year. Each cell is one day; darker means more releases that day. Older weeks are hidden at this screen width.
MayJunJulAug
SundayNo releases on May 3, 2026No releases on May 10, 2026No releases on May 17, 2026No releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026No releases on Aug 16, 2026
MondayNo releases on May 4, 2026No releases on May 11, 2026No releases on May 18, 2026No releases on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 20261 release on Aug 3, 20261 release on Aug 10, 2026No releases on Aug 17, 2026
Tuesday1 release on May 5, 2026No releases on May 12, 2026No releases on May 19, 2026No releases on May 26, 20261 release on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 20261 release on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 20265 releases on Jul 21, 20263 releases on Jul 28, 20263 releases on Aug 4, 20262 releases on Aug 11, 2026
WednesdayNo releases on May 6, 2026No releases on May 13, 2026No releases on May 20, 2026No releases on May 27, 2026No releases on Jun 3, 2026No releases on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 20266 releases on Jul 22, 20263 releases on Jul 29, 20264 releases on Aug 5, 20267 releases on Aug 12, 2026
ThursdayNo releases on May 7, 2026No releases on May 14, 2026No releases on May 21, 2026No releases on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 20263 releases on Jul 23, 20266 releases on Jul 30, 20264 releases on Aug 6, 20263 releases on Aug 13, 2026
FridayNo releases on May 8, 2026No releases on May 15, 2026No releases on May 22, 2026No releases on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 20261 release on Jul 24, 20261 release on Jul 31, 20263 releases on Aug 7, 20261 release on Aug 14, 2026
SaturdayNo releases on May 9, 2026No releases on May 16, 2026No releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026No releases on Aug 15, 2026

68 releases in the last year, busiest day 7

Changelog

Beta Channel Update for ChromeOS / ChromeOS Flex

The Beta channel is being updated to OS version 16765.19.0 (Browser version 152.0.7977.39) for most ChromeOS devices. If you find new issues, please let us know one of the following ways: File a bug V…

View originalPermalink
How Beta Channel Update for ChromeOS / ChromeOS Flex went

Chrome Dev for Desktop Update

The Dev channel has been updated to 153.0.8003.0 for Windows, Mac and Linux. A partial list of changes is available in the Git log . Interested in switching release channels? Find out how . If you fin…

View originalPermalink
How Chrome Dev for Desktop Update went

Chrome Dev for Android Update

Hi everyone! We've just released Chrome Dev 153 (153.0.8003.0) for Android. It's now available on Google Play . You can see a partial list of the changes in the Git log . For details on new features,…

View originalPermalink
How Chrome Dev for Android Update went

Stable Channel Update for ChromeOS / ChromeOS Flex

M-151, ChromeOS version 16733.48.0 (Browser version 151.0.7922.141) has rolled out to ChromeOS devices on the Stable channel. If you find new issues, please let us know one of the following ways: File…

View originalPermalink
How Stable Channel Update for ChromeOS / ChromeOS Flex went

Chrome for Android Update

Hello Everyone! We've just released Chrome 152 (152.0.7977.42) for Android to a small percentage of users. It'll become available on Google Play over the next few days. You can find more details about…

View originalPermalink
How Chrome for Android Update went

Early Stable Update for Desktop

The Stable channel has been updated to 152.0.7977.42/.43 for Windows and Mac as part of our early stable release to a small percentage of users. A full list of changes in this build is available in th…

View originalPermalink
How Early Stable Update for Desktop went

Chrome Beta for Desktop Update

The Beta channel has been updated to 152.0.7977.42 for Windows, Mac and Linux. A partial list of changes is available in the Git log . Interested in switching release channels? Find out how . If you f…

View originalPermalink
How Chrome Beta for Desktop Update went

Chrome Stable for iOS Update

Hi everyone! We've just released Chrome Stable 152 (152.0.7977.40) for iOS; it'll become available on App Store in the next few hours. This release includes stability and performance improvements. You…

Changed 1
  • Stability and performance improvements
View originalPermalink
How Chrome Stable for iOS Update went

Chrome Beta for Android Update

Hi everyone! We've just released Chrome Beta 152 (152.0.7977.42) for Android. It's now available on Google Play . You can see a partial list of the changes in the Git log . For details on new features…

View originalPermalink
How Chrome Beta for Android Update went

Chrome Beta for iOS Update

Hi everyone! We've just released Chrome Beta 152 (152.0.7977.41) for iOS; it'll become available on App Store in the next few days. You can see a partial list of the changes in the Git log . If you fi…

View originalPermalink
How Chrome Beta for iOS Update went

Chrome for Android Update

Hi, everyone! We've just released Chrome 151 (151.0.7922.137) for Android. It'll become available on Google Play over the next few days. This release includes stability and performance improvements. Y…

Changed 1
  • Improved stability and performance on Android
View originalPermalink
How Chrome for Android Update went

Extended Stable Update for Desktop

The Extended Stable channel has been updated to 150.0.7871.230 for Windows and Mac which will roll out over the coming days/weeks. A full list of changes in this build is available in the log . Intere…

View originalPermalink
How Extended Stable Update for Desktop went

Stable Channel Update for Desktop

The Stable channel has been updated to 151.0.7922.137/.138 for Windows and Mac and 151.0.7922.137 for Linux, which will roll out over the coming days/weeks. A full list of changes in this build is ava…

View originalPermalink
How Stable Channel Update for Desktop went

Long Term Support Channel Update for ChromeOS

A new LTS-144 version 144.0.7559.259 (Platform Version: 16503.92.0), is being rolled out for most ChromeOS devices. This version includes selected security fixes including: 513602949 High CVE-2026-191…

Security 1
  • Include selected security fixes including CVE-2026-191
View originalPermalink
How Long Term Support Channel Update for ChromeOS went

Chrome Dev for Desktop Update

The Dev channel has been updated to 153.0.7993.0 for Windows, Mac and Linux. A partial list of changes is available in the Git log . Interested in switching release channels? Find out how . If you fin…

View originalPermalink
How Chrome Dev for Desktop Update went

Dev Channel Update for ChromeOS / ChromeOS Flex

The ChromeOS Dev channel is being updated to OS version 16765.12.0 (Browser version 152.0.7977.28 ) for most ChromeOS devices. If you find new issues, please let us know one of the following ways: Fil…

View originalPermalink
How Dev Channel Update for ChromeOS / ChromeOS Flex went

Chrome Dev for Android Update

Hi everyone! We've just released Chrome Dev 153 (153.0.7993.0) for Android. It's now available on Google Play . You can see a partial list of the changes in the Git log . For details on new features,…

View originalPermalink
How Chrome Dev for Android Update went

Chrome for Android Update

Hi, everyone! We've just released Chrome 151 (151.0.7922.108) for Android. It'll become available on Google Play over the next few days. This release includes stability and performance improvements. Y…

Changed 1
  • Improved stability and performance
View originalPermalink
How Chrome for Android Update went

Stable Channel Update for Desktop

The Stable channel has been updated to 151.0.7922.108/.109 for Windows and Mac and 151.0.7922.108 for Linux, which will roll out over the coming days/weeks. A full list of changes in this build is ava…

View originalPermalink
How Stable Channel Update for Desktop went

Chrome Stable for iOS Update

Hi everyone! We've just released Chrome Stable 151 (151.0.7922.112) for iOS; it'll become available on App Store in the next few hours. This release includes stability and performance improvements. Yo…

Changed 1
  • Stability and performance improvements
View originalPermalink
How Chrome Stable for iOS Update went

Extended Stable Update for Desktop

The Extended Stable channel has been updated to 150.0.7871.224 for Windows and Mac which will roll out over the coming days/weeks. A full list of changes in this build is available in the log . Intere…

View originalPermalink
How Extended Stable Update for Desktop went

Chrome for Android Update

Hi, everyone! We've just released Chrome 151 (151.0.7922.83) for Android. It'll become available on Google Play over the next few days. This release includes stability and performance improvements. Yo…

Changed 1
  • Improved stability and performance
View originalPermalink
How Chrome for Android Update went

Chrome Beta for Desktop Update

The Beta channel has been updated to 152.0.7977.30 for Windows, Mac and Linux. A partial list of changes is available in the Git log . Interested in switching release channels? Find out how . If you f…

View originalPermalink
How Chrome Beta for Desktop Update went

Chrome Beta for iOS Update

Hi everyone! We've just released Chrome Beta 152 (152.0.7977.29) for iOS; it'll become available on App Store in the next few days. You can see a partial list of the changes in the Git log . If you fi…

View originalPermalink
How Chrome Beta for iOS Update went

Chrome Beta for Android Update

Hi everyone! We've just released Chrome Beta 152 (152.0.7977.30) for Android. It's now available on Google Play . You can see a partial list of the changes in the Git log . For details on new features…

View originalPermalink
How Chrome Beta for Android Update went

Beta Channel Update for ChromeOS / ChromeOS Flex

The Beta channel is being updated to OS version 16733.40.0 (Browser version 151.0.7922.104) for most ChromeOS devices. If you find new issues, please let us know one of the following ways: File a bug…

View originalPermalink
How Beta Channel Update for ChromeOS / ChromeOS Flex went

Stable Channel Update for Desktop

The Stable channel has been updated to 151.0.7922.75/.76 for Windows and Mac and 151.0.7922.75 for Linux, which will roll out over the coming days/weeks. A full list of changes in this build is availa…

View originalPermalink
How Stable Channel Update for Desktop went

Chrome Stable for iOS Update

Hi everyone! We've just released Chrome Stable 151 (151.0.7922.105) for iOS; it'll become available on App Store in the next few hours. This release includes stability and performance improvements. Yo…

Changed 1
  • Stability and performance improvements
View originalPermalink
How Chrome Stable for iOS Update went

Chrome Beta for Desktop Update

The Beta channel has been updated to 152.0.7977.13 for Windows, Mac and Linux. A partial list of changes is available in the Git log . Interested in switching release channels? Find out how . If you f…

View originalPermalink
How Chrome Beta for Desktop Update went

Chrome Dev for Desktop Update

The Dev channel has been updated to 153.0.7979.3 for Windows, Mac and Linux. A partial list of changes is available in the Git log . Interested in switching release channels? Find out how . If you fin…

View originalPermalink
How Chrome Dev for Desktop Update went

Long Term Support Channel Update for ChromeOS

A new LTS version 150.0.7871.213 (Platform Version: 16700.60.0 ), is being rolled out for most ChromeOS devices. If you have devices in the LTC channel, they will be updated to this version. The LTS c…

View originalPermalink
How Long Term Support Channel Update for ChromeOS went

Chrome Beta for iOS Update

Hi everyone! We've just released Chrome Beta 152 (152.0.7977.11) for iOS; it'll become available on App Store in the next few days. You can see a partial list of the changes in the Git log . If you fi…

View originalPermalink
How Chrome Beta for iOS Update went

Chrome Beta for Android Update

Hi everyone! We've just released Chrome Beta 152 (152.0.7977.8) for Android. It's now available on Google Play . You can see a partial list of the changes in the Git log . For details on new features,…

View originalPermalink
How Chrome Beta for Android Update went

Chrome Dev for Android Update

Hi everyone! We've just released Chrome Dev 153 (153.0.7978.2) for Android. It's now available on Google Play . You can see a partial list of the changes in the Git log . For details on new features,…

View originalPermalink
How Chrome Dev for Android Update went

Chrome Beta for Desktop Update

The Chrome team is excited to announce the promotion of Chrome 152 to the Beta channel for Windows, Mac and Linux. Chrome 152.0.7977.8 contains our usual under-the-hood performance and stability tweak…

View originalPermalink
How Chrome Beta for Desktop Update went

Stable Channel Update for Desktop

The Stable channel has been updated to 151.0.7922.71/.72 for Windows and Mac and 151.0.7922.71 for Linux, which will roll out over the coming days/weeks. A full list of changes in this build is availa…

View originalPermalink
How Stable Channel Update for Desktop went

Chrome for Android Update

Hi, everyone! We've just released Chrome 151 (151.0.7922.71) for Android. It'll become available on Google Play over the next few days. This release includes stability and performance improvements. Yo…

Changed 1
  • Stability and performance improvements
View originalPermalink
How Chrome for Android Update went

Beta Channel Update for ChromeOS / ChromeOS Flex

The Beta channel is being updated to OS version 16733.33.0 (Browser version 151.0.7922.56) for most ChromeOS devices. If you find new issues, please let us know one of the following ways: File a bug V…

View originalPermalink
How Beta Channel Update for ChromeOS / ChromeOS Flex went

Long Term Support Channel Update for ChromeOS

A new LTS-144 version 144.0.7559.258 (Platform Version: 16503.91.0), is being rolled out for most ChromeOS devices. This version includes selected security fixes including: 515429352 High CVE-2026-116…

Security 1
  • Included security fixes for CVE-2026-116 and other vulnerabilities
View originalPermalink
How Long Term Support Channel Update for ChromeOS went

Extended Stable Updates for Desktop

The Extended Stable channel has been updated to 150.0.7871.212 for Windows and Mac which will roll out over the coming days/weeks. A full list of changes in this build is available in the log . Intere…

View originalPermalink
How Extended Stable Updates for Desktop went

Chrome Stable for iOS Update

Hi everyone! We've just released Chrome Stable 151 (151.0.7922.57) for iOS; it'll become available on App Store in the next few hours. This release includes stability and performance improvements. You…

Changed 1
  • Stability and performance improvements
View originalPermalink
How Chrome Stable for iOS Update went

151

Latest
Added 8
  • Add a read-only animation attribute to the AnimationEvent and TransitionEvent interfaces that returns the associated Animation object that triggered the event
  • Add support for the ruby-overhang CSS property to control the overhang of ruby annotation text
  • Add the shadowrootslotassignment attribute to the <template> element to allow declarative shadow roots to use manual slot assignment
  • Enable servers to opt in to having their cross-origin redirects measured by the destination origin of a navigation
  • Add soft-navigation and interaction-contentful-paint entry types to the performance timeline to track interaction-driven performance in single-page applications
  • Extend speculation rules syntax to let developers specify the form_submission field for prerendering
  • Add textStream() method to Request, Response, and Blob interfaces as a convenient shorthand equivalent to piping the byte stream through a TextDecoderStream
  • Introduce the declarative <usermedia> capability element, a browser-controlled control for starting and interacting with media streams
Changed 5
  • Change the initial value of the position-anchor CSS property from none to normal to align with the specification and other browsers
  • Prevent auto-rewind when an animation associated with an AnimationTrigger has already run to completion and the play, play-forwards, or play-backwards trigger actions are invoked
  • Update XML parsing engine to a memory-safe Rust implementation for non-XSLT scenarios including DOMParser, XMLHttpRequest.responseXML, standalone SVG image documents, and external SVG image resources
  • Prevent an ongoing navigation from being canceled by a new, identical navigation initiated in rapid succession
  • Replace the existing direct-sockets-private permission policy with more granular local-network and loopback-network permission policies

Stable release date: July 28th, 2026 Unless otherwise noted, the following changes apply to Chrome 151 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
Animation accessor on animation and transition events

Adds a read-only animation attribute to the AnimationEvent and TransitionEvent interfaces. This attribute returns the associated Animation object that triggered the event. Tracking bug #40929813 | ChromeStatus.com entry | Spec

CSS ruby-overhang property

Adds support for the ruby-overhang CSS property. The property accepts auto, spaces, or none keywords to control the overhang of ruby annotation text. Per the CSS Working Group specification, none is aliased to spaces, which lets text overhang only over whitespace and CJK punctuation. This prevents unnecessary layout gaps while preserving text readability. Tracking bug #366873207 | ChromeStatus.com entry | Spec

Change the position-anchor initial value to normal

Changes the initial value of the position-anchor CSS property from none to normal to align with the specification and other browsers. The normal value behaves like none if the position-area CSS property is none, and otherwise behaves as auto. ChromeStatus.com entry | Spec

No auto-rewind for AnimationTrigger play methods

When an animation associated with an AnimationTrigger has already run to completion, invoking the play, play-forwards, or play-backwards trigger actions will no longer cause the animation to restart or auto-rewind. Tracking bug #519573765 | ChromeStatus.com entry | Spec

DOM and HTML
Declarative shadow DOM: shadowrootslotassignment attribute

Adds the shadowrootslotassignment attribute to the element, which lets declarative shadow roots use manual slot assignment. Previously, this option was only available imperatively by using attachShadow({slotAssignment: "manual"}). The attribute accepts named (the default, preserving existing behavior) and manual, and is reflected by the shadowRootSlotAssignment property on HTMLTemplateElement. Tracking bug #493315747 | ChromeStatus.com entry | Spec

XML parsing in Rust for non-XSLT scenarios

To improve browser security and protect against memory-related vulnerabilities, Chrome is updating its XML parsing engine to a memory-safe Rust implementation for common scenarios where XSLT is not required. This update eliminates potential memory corruption bugs while maintaining full compatibility with web specifications. The new parser handles DOMParser, XMLHttpRequest.responseXML, standalone SVG image documents, and external SVG image resources. Tracking bug #466303347 | ChromeStatus.com entry | Spec

Performance and networking
Cross-origin redirect timing opt-in

Enables servers to opt in to having their cross-origin redirects measured by the destination origin of a navigation. This lets developers measure and optimize redirect latency for navigations under their control. Tracking bug #521861828 | ChromeStatus.com entry | Spec

Navigation: Ignore duplicate navigations

Prevents an ongoing navigation from being unnecessarily canceled by a new, identical navigation initiated in rapid succession. This optimization improves performance and user experience by avoiding wasted network resources on duplicate requests caused by accidental double-clicks. Tracking bug #366060351 | ChromeStatus.com entry | Spec

PerformanceSoftNavigation and InteractionContentfulPaint performance entries

Adds soft-navigation and interaction-contentful-paint entry types to the performance timeline to track interaction-driven performance in single-page applications (SPAs). The interaction-contentful-paint entry reports on new contentful paints within parts of the page modified by a user interaction, helping developers understand interaction loading latency even across asynchronous fetch requests. The soft-navigation entry reports same-document history state changes initiated by interactions, establishing a new time origin to attribute subsequent performance data to the active route rather than the initial document URL. Tracking bug #1338390 | ChromeStatus.com entry | Spec

Permission policy merger: direct-sockets-private with local-network and loopback-network

Replaces the existing direct-sockets-private permission policy with more granular local-network and loopback-network permission policies. Isolated Web App manifests now require these specific policies to enable Direct Sockets connections to local or loopback network addresses, providing developers with more precise control over network access and making network requirements transparent in the manifest. ChromeStatus.com entry | Spec

Speculation rules: form_submission field

Extends speculation rules syntax to let developers specify the form_submission field for prerendering. This directs the browser to prepare the prerender as a form submission so that it can be activated by real form submission navigations, such as search forms resulting in a GET request navigation. Tracking bug #346555939 | ChromeStatus.com entry | Spec

textStream() for Response, Request, and Blob

Adds a textStream() method to interfaces that represent a byte stream (Request, Response, and Blob). This provides a convenient shorthand equivalent to piping the byte stream through a TextDecoderStream(). Tracking bug #514448226 | ChromeStatus.com entry | Spec

Media, Sensors, and Input
Capability element: MVP

Introduces the declarative capability element, a browser-controlled control for starting and interacting with media streams. By embedding a browser-controlled element in the page, a user click provides a clear, intentional signal before triggering permission prompts. This improves the prompt user experience and provides a straightforward recovery path for users who have previously denied the permission. Tracking bug #443013457 | ChromeStatus.com entry | Spec

DeviceOrientation events permission request API

Lets web developers call DeviceOrientationEvent.requestPermission() and DeviceMotionEvent.requestPermission() to ask the user agent for device orientation and motion data to be shared with the page. These static methods return a promise that resolves to either granted or denied based on whether the user has allowed sensor data sharing. Tracking bug #947112 | ChromeStatus.com entry | Spec

Wheel event momentum

Exposes a momentum boolean attribute on wheel events to identify events generated by native platform scrolling inertia. After a user lifts their finger from a trackpad following a fling interaction, native platforms continue firing wheel events to simulate inertia. The momentum attribute differentiates these simulated events from physical trackpad interactions, letting developers ignore fling events or customize rich fling effects. Tracking bug #40704952 | ChromeStatus.com entry | Spec

Accessibility and Web Speech
aria-actions attribute

Adds support for the aria-actions attribute. For UI patterns where secondary actions are placed within composite interactive widgets, the aria-actions attribute lets developers expose these secondary action buttons directly to assistive technologies for improved discoverability. Tracking bug #514751946 | ChromeStatus.com entry | Spec

Web Speech API: Unspoken punctuation

Adds the unspokenPunctuation boolean attribute to the SpeechRecognition interface of the Web Speech API. When enabled (true), this attribute directs the speech recognition engine to automatically infer and insert punctuation marks (such as periods, commas, and question marks) based on natural pauses, grammatical structure, and prosody, without requiring explicit spoken punctuation commands. Tracking bug #514764702 | ChromeStatus.com entry | Spec

Artificial Intelligence
LanguageDetector support for Traditional vs. Simplified Chinese

Adds two new detectable language codes, zh-Hant (Traditional Chinese) and zh-Hans (Simplified Chinese), to the Language Detector API. Detection results that previously returned zh will now return one of these more specific values. Tracking bug #519251262 | ChromeStatus.com entry | Spec

Origin trials
Algorithm updates in WebCrypto

Adds post-quantum cryptography algorithms and a common symmetric AEAD algorithm to the Web Cryptography API, enabling developers to access browser-provided implementations of NIST-standardized quantum-resistant algorithms: ML-KEM (768, 1024), ML-DSA (44, 65, 87), ChaCha20-Poly1305, and X-Wing. Origin Trial | Tracking bug #450627017 | ChromeStatus.com entry | Spec

Declarative Performance Observer

Proposes a reliable, browser-resident telemetry system that reports performance metrics from navigation initiation to page termination using a declarative HTTP response header. This ensures telemetry data is captured even in scenarios where the request fails due to network errors or if the renderer process is terminated by the operating system. Tracking bug #505208781 | ChromeStatus.com entry

Prefetch activation beacon

Introduces the on-prefetch-activation HTTP response header, enabling servers to specify a telemetry endpoint that the browser notifies whenever a prefetched resource is used for a navigation. This gives developers a reliable signal to measure the precision and performance impact of their prefetch strategies. Origin Trial | Tracking bug #499814382 | ChromeStatus.com entry | Spec

WebRTC Data Channel: SCTP Negotiation Acceleration Protocol

Accelerates WebRTC Data Channel establishment by embedding Stream Control Transmission Protocol (SCTP) initialization parameters directly within the Session Description Protocol (SDP) offer/answer exchange. This reduces data channel setup time by up to two network round-trip times. Origin Trial | Tracking bug #426480601 | ChromeStatus.com entry | Spec

Deprecations and removals
Chrome 151 removes support for macOS 12

Chrome 150 is the last release to support macOS 12. Starting with Chrome 151, macOS 13 or later is required. On Macs running macOS 12, Chrome will continue to function and display an infobar warning, but will no longer receive security or feature updates. ChromeStatus.com entry

Remove [LegacyNoInterfaceObject] from FontFaceSet IDL

Removes [LegacyNoInterfaceObject] from the FontFaceSet IDL so that FontFaceSet is properly exposed as a global property on the window object. Because no constructor is defined in the IDL, calling new FontFaceSet() from JavaScript now throws a TypeError: Illegal constructor, matching the specification and aligning with Firefox and Safari. Tracking bug #477568263 | ChromeStatus.com entry | Spec

View originalPermalink
How 151 went

Chrome Dev for Desktop Update

The Dev channel has been updated to 152.0.7967.2 for Windows, Mac and Linux. A partial list of changes is available in the Git log . Interested in switching release channels? Find out how . If you fin…

View originalPermalink
How Chrome Dev for Desktop Update went

Stable Channel Update for Desktop

The Stable channel has been updated to 150.0.7871.186/.187 for Windows and Mac and 150.0.7871.186 for Linux, which will roll out over the coming days/weeks. A full list of changes in this build is ava…

View originalPermalink
How Stable Channel Update for Desktop went

Chrome for Android Update

Hi, everyone! We've just released Chrome 150 (150.0.7871.186) for Android. It'll become available on Google Play over the next few days. This release includes stability and performance improvements. Y…

Changed 1
  • Stability and performance improvements
View originalPermalink
How Chrome for Android Update went

Chrome Dev for Android Update

Hi everyone! We've just released Chrome Dev 152 (152.0.7965.2) for Android. It's now available on Google Play . You can see a partial list of the changes in the Git log . For details on new features,…

View originalPermalink
How Chrome Dev for Android Update went

Chrome for Android Update

Hello Everyone! We've just released Chrome 151 (151.0.7922.47) for Android to a small percentage of users. It'll become available on Google Play over the next few days. You can find more details about…

View originalPermalink
How Chrome for Android Update went

Early Stable Update for Desktop

The Stable channel has been updated to 151.0.7922.47/.48 for Windows and Mac as part of our early stable release to a small percentage of users. A full list of changes in this build is available in th…

View originalPermalink
How Early Stable Update for Desktop went

Chrome Beta for Desktop Update

The Beta channel has been updated to 151.0.7922.47 for Windows, Mac and Linux. A partial list of changes is available in the Git log . Interested in switching release channels? Find out how . If you f…

View originalPermalink
How Chrome Beta for Desktop Update went

Chrome Beta for Android Update

Hi everyone! We've just released Chrome Beta 151 (151.0.7922.47) for Android. It's now available on Google Play . You can see a partial list of the changes in the Git log . For details on new features…

View originalPermalink
How Chrome Beta for Android Update went

Long Term Support Channel Update for ChromeOS

A new LTS version 150.0.7871.150 (Platform Version: 16700.46.0 ), is being rolled out for most ChromeOS devices. If you have devices in the LTC channel, they will be updated to this version. The LTS c…

View originalPermalink
How Long Term Support Channel Update for ChromeOS went

Beta Channel Update for ChromeOS / ChromeOS Flex

The Beta channel is being updated to OS version 16733.26.0 (Browser version 151.0.7922.42) for most ChromeOS devices. If you find new issues, please let us know one of the following ways: File a bug V…

View originalPermalink
How Beta Channel Update for ChromeOS / ChromeOS Flex went

Stable Channel Update for Desktop

The Stable channel has been updated to 150.0.7871.181/.182 for Windows and Mac and 150.0.7871.181 for Linux, which will roll out over the coming days/weeks. A full list of changes in this build is ava…

View originalPermalink
How Stable Channel Update for Desktop went

Chrome for Android Update

Hi, everyone! We've just released Chrome 150 (150.0.7871.181) for Android. It'll become available on Google Play over the next few days. This release includes stability and performance improvements. Y…

Added 1
  • Chrome 150 (150.0.7871.181) released for Android
Changed 1
  • Improved stability and performance
View originalPermalink
How Chrome for Android Update went

Chrome Stable for iOS Update

Hi everyone! We've just released Chrome Stable 151 (151.0.7922.43) for iOS; it'll become available on App Store in the next few hours. This release includes stability and performance improvements. You…

Changed 1
  • Improved stability and performance
View originalPermalink
How Chrome Stable for iOS Update went

Chrome Beta for iOS Update

Hi everyone! We've just released Chrome Beta 151 (151.0.7922.43) for iOS; it'll become available on App Store in the next few days. You can see a partial list of the changes in the Git log . If you fi…

View originalPermalink
How Chrome Beta for iOS Update went

Chrome Beta for iOS Update

Hi everyone! We've just released Chrome Beta 151 (151.0.7922.44) for iOS; it'll become available on App Store in the next few days. You can see a partial list of the changes in the Git log . If you fi…

View originalPermalink
How Chrome Beta for iOS Update went

150

Added 14
  • Add AccentColor and AccentColorText system colors in CSS to access the system accent color specified on the user's device
  • Add optional corner-rounding parameter for polygon() CSS shape function
  • Make CSS zoom property animatable and interpolate as a number
  • Add CSS url() request modifiers cross-origin(), integrity(), and referrer-policy() to control fetch behavior of referenced resources
  • Add CSS text-fit property to scale font size of text nodes to fit the width of containing box
  • Implement border-area value for CSS background-clip property

Stable release date: June 30th, 2026 Unless otherwise noted, the following changes apply to Chrome 150 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
AccentColor and AccentColorText system colors

The AccentColor and AccentColorText system colors can be used in CSS to access the system accent color specified on the user's device. This lets developers apply native-app-like styling to their web content in contexts where users expect OS theme integration, such as an installed web application. Users must be in an installed web application on the initial profile to see the system accent color rendered. Tracking bug #40229450 | ChromeStatus.com entry | Spec

Allow optional rounding parameter for polygon()

Adds an optional corner-rounding parameter in the polygon() CSS shape function. Developers can specify a length value to round polygon corners without manually computing bezier curves. Tracking bug #329302249 | ChromeStatus.com entry | Spec

Animatable zoom

The CSS zoom property is animatable and interpolates as a . Developers can transition and animate zoom to smoothly scale elements and their layout, complementing existing transform-based scaling. Tracking bug #393810951 | ChromeStatus.com entry

CSS url() request modifiers

CSS url() functions accept optional request modifiers after the quoted URL string: cross-origin(), integrity(), and referrer-policy(). These modifiers control the fetch behavior of the referenced resource directly from CSS, without requiring changes to HTML markup or JavaScript. For example, background-image: url("image.png" cross-origin(anonymous)) fetches the image using CORS anonymous mode. This gives authors fine-grained control over cross-origin access, subresource integrity, and referrer policy for CSS-loaded resources including images, fonts, SVG references, and imported stylesheets. Tracking bug #435625756 | ChromeStatus.com entry | Spec

CSS text-fit property

Scales the font size of text nodes to perfectly fit the width of its containing box. This property lets developers ensure headlines or dynamic content fill the available horizontal space without manual font-size calculations or complex JavaScript workarounds. It provides a robust, CSS-native solution for responsive typography that maintains visual alignment across different screen sizes and varying text lengths. Tracking bug #417306102 | ChromeStatus.com entry | Spec

CSS background-clip: border-area

Implements the border-area value for the CSS background-clip property, as defined in CSS Backgrounds Level 4. background-clip: border-area clips an element's background to the area painted by its border strokes, taking border-width and border-style into account while ignoring transparency from border-color. This lets developers gradient borders without border-image. WebKit already ships this feature; this implementation brings Chromium to parity. Tracking bug #329302543 | ChromeStatus.com entry | Spec

CSS image() function

The image() function lets authors generate a solid-color image from any color. Its syntax is: image() = image( ) Tracking bug #510426954 | ChromeStatus.com entry | Spec

CSS light-dark() with image values

Extends the CSS light-dark() function to accept image values (url(), image-set(), none) in author stylesheets, letting image properties like background-image, list-style-image, border-image-source, cursor, and content automatically switch between images based on the user's preferred color scheme. Previously this was only allowed in UA stylesheets. This aligns with the CSS Color 5 specification and matches Firefox's existing implementation. Tracking bug #491829958 | ChromeStatus.com entry | Spec

Comma-separated container queries

Support multiple queries per @container rule. The @container rule applies if at least one of the queries matches. This makes it possible to have fallback queries for features which are not supported in all browsers. Tracking bug #41491726 | ChromeStatus.com entry | Spec

Expose unprintable areas with CSS

Printers usually have a small area at each of the four edges of a sheet of paper that they are not capable of marking reliably, usually due to the printer's paper handling mechanism. The default page margins are expected to be bigger than these areas, but if authors set margins on their own, and even want to add @page margin boxes (for example, for custom headers and footers), they need a way of telling where it's safe to print and not. The CSS descriptor page-margin-safety can be used to steer clear of such unprintable areas. Tracking bug #368070327 | ChromeStatus.com entry | Spec

flex-wrap: balance

flex-wrap: balance lets developers distribute content between flex-lines so that it appears more balanced (similar to text-wrap: balance). Tracking bug #416755656 | ChromeStatus.com entry | Spec

named-feature() function for CSS @supports

The named-feature() function lets CSS @supports rules query for a small set of specific named features that are not possible to test for using other @supports mechanisms but which are considered highly valuable to test for. Tracking bug #353715317 | ChromeStatus.com entry | Spec

overscroll-behavior: chain

overscroll-behavior now has for values: none, auto, contain and the new value chain. These values affect two independent effects: scroll propagation and local border effect (for example, overscroll stretch).

  • none: no propagation, no local effect
  • auto: propagation, local effect
  • contain: no propagation, local effect
  • chain: propagation, no local effect Tracking bug #499018879 | ChromeStatus.com entry | Spec
Support path-length as a CSS property.

This change introduces a new CSS property, path-length, which maps to the existing SVG pathLength presentation attribute. It applies to SVG geometry elements that support pathLength (including , , , , , , and ). Tracking bug #40670251 | ChromeStatus.com entry | Spec

DOM and HTML
Clone into all descendant selectedcontent elements

Several small changes are being made to edge cases of the selectedcontent element:

  • When multiple selectedcontent elements are put in a select element at the same time, all of them will be kept up to date instead of only the first one in DOM order.
  • Updating the selectedcontent element is deferred when it would run during insertion, removal, or moving steps to fix security issues. The update is deferred by using post-insertion steps or microtasks. Tracking bug #458113204 | ChromeStatus.com entry | Spec
Focusgroup

Provides the ability to declaratively give composite widgets arrow key navigation, a guaranteed tab stop, and last-focused memory, replacing hand-coded roving tabindex scripts. Example:

View originalPermalink
How 150 went

149

Added 7
  • CSS gap decorations with new properties column-rule-inset, row-rule-inset, column-rule-visibility-items, and row-rule-visibility-items to style gaps in container layouts like grid and flexbox
  • Support for animation of CSS gap decoration rule width, color, and insets
  • Support for path() and shape() functions in CSS shape-outside property for defining float exclusion shapes
  • Support for rect() and xywh() basic shape functions in CSS shape-outside property
  • Support for image-rendering: crisp-edges to scale images preserving contrast and edges using nearest-neighbor scaling
  • Introduce path-length as a CSS property for SVG geometry elements
  • Add Intl.Locale.prototype.variants to support variants in Intl.Locale constructor options
Changed 8
  • Text with text-overflow: ellipsis temporarily switches from ellipsis to clip when user interacts by editing or using caret navigation
  • Removed erroneous border-color: gray CSS rule from UA stylesheet for table elements to allow borders to default to currentColor
  • User action pseudo-classes :hover, :active, and :focus-within now match only up to the first top layer element in parent chain
  • Restrict access to system accent color for CSS keywords AccentColor and AccentColorText and accent-color: auto to web app and initial profile context
  • Payment Request API payment handlers can report distinct errors for user cancellation versus internal payment app errors
  • Chrome respects autocorrect="off" attribute for Windows touch keyboard in TSF integration
  • Asynchronous Clipboard API defer actual clipboard data retrieval until web application calls getType() to reduce CPU usage
  • WebSocket connections are closed on bfcache entry instead of preventing page from entering Back/Forward Cache

Stable release date: June 2nd, 2026 Unless otherwise noted, the following changes apply to Chrome 149 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
CSS gap decorations

CSS gap decorations let you style gaps in container layouts like grid and flexbox, similar to column-rule in multiple-column layout. This feature is highly requested by web developers who must use hacks to style the gaps in grid and flexbox layouts today. It brings new CSS properties like column-rule-inset, row-rule-inset, column-rule-visibility-items, and row-rule-visibility-items, and supports animation of rule width, color, and insets. CSS gap decorations blog post | Tracking bug #357648037 | ChromeStatus.com entry | Spec

Clip text overflow on user interaction

When a user interacts (for example, by editing or using caret navigation) with text that has text-overflow: ellipsis set, the text temporarily switches from ellipsis to clip. This lets the user see and interact with the hidden overflow content. This feature applies to all editable and non-editable elements. For form controls, such as and , this behavior is already supported. Tracking bug #40731275 | ChromeStatus.com entry | Spec

Remove explicit border color UA stylesheet rule for tables

This change removes the erroneous border-color: gray CSS rule from the UA stylesheet for the element. The HTML specification does not contain this rule, and it prevented borders from defaulting to currentColor. Neither Firefox nor WebKit have this gray border color rule in their UA stylesheet, leading to interoperability issues. Tracking bug #494554835 | ChromeStatus.com entry | Spec

Support path() and shape() in shape-outside

Adds support for the path() and shape() shape functions in the CSS shape-outside property. These functions let developers define float exclusion shapes more flexibly and support animation. Tracking bug #502328208 | ChromeStatus.com entry | Spec

Support rect() and xywh() in shape-outside

Adds support for the rect() and xywh() basic shape functions in the CSS shape-outside property. These functions let developers define float exclusion shapes using rectangle coordinates, aligning Chrome with Firefox and Safari which already support this feature. Tracking bug #490343453 | ChromeStatus.com entry | Spec

User action pseudo-class top layer boundary

Changes :hover, :active, and :focus-within matching on parents of elements to match only up to the first top layer element in the parent chain. Since top layer elements are typically rendered disconnected from their parent chain visually, it does not make sense to change parent styles when a top layer element is hovered or activated. Tracking bug #407769114 | ChromeStatus.com entry | Spec

Web app scope system accent color

Restricts access to the system accent color for CSS keywords (AccentColor and AccentColorText) and accent-color: auto to be only within a web app and initial profile context. This limits a significant fingerprinting vector when exposing the user's system colors widely on the web. Tracking bug #481353056 | ChromeStatus.com entry | Spec

image-rendering: crisp-edges

image-rendering: crisp-edges indicates that image should be scaled in a way that preserves contrast and edges, and which avoids smoothing colors or introducing blur to the image in the process. Chrome, Firefox, and Safari treat crisp-edges and pixelated as synonyms and implement both using nearest-neighbor scaling. Tracking bug #41073066 | ChromeStatus.com entry | Spec

Support 'path-length' as a CSS property

Introduces a new CSS property, path-length, which maps to the SVG pathLength presentation attribute. This applies to SVG geometry elements that support pathLength (including , , , , , , and ), allowing authors to specify it in stylesheets, inline styles, and animations. Tracking bug #40670251 | ChromeStatus.com entry | Spec

Web APIs
Intl.Locale.prototype.variants

Adds Intl.Locale.prototype.variants as stated in the ECMA-402 specification, and accepts variants in the options bag in the Intl.Locale constructor. ChromeStatus.com entry | Spec

Payment Request: Allow payment handlers to report back internal errors

Lets payment handlers accessed using the Payment Request API return distinct errors for "user cancelled" (AbortError) versus "internal payment app error" (OperationError). This lets developers retry or fall back to a different flow when an internal app error occurs, while properly stopping if the user cancels. Tracking bug #473478138 | ChromeStatus.com entry | Spec

Respect autocorrect="off" for Windows touch keyboard in TSF

Makes Chrome's TSF integration detect and revert touch keyboard autocorrections on Windows when the focused editable element has autocorrect="off" set. Tracking bug #487613498 | ChromeStatus.com entry | Spec

Selective Clipboard Format Read

Enhances the Asynchronous Clipboard API by deferring actual clipboard data retrieval from the OS until the web application calls getType(). Instead of eagerly fetching all available formats at read() time, the browser now returns ClipboardItem objects with available MIME types but without the underlying data, which reduces CPU usage and improves responsiveness. Tracking bug #435051711 | ChromeStatus.com entry | Spec

Network and connectivity
Disconnect WebSockets on bfcache entry

Active WebSocket connections no longer prevent a page from entering the Back/Forward Cache (bfcache). By closing connections on bfcache entry instead of marking the document as ineligible, the browser allows pages with active WebSockets to be stored and restored. Tracking bug #467838624 | ChromeStatus.com entry | Spec

New origin trials
Gamepad event-driven input API

Extends the Gamepad API with a new event-driven model that lets applications receive gamepad input with lower latency. Instead of relying on frequent polling using navigator.getGamepads(), developers can now listen for a rawgamepadinputchange event, which fires whenever new input data is available from the device. Origin Trial | Tracking bug #40582297 | ChromeStatus.com entry | Spec

Permissions Policy: focus-without-user-activation

Lets embedders control programmatic focus from embedded content with the focus-without-user-activation permissions policy. When the policy is denied for a frame, programmatic focus calls (element.focus(), autofocus, window.focus(), dialog.showModal(), and popover focusing) are blocked unless triggered by user activation. Origin Trial | Tracking bug #40095111 | ChromeStatus.com entry | Spec

WebAssembly custom descriptors

Lets WebAssembly store data associated with source-level types more efficiently in new "custom descriptor" objects. These custom descriptors can be configured with prototypes for the WebAssembly objects of that source-level type, which lets methods be installed on a WebAssembly object's prototype chain and called directly from JavaScript using normal method call syntax. Origin Trial | Tracking bug #403372470 | ChromeStatus.com entry | Spec

View originalPermalink
How 149 went

148

Added 8
  • CSS name-only container queries allow querying a container based on its container-name without requiring a container-type
  • CSS at-rule() function in @supports enables feature detection for CSS at-rules
  • Open Font Format avar2 support for improved variable font control over interpolation across multiple design axes
  • CSS revert-rule keyword rolls back the cascade to the previous rule
  • Lazy loading attribute for video and audio elements with loading="lazy" to defer media resource loading
  • CSS text-decoration-skip-ink: all value unconditionally applies ink-skipping to all glyphs including CJK characters
  • Web app manifest localization support for adapting names, descriptions, icons, and shortcuts based on user language and region
  • Web Serial API support on Android for connecting to serial devices
Fixed 2
  • Correctly set dropEffect attribute for dragEnter, dragLeave, and dragOver events according to HTML specifications
  • Implement pointer event suppression on drag start by sending pointercancel, pointerout, and pointerleave events to drag sources

Stable release date: May 5th, 2026 Unless otherwise noted, the following changes apply to Chrome 148 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
CSS name-only container queries

A CSS query container can be queried based on its container-name only, and the container does not need any container-type set: #container { container-name: --foo; } @container --foo { input { background-color: green; } }

View originalPermalink
How 148 went

147

Added 8
  • Element.startViewTransition() on arbitrary HTML elements for element-scoped view transitions
  • CSS contrast-color() function to meet contrast requirements for accessibility
  • Timeline named range scroll feature for view timelines
  • CSS border-shape property to create non-rectangular borders with arbitrary shapes
  • CSSPseudoElement interface to represent pseudo-elements in JavaScript
  • pseudoTarget property on UIEvent, AnimationEvent, and TransitionEvent to indicate pseudo-element interactions
  • Support for path attribute on SVG <textPath> element to define text path geometry inline
  • WebXR Plane Detection API to retrieve sets of planes detected in the user's environment
Changed 1
  • border-width, outline-width, and column-rule-width computed values now reflect author-specified values independent of *-style properties

Stable release date: April 7th, 2026 Unless otherwise noted, the following changes apply to Chrome 147 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
Element-scoped view transitions

Exposes element.startViewTransition() on arbitrary HTML elements. The element establishes a scope for the transition, which means that the transition pseudo-elements are affected by ancestor clips and transforms, and multiple transitions on separate elements can run concurrently. Tracking bug #394052227 | ChromeStatus.com entry | Spec

CSS contrast-color()

This function helps you meet contrast requirements for accessibility. You can use the contrast-color() function anywhere in CSS where a color value is expected. It takes a color value argument and returns either 'black' or 'white', depending on which provides the highest contrast against the color argument. Tracking bug #40142548 | ChromeStatus.com entry | Spec

Timeline named range scroll

This feature expands the set of named ranges for view timelines by adding a scroll range to the existing set of entry, exit, cover, and contain. Tracking bug #41483848 | ChromeStatus.com entry | Spec

CSS border-shape property

The CSS border-shape property lets you create non-rectangular borders with any arbitrary shape, for example, a polygon, circle, or shape(). Although border-shape accepts the same shapes as clip-path, it is fundamentally different. border-shape defines the shape of the border, decorates it, and clips only the inside. border-shape has two variants: one that strokes a shape and another that fills between two shapes. Tracking bug #370041145 | ChromeStatus.com entry | Spec

CSSPseudoElement interface

The CSSPseudoElement interface represents a pseudo-element in JavaScript. CSSPseudoElement is returned from Element.pseudo(type), where type is currently ::after, ::before, or ::marker. CSSPseudoElement is a proxy object that represents a pseudo-element. Unlike a pseudo-element, a CSSPseudoElement always exists. The CSSPseudoElement has the following attributes and methods:

  • The type attribute is a string that represents the pseudo-element's type.
  • The element attribute is the pseudo-element's ultimate originating element.
  • The parent attribute is the pseudo-element's originating element (either Element or CSSPseudoElement for nested pseudo-elements).
  • The pseudo(type) method retrieves nested pseudo-elements. Tracking bug #40639103 | ChromeStatus.com entry | Spec
Pseudo target on events

Specific events now include a .pseudoTarget, which is either CSSPseudoElement (if the interaction was with a pseudo-element) or null. This provides more specific information about the event origin. For example, it indicates that a ::after pseudo-element was clicked, not just the ultimate originating element (Event.target). Note that Event.target remains unchanged, so the event only has extra information about pseudo-element interaction. The events are UIEvent, AnimationEvent, and TransitionEvent. mouseover, mouseout, mouseenter, mouseleave, and their pointer* counterparts are not yet supported. Tracking bug #40639103 | ChromeStatus.com entry | Spec

Decouple *-width and *-style properties

Chrome 147 aligns with updated CSS specifications for the behavior of the border-width, outline-width, and column-rule-width properties. Previously, if the corresponding border-style, outline-style, or column-rule-style was set to none or hidden, the computed width of these properties was forced to 0px, regardless of the specified value. With this change, the computed values of border-width, outline-width, and column-rule-width always reflect the author-specified values, independent of the *-style property. Additionally, the resolved values (as returned by getComputedStyle()) for outline-width and column-rule-width also reflect the specified values. This change aligns Chrome with Firefox and WebKit, which have already implemented this behavior. Tracking bug #393631108 | ChromeStatus.com entry | Spec

Support path attribute on SVG element

This change adds support for the path attribute on the SVG element. This lets developers define text path geometry inline using SVG path data and reduces the need for separately defined elements. The element resolves its text path geometry using the following rules:

  • If both path and href are present, geometry is resolved from the path attribute.
  • If only the path attribute is present and parses successfully, the inline path definition is used.
  • If the path attribute is absent or fails to parse, and an href attribute is provided, the referenced element is used as a fallback.
  • Existing href-only behavior is preserved without change. This implementation follows the SVG 2 specification's definition of the path attribute on . The resolution behavior is consistent with other browser engines, which improves interoperability and standards compliance. Note: When both path and href are specified on , path now takes precedence, according to the SVG 2 specification. Tracking bug #374010056 | ChromeStatus.com entry | Spec
Device
WebXR Plane Detection

The WebXR Plane Detection API lets sites retrieve the set of planes detected in the user's environment. This is less work for developers and more powerful than using the depth-sensing WebXR feature. For example, planes such as walls that are occluded by objects can still be fully represented if the system is aware of the wall's boundaries. A depth map would show the wall, but objects in front of it would break it up, potentially obscuring the wall's full scope. Furthermore, semantic labeling information is exposed when the device is aware of such labels and they fit into predefined categories, which provides better knowledge about the world. Tracking bug #394636076 | ChromeStatus.com entry | Spec

DOM
JSON and style support for link rel=modulepreload

Adds support for JSON and style module types as destinations. is already supported in Chromium (see Chromestatus feature), but it currently only supports preloading script-like module scripts. This feature addresses a functionality gap because JSON and CSS module scripts are supported in Chromium elsewhere but not as destinations. You can preload style modules with and JSON modules with . Tracking bug #466888680 | ChromeStatus.com entry | Spec

XML Parsing in Rust for non XSLT scenarios

Implements the Rust XML parser for scenarios where no XSLT processing is required. The Rust XML parser improves security by eliminating memory corruption bugs in XML parsing. It replaces the use of libxml2 (written in C) with a safe alternative. We are deprecating XSLT. While this process continues, you can already use safe Rust XML parsing in scenarios where XSLT is not required. Tracking bug #466303347 | ChromeStatus.com entry

Graphics
WebXR Layers

WebXR Layers offers a more efficient way to draw immersive content. In addition to supporting native color and depth textures and texture arrays, it also provides support for different layer types that the system compositor manages (as opposed to JavaScript). Tracking bug #409255534 | ChromeStatus.com entry | Spec

JavaScript
Math.sumPrecise

Implements a TC39 proposal to add a method to sum multiple values in JavaScript. Add an iterable-taking Math.sumPrecise method that returns the sum of the values in the iterable using a more precise algorithm than naive summation. Tracking bug #374310075 | ChromeStatus.com entry | Spec

Network / Connectivity
Request.isReloadNavigation attribute

Adds the read-only boolean attribute isReloadNavigation to the Fetch API's Request interface. This attribute indicates whether the current navigation request was initiated as a user-triggered reload (for example, using the Refresh button, location.reload(), or history.go(0)). This signal is primarily exposed on the Request object within a Service Worker's FetchEvent. Tracking bug #40487194 | ChromeStatus.com entry | Spec

Performance
Update Device Memory API limits

Updates to a new set of possible values for the Device Memory API:

  • Android: 1, 2, 4, 8
  • Others: 2, 4, 8, 16, 32 These values replace the old values of 0.25, 0.5, 1, 2, 4, and 8, which have grown outdated. This reduces fingerprinting risks at the lower end because device capabilities have improved since these were set. It also allows better usage and segmenting of high-end devices, as developers requested. For more information, see Device Memory issue. Tracking bug #454354290 | ChromeStatus.com entry | Spec
Local Network Access (LNA)

For more information about LNA, see Local Network Access.

Local Network Access restrictions on service worker WindowClient.navigate()

Local Network Access (LNA) restrictions were recently added to prevent websites from unilaterally making requests to local networks and local devices. These restrictions were added for service worker-initiated fetch requests but not for navigations that service workers perform through WindowClient.navigate(). This launch closes this gap by adding LNA restrictions to WindowClient.navigate() calls. It uses the WindowClient as the initiator of the navigation to determine if the navigation is an LNA request. This only applies if the WindowClient being navigated is a subframe. Chrome does not currently enforce any LNA restrictions on main frame navigations. ChromeStatus.com entry

Local network access restrictions for WebTransport

Restricts the ability to make requests to the user's local network using WebTransport, which is gated behind a permission prompt. A local network request is any request from a public website to a local IP address or loopback, or from a local website (for example, an intranet) to loopback. Gating websites' ability to perform these requests behind a permission reduces sites' ability to use these requests to fingerprint the user's local network. This permission is restricted to secure contexts. Tracking bug #421216834 | ChromeStatus.com entry | Spec

Local network access restrictions for WebSockets

Local Network Access (LNA) restrictions are expanding to include WebSockets. WebSockets connections to local addresses now trigger permission prompts. All current LNA enterprise policies still apply to the LNA WebSockets restrictions (LocalNetworkAccessAllowedForUrls, LocalNetworkAccessBlockedForUrls, and LocalNetworkAccessRestrictionsTemporaryOptOut). Tracking bug #421156866 | ChromeStatus.com entry | Spec

Isolated Web Apps (IWA)
Web Printing API

This API enables deeper integration with printer-related functionality in Isolated Web Apps. This API targets Isolated Web Apps only and follows the Isolated Web Apps process. This API provides a set of JavaScript methods that let developers query local printers, submit print jobs to the most appropriate printers, and manage print job options and status. To represent these concepts, it relies on attribute names and semantics from the Internet Printing Protocol (IPP) specifications. Tracking bug #302505962 | ChromeStatus.com entry | Spec

Origin trials
Prerender cross-origin iframes

Prerenders cross-origin iframes using an opt-in response header. Browsers now prerender all cross-origin frames if the top-level frame's HTTP response includes Supports-Loading-Mode: prerender-cross-origin-frames. Origin Trial | Tracking bug #440387014 | ChromeStatus.com entry | Spec

Autofill event

Autofill is a key web feature that reduces friction for millions of users every day. However, getting autofill to work reliably with dynamic forms across multiple implementations requires significant effort. …

View originalPermalink
How 147 went

146

Added 9
  • Add scroll-position-based control of animations through CSS scroll-triggered animations, allowing declarative creation of animations that play, pause, and reset based on scroll position
  • Add trigger-scope property to limit the names of animation triggers declared by trigger-instantiating properties
  • Add meta name="text-scale" to scale root element's default font size in proportion to operating system and browser text scale settings
  • Add scoped custom element registry to allow multiple custom element definitions for a single tag name within a page
  • Populate LaunchParams.targetURL when a PWA is launched with file handling
  • Add ability to register a post-commit handler while invoking a precommit handler in the Navigation API
Fixed 1
  • Stop re-queueing LaunchParams on page reload to prevent the launchQueue from re-sending the last LaunchParams when a user reloads the page

Stable release date: March 10th, 2026 Unless otherwise noted, the following changes apply to Chrome 146 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
Scroll-triggered animations

This feature adds scroll-position-based control of animations, for example, playing, pausing, and resetting animations. A common pattern on pages across the web is to start an animation when a scroll position is reached. Developers often do this by using JavaScript to manually detect that an element is within its scroll container's viewport and to start a corresponding animation (for example, sliding that element into view). Many of these use cases rely on declaratively provided information. This feature lets you create such interactions declaratively with CSS, which lets the user agent offload this interaction to a worker thread. The API also includes JavaScript interfaces that let you extend the feature to web animations in addition to CSS animations. Tracking bug #390314945 | ChromeStatus.com entry | Spec

The trigger-scope property

The trigger-scope property lets you limit the names of animation triggers declared by trigger-instantiating properties. Trigger-instantiating properties, for example, timeline-trigger, declare names that the animation-trigger property can reference to attach animations to triggers. However, these names are global by default (similar to anchor-name), and it is often useful to limit the visibility of the names to isolate animation-to-trigger interactions. Tracking bug #466134208 | ChromeStatus.com entry | Spec

meta name="text-scale"

The root element's default font size scales in proportion to both the operating system's and browser's text scale setting. This lets pages that follow best practices around font-relative units (that is, use rem and em for font sizes and page elements that adapt to user text size preferences) respect the user's OS-level text scale setting. This also disables existing browser-based mechanisms (that is, full-page zoom on windows) and heuristics (that is, text autosizing on mobile). You can signal to the browser that the page is constructed in a way (that is, with rem and em) that scales well across various user-selected font size preferences. Similar to env(preferred-text-scale), which provides a way to access the text scale, this API extends this by enabling scaling using the root element's default font size and opting out of automatic text scaling. Tracking bug #430566925 | ChromeStatus.com entry | Spec

Scoped custom element registry

This feature lets multiple custom element definitions for a single tag name exist within a page. This prevents custom element name conflicts when a web app uses libraries from multiple sources. This is achieved by allowing user code to create multiple custom element registries and associate them with tree scopes and elements that function as scoping objects. Tracking bug #40826514 | ChromeStatus.com entry | Spec

Capabilities
Populate targetURL during file handling

The Launch Handler implementation now ensures LaunchParams.targetURL is populated when a PWA is launched with file handling. Before this change, the property was null when a file launch was directed to an existing window. This change ensures that the URL from the manifest action field (the same URL the document must currently load) is available to the launchQueue consumer. Tracking bug #464314997 | ChromeStatus.com entry | Spec

Stop re-queueing LaunchParams on reload

Prevent the launchQueue from re-sending the last LaunchParams (including file handles) when a user reloads the page. Previously, a page refresh triggered the launch consumer again with the data from the original launch. This change ensures that a reload is treated as a standard navigation rather than a "re-launch," and the launchQueue won't be populated with duplicate files unless a new file launch event occurs. Tracking bug #40204185 | ChromeStatus.com entry

DOM
Navigation API: add post-commit handler from precommit

When intercepting navigations with the navigate event, precommitHandlers and post-commit ordinary handlers are passed separately. This works well when there is only one or the other, but can be cumbersome when the flow includes a precommitHandler that leads to a post-commit handler. This addition is a small ergonomic improvement that lets you register a post-commit handler while invoking a precommit handler. Tracking bug #465487215 | ChromeStatus.com entry | Spec

Graphics
WebGPU: Texture and Sampler Lets

Add a language feature to WGSL, texture_and_sampler_let, that lets you store texture and sampler objects into a let declaration in WGSL. Tracking bug #459500757 | ChromeStatus.com entry | Spec

WebGPU: Transient attachments

This feature adds functionality to the WebGPU spec after its first shipment in a browser. A new TRANSIENT_ATTACHMENT GPUTextureUsage lets you create attachments that let render pass operations stay in tile memory, avoiding VRAM traffic and potentially avoiding VRAM allocation for the textures. Tracking bug #462620664 | ChromeStatus.com entry | Spec

WebGPU Compatibility mode

This mode adds an opt-in, lightly restricted subset of the WebGPU API that can run older graphics APIs, for example, OpenGL and Direct3D11. By opting into this mode and obeying its constraints, you can extend the reach of your WebGPU applications to many older devices that don't have the modern, explicit graphics APIs that core WebGPU requires. For simple applications, the only required change is to specify the compatibility featureLevel when calling requestAdapter. For more advanced applications, some modifications might be necessary to accommodate the mode's restrictions. Since Compatibility mode is a subset, the resulting applications are also valid WebGPU Core applications and run even on user agents that don't support Compatibility mode. Tracking bug #442618060 | ChromeStatus.com entry | Spec

JavaScript
Iterator sequencing

A TC39 proposal to create iterators by sequencing existing iterators. This introduces Iterator.concat (...items). Tracking bug #434977727 | ChromeStatus.com entry | Spec

Selective permissions intervention

When you grant a website permission to access a powerful API (for example, Bluetooth, Camera, Clipboard, DisplayCapture, Geolocation, Microphone, Serial, and USB), your consent is intended for the site, not necessarily for every third-party script running on the page. In particular, embedded ad scripts running in the main frame or same-origin iframes can use the page's permission to opportunistically access this sensitive data. You might not be aware that an advertisement is accessing your information. This intervention aims to better align a granted permission with your intent by preventing ad script in a context with API permission from using it, reinforcing your trust and control over your data. Tracking bug #435214052 | ChromeStatus.com entry | Spec

Preserve dropEffect values from dragover to drop Events

The HTML5 Drag and Drop API lets web applications handle drag-and-drop operations through a series of events: dragstart, dragenter, dragover, dragleave, drop, and dragend. During these events, the dataTransfer.dropEffect property indicates which operation (copy, move, link, or none) should be performed. According to the HTML5 specification, the dropEffect value set by web applications during the last dragover event should be preserved and available in the subsequent drop event. However, Chromium-based browsers were overwriting the web application's dropEffect value with the browser's own negotiated operation before the drop event fired, breaking specification compliance and limiting your control over drag-and-drop behavior. This behavior has now been changed. Tracking bug #40068941 | ChromeStatus.com entry | Spec

Multimedia
Playback Statistics API for WebAudio

This feature adds an AudioContext.playbackStats attribute which returns an AudioPlaybackStats object. This object provides audio playback statistics, for example, average latency, minimum/maximum latency, underrun duration, and underrun count. This API lets web applications monitor audio playback quality and detect glitches. Tracking bug #475838360 | ChromeStatus.com entry | Spec

Network
Data URL MIME Type Parameter Preservation

Preserve MIME type parameters (for example, charset, boundary) in data URL Content-Type headers as specified in the Fetch Standard. Tracking bug #40487194 | ChromeStatus.com entry | Spec

Performance
LCP: Match specced behavior for emitting candidates

The LCP algorithm now emits candidates based on the largest painted image instead of the largest pending-but-not-yet-painted image. This might cause more intermediate candidates to be emitted to the performance timeline. In each animation frame, after it has been presented, the LCP algorithm emits a new candidate (at most one) to the performance timeline if there is a new largest text or image that was painted in that frame. The algorithm also tracks the "largest pending image", which is the largest still-loading image, and uses that image's size to determine whether the new candidate is largest. This means a slow loading large image can prevent emission of intermediate LCP candidates, and these candidates often provide useful information for you to understand the loading progression. This behavior emerged during Interop 2025 as a difference with other engines, and the team agreed to align to emit at most one candidate per frame based on the set of painted image and text elements for that frame. Tracking bug #482261053 | ChromeStatus.com entry | Spec

Security
Sanitizer API

The Sanitizer API offers a way to remove content that might execute script from arbitrary, user-supplied HTML content. The goal is to make it easier to build XSS-free web applications. Tracking bug #40138584 | ChromeStatus.com entry | Spec

Origin trials
WebNN

WebNN lets web applications and frameworks take advantage of native operating system services for machine learning and the underlying hardware capabilities available on your computer to implement consistent, efficient, and reliable ML experiences on the web. Origin Trial | Tracking bug #40206287 | ChromeStatus.com entry | Spec

CPU Performance API

This API exposes information about your device's power. This API targets web applications that use this information to provide an improved user experience, possibly in combination with the Compute Pressure API, which provides information about the device's CPU pressure or utilization and lets applications react to changes in CPU pressure. Tracking bug #449760252 | ChromeStatus.com entry | Spec

Speculation rules: form_submission field

This extends speculation rules syntax, letting you specify the form_submission field for prerender. This field directs the browser to prepare the prerender as a form submission, so it can be activated by real form submission navigations. For example, a simple search form results in a /search?q=XXX GET request navigation; web developers have requested support for this. Tracking bug #346555939 | ChromeStatus.com entry | Spec

Focusgroup

The Focusgroup feature facilitates keyboard focus navigation among a set of focusable elements by using the keyboard arrow keys. Learn more about focusgroup in Request for developer feedback: focusgroup. Origin Trial | Tracking bug #1286127 | ChromeStatus.com entry | Spec

View originalPermalink
How 146 went

145

Added 7
  • Support for the text-justify CSS property to control how text is justified when text-align: justify is applied
  • Enable percentage values for the letter-spacing and word-spacing CSS properties, calculated relative to the advance measure of the space character
  • Support for the column-wrap and column-height CSS properties from multicol Level 2, enabling vertical and 2D column layout with explicit constrained height
  • Expose onanimationcancel event handler to GlobalEventHandlers
  • Extend customizable select support to the listbox rendering mode for single-select and multi-select using the multiple or size attributes
  • Support focusVisible option on the focus() method to control whether a focus ring is painted
  • Show elastic overscroll effects on non-root scroll containers when they reach their scroll boundary
Changed 3
  • Refine border-radius shadow edge computation for high border-radius to ensure shadows and clip boundaries on near-circular elements precisely match the visual contour
  • Enable monochrome emoji rendering in forced colors mode to ensure emojis respect system high-contrast colors
  • Accurately report the browser window's position and size on Android using window.screenX, window.screenY, window.outerWidth, and window.outerHeight instead of assuming all windows start at (0, 0)

Stable release date: February 10th, 2026 Unless otherwise noted, the following changes apply to Chrome 145 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
Add support for the text-justify CSS property

You can control how text is justified when text-align: justify is applied by using the text-justify property. For example, you can force justification by expanding inter-character space even in English text. Tracking bug #40321528 | ChromeStatus.com entry | Spec

Enable percentage values for CSS letter-spacing and word-spacing properties

Enable percentage values for the letter-spacing and word-spacing CSS properties, as defined in the CSS Text Module Level 4 specification. Percentage values are calculated relative to the advance measure of the space character (U+0020). This provides you with more robust and flexible control over typography, particularly in responsive designs where text spacing needs to adapt to different viewports and font sizes. Tracking bug #327740939 | ChromeStatus.com entry | Spec

Refine border-radius shadow edge computation for high border-radius

This change ensures that shadows and clip boundaries on near-circular elements (where border-radius is close to 50%) precisely match the visual contour of the curved edge. This provides a more consistent rendering of complex rounded shapes, eliminating visual discrepancies for high radius values. The border-radius adjustment factor, which ensures corners appear sharp for small radii, is progressively dampened as the radius value approaches 50%. This also applies to non-round contours (using corner-shape), which now use the same radius adjustment mechanism. Tracking bug #448651073 | ChromeStatus.com entry | Spec

Column wrapping for multicol

Add support for the column-wrap and column-height CSS properties, from multicol Level 2. This enables vertical column layout, or even 2D column layout. Columns can have an explicit constrained height, rather than being derived from the content-box height of the multicol container. They wrap to a new row of columns when all columns have been filled for one row, instead of creating overflowing columns in the inline direction. Tracking bug #403183884 | ChromeStatus.com entry | Spec

Expose onanimationcancel event to GlobalEventHandlers

The CSS Animations Level 1 extends the GlobalEventHandlers interface defined in the HTML specification, declaring four new event handlers: onanimationstart, onanimationiteration, onanimationend, and onanimationcancel. Only the onanimationcancel event handler has been missing from the GlobalEventHandlers IDL. Tracking bug #464010037 | ChromeStatus.com entry | Spec

Customizable select listbox

This extends customizable select support to the listbox rendering mode, including single-select and multi-select in listbox mode. The listbox rendering mode renders the select element in-flow or in the page, rather than with a separate button and popup. You can opt into listbox rendering mode across platforms using the multiple or size attributes, for example, or . When the appearance: base-select CSS property is applied to the select element with these attributes, it has improved rendering and input behavior. This does not support customizable select for the multi-select popup, which will be supported later. You must set the following attributes to get a multi-select popup: . Tracking bug #357649033 | ChromeStatus.com entry | Spec

The focusVisible option on focus

When calling the focus() method, you can supply a focusVisible boolean in the FocusOptions dictionary. When true, a focus ring is always painted around the newly-focused element, and it matches the :focus-visible pseudo-class. When false, the focus ring is not painted, and :focus-visible does not match. When missing, the user agent makes its own determination as to whether the focus ring should be painted, and the :focus-visible pseudo-class matches accordingly. Tracking bug #462191849 | ChromeStatus.com entry | Spec

Enable monochrome emoji rendering in forced colors mode.

This change updates Chromium's emoji rendering behavior in Forced Colors Mode. During computed-value resolution, emoji whose font-variant-emoji value computes to normal or unicode are rendered using their monochrome glyphs when available. Chromium therefore suppresses color emoji rendering, which ensures emojis fully participate in the Forced Colors Mode pipeline and respect system high-contrast colors. Behavior outside Forced Colors Mode is unchanged. Tracking bug #420857717 | ChromeStatus.com entry | Spec

Overscroll effect on non-root scrollers

This shows elastic overscroll effects on non-root scroll containers. When a nested scrollable element reaches its scroll boundary, the overscroll affordance applies to that element instead of only the root scroller. This reduces the need for custom JavaScript workarounds and can be controlled per element with overscroll-behavior. Tracking bug #41102897 | ChromeStatus.com entry | Spec

Capabilities
Show true window position on Android

Chrome on Android accurately reports the browser window's position and size using window.screenX, window.screenY, window.outerWidth, and window.outerHeight. Chrome previously incorrectly assumed that all browser windows on Android start at coordinates (0, 0). This assumption is inaccurate for Android tablets that use freeform windowing mode. Websites always received 0 when querying the window's on-screen position using window.screenX and window.screenY. These fields store the coordinates of the window's top-left corner in global work area coordinate space. Moreover, Chrome on Android incorrectly assumed that outer dimensions of the browser window are equal to the inner dimensions of the website viewport. window.screenX and window.screenY have aliases: window.screenLeft and window.screenTop. Tracking bug #417632037 | ChromeStatus.com entry | Spec

JavaScript
Upsert

This is an ECMAScript proposal for Map.prototype.getOrInsert, Map.prototype.getOrInsertComputed, WeakMap.prototype.getOrInsert, and WeakMap.prototype.getOrInsertComputed. Tracking bug #434977728 | ChromeStatus.com entry | Spec

Crash Reporting key-value API

A new key-value API, window.crashReport, is backed by a per-Document map holding data that Chrome appends to crash reports. The data placed in this API's backing map is sent in the CrashReportBody if any renderer process crashes are incurred by the site. This lets you debug what specific state in your application might be causing a given crash. Tracking bug #400432195 | ChromeStatus.com entry | Spec

Reduced User-Agent strings by default

Starting in Chrome 145, Chrome removes the UserAgentReduction policy. This policy was available to control whether Chrome sent a reduced or full User-Agent string. To enhance user privacy and reduce passive tracking capabilities, Chrome began reducing the information contained in the User-Agent header by default in Chrome version 110. The UserAgentReduction policy was provided as a temporary measure for enterprises to manage this transition. The recommended mechanism for websites to access browser and device information is User-Agent Client Hints (UA-CH). UA-CH requires websites to actively request specific information, which is a more privacy-preserving approach than the legacy User-Agent string. For more information, see the web.dev article, Migrate to User-Agent Client Hints. From Chrome 145 onwards, the UserAgentReduction policy has no effect. Chrome sends a reduced User-Agent string by default. Systems or applications that relied on this policy to receive the full (legacy) User-Agent string might no longer receive the detailed information they expect. ChromeStatus.com entry

Navigation API: expose destination in navigation.transition

NavigationTransition has a from property, exposing the old URL of the navigation. Exposing to (a NavigationDestination) completes this. It is especially useful when using precommit handlers, as during precommit the current URL has not yet switched to the destination. navigation.transition is only exposed for intercepted navigations—which means same-origin document-initiated navigations. Tracking bug #447171238 | ChromeStatus.com entry | Spec

Secure Payment Confirmation: Browser Bound Keys

This adds an additional cryptographic signature over Secure Payment Confirmation assertions and credential creation. The corresponding private key is not synced across devices. This helps you meet requirements for device binding for payment transactions. Tracking bug #377278827 | ChromeStatus.com entry | Spec

Secure Payment Confirmation: UX Refresh

Updates the UX elements for the SPC dialog on Android Chrome. In addition to UX presentation, the following are added:

  • Merchants can provide an optional list of payment entity logos related to the payment that are displayed in the UX.
  • Different output states are returned to the merchant depending on whether the user wants to continue the transaction without SPC or to cancel the transaction. Only a single output state is sent for both cases.
  • A new payment detail label field is added to the payment instrument so the text is presented across two lines in SPC. Tracking bug #405173922 | ChromeStatus.com entry | Spec
Cookie Store API maxAge attribute

You can specify a maxAge when setting a cookie with the Cookie Store API. Cookie expiry time is already configurable using the expires attribute, but maxAge provides a more idiomatic option and aligns the Cookie Store API with the options provided by document.cookie and the Set-Cookie HTTP Header. Tracking bug #430926231 | ChromeStatus.com entry | Spec

InputEvent types for deletion commands on non-collapsed selections

This reports accurate inputType values for deletion keyboard shortcuts on selected text. When deletion commands like Ctrl+Backspace or Ctrl+Delete are used with selected text in contenteditable elements, the beforeinput and input events report deleteContentBackward or deleteContentForward instead of deleteWordBackward or deleteWordForward. This lets you correctly understand what editing operation occurred and implement reliable undo, redo, or custom editing behaviors. Tracking bug #41423062 | ChromeStatus.com entry | Spec

Sticky activation for the clipboardchange event

This requires sticky user activation or clipboard-read permission to fire clipboardchange events, preventing unauthorized clipboard monitoring. The clipboardchange event is relatively new (Chrome 144), and this has minimal web-facing change. In most cases, sticky user activation or clipboard-read permission is already present where clipboard monitoring occurs (for example, in remote desktop clients). Tracking bug #468821937 | ChromeStatus.com entry | Spec

Multimedia
Expose rtpTimestamp from WebRTC video frames with VideoFrame.metadata()

Adds a VideoFrame.metadata() method that returns a dictionary containing the rtpTimestamp field, if the underlying VideoFrame has this field in its native metadata. An empty dictionary is returned otherwise. Only video frames originating from WebRTC sources have the rtpTimestamp metadata attached. Additional metadata fields are already present in the native implementation and might be exposed to JavaScript over time, as outlined in the proposed spec. ChromeStatus.com entry | Spec

Storage
IndexedDB: SQLite backend (in-memory contexts)

Chromium's IndexedDB implementation has been rewritten on top of SQLite, to replace the previous implementation that uses a hybrid of LevelDB and flat files. There is no change to the Web API. This improves reliability and, to a lesser extent, performance. This is applied only to in-memory contexts such as Incognito mode in Chromium and Google Chrome. This limits the impact of any new bugs and defers the need to migrate existing data persisted to disk. …

View originalPermalink
How 145 went

144

Added 7
  • CSS find-in-page highlight pseudos to expose find-in-page search result styling as a highlight pseudo-element for changing foreground and background colors or adding text decorations
  • CSS caret-shape property with recognized values auto, bar, block, and underscore to choose the caret shape inside editable elements
  • @scroll-state scrolled support to style descendants of containers based on the most recent scrolling direction
  • Side-relative syntax for background-position-x/y longhands to define background image position relative to one of its edges
  • View transitions waitUntil() method on the ViewTransition object to delay destruction of the pseudo-tree until a promise settles
  • XRVisibilityMaskChange event that provides vertices and indices to represent the mesh of the visible portion of the user's viewport
  • Unique identifiers on XRView objects to allow easier pairing with associated visibility masks
Changed 5
  • Container-name matching for @container queries to ignore tree-scope so names match regardless of @container rule or container-type declaration origins
  • CSS anchor positioning to resolve anchor() and anchor-size() functions against the bounding box of transformed anchors
  • SVG2 CSS cascading to match selectors against the <use> instantiation elements instead of the originating element subtree
  • overscroll-behavior property to apply to all scroll container elements regardless of whether they currently have overflowing content
  • Keyboard scrolling to respect overscroll-behavior property to prevent scroll chaining

Stable release date: January 13th, 2026 Unless otherwise noted, the following changes apply to Chrome 144 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
CSS find-in-page highlight pseudos

This feature exposes find-in-page search result styling to authors as a highlight pseudo-element, similar to selection and spelling errors. This lets developers change foreground and background colors or add text decorations. This is especially useful if browser defaults have insufficient contrast with page colors or are otherwise unsuitable. Tracking bug #339298411 | ChromeStatus.com entry | Spec

Non-tree-scoped container-name matching

Ignore tree-scope when matching container-name for @container queries. Previously, container-name matching for container queries used tree-scoped names or references for matching. This meant the same name didn't match if the @container rule and the container-type property originated from different trees, such that the container-type declaration came from an inner shadow tree. With this change, container names match regardless of @container rule or container-type declaration origins. Tracking bug #440049800 | ChromeStatus.com entry | Spec

CSS anchor positioning with transforms

When an anchor-positioned element is tethered against an anchor that has a transform (or is contained by an element with a transform), resolve anchor() and anchor-size() functions against the bounding box of the transformed anchor. Tracking bug #382294252 | ChromeStatus.com entry | Spec

CSS caret-shape property

The caret's shape in native applications is most commonly a vertical bar, an underscore, or a rectangular block. Additionally, the shape often varies depending on the input mode, for example, insert or replace. The CSS caret-shape property lets sites choose one of these shapes for the caret inside editable elements, or leave the choice to the browser. The recognized property values are auto, bar, block, and underscore. Tracking bug #353713061 | ChromeStatus.com entry | Spec

SVG2 CSS cascading

Align the Chrome implementation with the SVG2 specification for matching CSS rules in element trees. Match selectors against the instantiation elements instead of the originating element subtree. This means selectors no longer match ancestor and sibling elements outside the cloned subtree. More importantly, state selectors, for example, :hover, now start matching in instances. Tracking bug #40550039 | ChromeStatus.com entry | Spec

Respect overscroll-behavior on non-scrollable scroll containers

The overscroll-behavior property applies to all scroll container elements, regardless of whether those elements currently have overflowing content or are user scrollable. Developers can use overscroll-behavior to prevent scroll propagation on an overflow: hidden backdrop or an overflow: auto element without considering whether it will currently be overflowing. ChromeStatus.com entry | Spec

Respect overscroll-behavior for keyboard scrolls

When you set overscroll-behavior to a value other than auto, the browser shouldn't perform scroll chaining. The browser respects this for mouse or touch scrolling, but keyboard scrolls ignored it. This change makes keyboard scrolling also respect overscroll-behavior. Tracking bug #41378182 | ChromeStatus.com entry | Spec

@scroll-state scrolled support

Lets developers style descendants of containers based on the most recent scrolling direction. Tracking bug #414556050 | ChromeStatus.com entry | Spec

Side-relative syntax for background-position-x/y longhands

Defines the background image position relative to one of its edges. This syntax gives developers more flexible and responsive mechanisms to define the background image position, instead of using fixed values that need adaptation to the window or frame size. This feature also applies to the -webkit-mask-position property to ensure web compatibility. Tracking bug #40468636 | ChromeStatus.com entry | Spec

View transitions waitUntil() method

View transitions automatically construct a pseudo-element tree to display and animate participating elements in the transition. Per the specification, this subtree is constructed when the view transition starts animating and is destroyed when the animations associated with all view transition pseudo-elements are in the finished state (or more precisely, in a non-running, non-paused state). This works for most cases and provides a seamless experience for developers. However, for more advanced cases, this is insufficient because developers sometimes want the view transition pseudo-tree to persist beyond the animation finish state. One example is tying view transitions with Scroll Driven Animations. When a scroll timeline controls the animation, the subtree shouldn't be destroyed when the animations finish because scrolling back should still animate the pseudo elements. To enable advanced uses of view transition, this intent adds a waitUntil() function on the ViewTransition object that takes a promise. This promise delays destruction of the pseudo-tree until it settles. Tracking bug #346976175 | ChromeStatus.com entry | Spec

Device
XRVisibilityMaskChange

Adds an XRVisibilityMaskChange event that provides a list of vertices and a list of indices to represent the mesh of the visible portion of the user's viewport. This data can then limit the amount of the viewport drawn to, which improves performance. To better support this event, XRView objects are also given unique identifiers to allow easier pairing with the associated masks. This extends the core WebXR specification. Tracking bug #450538226 | ChromeStatus.com entry | Spec

DOM
The element

Introduces the element, a declarative, user-activated control for accessing the user's location. It streamlines the user and developer journey by handling the permission flow and directly providing location data to the site. This often eliminates the need for a separate JavaScript API call. This addresses the long-standing problem of permission prompts triggering directly from JavaScript without a strong signal of user intent. By embedding a browser-controlled element in the page, the user's click provides a clear, intentional signal. This enables a better prompt UX and, crucially, provides a recovery path for users who previously denied the permission. Tracking bug #435351699 | ChromeStatus.com entry | Spec

Graphics
WebGPU: Uniform buffer standard layout

Uniform buffers declared in WGSL shaders are no longer required to have 16-byte alignment on array elements or to pad nested structure offsets to a multiple of 16 bytes. Tracking bug #452662924 | ChromeStatus.com entry | Spec

WebGPU: subgroup_id feature

The subgroup_id and num_subgroups built-in values are available when the subgroups extension is enabled. Tracking bug #454654255 | ChromeStatus.com entry | Spec

JavaScript
Temporal in ECMA262

The Temporal API in ECMA262 is a new API that provides standard objects and functions for working with dates and times. Date has been a long-standing pain point in ECMAScript. This proposes Temporal, a global Object that acts as a top-level namespace (similar to Math), which brings a modern date and time API to the ECMAScript language. Tracking bug #detail?id=11544 | ChromeStatus.com entry | Spec

Support ping, hreflang, type, and referrerPolicy for SVGAElement

Adds support for ping, hreflang, type, and referrerPolicy attributes on SVGAElement, aligning its behavior with HTMLAnchorElement for consistent link handling across HTML and SVG. Tracking bug #40589293 | ChromeStatus.com entry | Spec

Mirroring of RTL MathML operators

Supports character-level and glyph-level mirroring when rendering MathML operators in right-to-left mode. When using RTL mode, some operators can be mirrored by changing them to another code point. For example, a right parenthesis becomes a left parenthesis. This is character-level mirroring, with equivalences defined by Unicode's Bidi_Mirrored property. Some operators have no appropriate mirroring character. Glyph-level mirroring applies in this case, with the rtlm font feature, where another glyph can replace it in a mirrored context. Some existing implementations mirror the original glyph directly, but this might change the meaning for asymmetrical characters, for example, the clockwise contour integral. Tracking bug #40120782 | ChromeStatus.com entry | Spec

The clipboardchange event

The clipboardchange event fires whenever a web app or any other system application changes the system clipboard contents. This lets web apps, for example, remote desktop clients, keep their clipboards synchronized with the system clipboard. It provides an efficient alternative to polling the clipboard (using JavaScript) for changes. Tracking bug #41442253 | ChromeStatus.com entry | Spec

Permissions
User-Agent Client Hints ch-ua-high-entropy-values permissions policy

Adds support for a ch-ua-high-entropy-values permissions policy that enables a top-level site to restrict which documents can collect high-entropy client hints with the navigator.userAgentData.getHighEntropyValues() JavaScript API. Restricting collection of high-entropy hints over HTTP is possible through existing per-client-hint permissions policies. Tracking bug #385161047 | ChromeStatus.com entry | Spec

Performance
Performance and Event Timing: interactionCount

The Event Timing API is part of the Performance Timeline and measures the performance of user interactions. Certain events have an interactionId value assigned to them. This is useful for grouping related interactions based on common physical user inputs or gestures. This feature adds a performance.interactionCount property, which is the total number of interactions that occurred on the page. In particular, this feature is useful for computing the Interaction to Next Paint (INP) metric value. This requires knowing the total number of interactions to compute a high percentile score (p98 for pages with more than 50 total interactions). This feature has been specified for a long time, was prototyped in Chromium a long time ago but never shipped, is part of Interop 2025, and is available in other browsers. ChromeStatus.com entry | Spec

User input
Interoperable pointer and mouse boundary events after DOM changes

After an event target is removed from the DOM, the logical target of the pointer, as implied by the Pointer and Mouse boundary events (that is, over, out, enter, and leave events), should be the nearest ancestor still attached to the DOM. The PEWG recently reached consensus on this behavior. Chrome tracked a node even after it was removed from the DOM. As a result, if the pointer moves to a new node B after the hit-test node A is removed from the DOM, the boundary event sequence (pointerover, pointerout, pointerenter, pointerleave events, and the corresponding mouse events) implied a pointer movement from A to B. As per the new consensus, the event sequence implies a pointer movement from the "parent of A" to B. Tracking bug #1147998 | ChromeStatus.com entry | Spec

Pointer lock on Android

Provides access to raw mouse movement by locking the target of mouse events to a single element and hiding the mouse cursor. Tracking bug #40290045 | ChromeStatus.com entry | Spec

WebRTC
RTCDegradationPreference enum value maintain-framerate-and-resolution

maintain-framerate-and-resolution disables WebRTC's internal video adaptation. This lets the application implement its own adaptation logic and prevents interference from the internal adaptation. From the WebRTC MediaStreamTrack Content Hints specification: …

View originalPermalink
How 144 went

143

Added 8
  • Introduce @container anchored(fallback) to style descendants of anchor positioned elements based on which of position-try-fallbacks is applied
  • Define background image position relative to one of its edges using side-relative syntax for background-position-x/y longhands and -webkit-mask-position property
  • Implement CSS property font-language-override to allow developers to override the system language used for OpenType glyph substitution
  • Specify update eligibility algorithm in the Web App Manifest specification to make the update process more deterministic and predictable
  • Add ongamepadconnected and ongamepaddisconnected event handler attributes to the WindowEventHandlers interface mixin
  • Allow GPUTextureViews to rearrange or replace color components from texture's red/green/blue/alpha channels when accessed by a shader
  • Populate the dataTransfer property on input events with insertFromPaste, insertFromDrop, and insertReplacementText inputType to provide access to clipboard and drag-drop data in contenteditable elements
  • Allow Identity Providers to return structured JSON objects instead of plain strings via the id_assertion_endpoint in FedCM
Changed 2
  • Relax validation of JavaScript DOM APIs to allow more characters in element and attribute names to match the HTML parser
  • Upgrade ICU from version 74.2 to 77.1 to add support for Unicode 16 and update locale data
Fixed 1
  • Correct TextFormat underlineStyle and underlineThickness properties in the EditContext API to match specification values

Stable release date: December 2nd, 2025 Unless otherwise noted, the following changes apply to Chrome 143 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
CSS anchored fallback container queries

Introduces @container anchored(fallback) to style descendants of anchor positioned elements based on which of position-try-fallbacks is applied. Such queries can be used to style an anchored element's tether or its animations, based on how the anchor and the anchored element are positioned relative to each other. Tracking bug #417621241 | ChromeStatus.com entry | Spec

Side-relative syntax for background-position-x/y longhands

Defines the background image's position relative to one of its edges. This syntax provides a more flexible and responsive mechanism to define the background image position, instead of using fixed values that need to be adapted to the window or frame size. This feature is applied also to the -webkit-mask-position property to ensure webcompat levels are the same. Tracking bug #40468636 | ChromeStatus.com entry | Spec

Implement CSS property font-language-override

Introduces support for font-language-override CSS property. The property allows developers to override the system language used for OpenType glyph substitution by specifying a four-character language tag directly in CSS. This enables fine-grained typographic control, particularly useful for multilingual content or fonts with language-specific glyph variants. Tracking bug #41170551 | ChromeStatus.com entry | Spec

Web App Manifest: specify update eligibility

Specify an update eligibility algorithm in the manifest specification. This makes the update process more deterministic and predictable, giving the dev more control over whether (and when) updates should apply to existing installations, and allowing removal of the update check throttle that user agents currently need to implement to avoid wasting network resources. Tracking bug #403253129 | ChromeStatus.com entry

Device
Gamepad ongamepadconnected and ongamepaddisconnected event handler attributes

Adds ongamepadconnected and ongamepaddisconnected event handlers to the WindowEventHandlers interface mixin. This enables support for the following event handler attributes:

  • window.ongamepadconnected
  • document.body.ongamepadconnected
  • window.ongamepaddisconnected
  • document.body.ongamepaddisconnected Tracking bug #40175074 | ChromeStatus.com entry | Spec
DOM
Allow more characters in JavaScript DOM APIs

The HTML parser lets elements and attributes have a wide variety of valid characters and names, but the JavaScript DOM APIs to create the same elements and attributes are more strict and don't match the parser. This change relaxes the validation of the JavaScript DOM APIs to match the HTML parser. Tracking bug #40228234 | ChromeStatus.com entry | Spec

Graphics
WebGPU: Texture component swizzle

Allows GPUTextureViews to rearrange or replace the color components from texture's red/green/blue/alpha channels when accessed by a shader. Tracking bug #414312052 | ChromeStatus.com entry | Spec

JavaScript
ICU 77 (supporting Unicode 16)

The Unicode support library ICU (International Components for Unicode) is upgraded from version 74.2 to 77.1, adding support for Unicode 16 and updating locale data. Two changes could pose some risk for web applications that assume a specific format from the Intl JS APIs:

  • The default Italian number formatting changed to omit the thousand separator for 4-digit numbers. For example new Intl.NumberFormat("it").format(1234) will return 1234 instead of 1.234. The old behavior can be achieved with the useGrouping parameter for the Intl.NumberFormat constructor.
  • In some English locales (en-AU, en-GB, and en-IN), a comma was added after full-length weekdays, for example, changing Saturday 30 April 2011 to Saturday, 30 April 2011. Web applications should avoid relying on the precise formatting of dates and they may change again in future. Tracking bug #421834885 | ChromeStatus.com entry | Spec
EditContext: TextFormat underlineStyle and underlineThickness

The EditContext API shipped with a bug in Chrome where the TextFormat object supplied by the textformatupdate event provides incorrect values for the underlineStyle and underlineThickness properties. Before Chrome 143 the possible values are None, Solid, Dotted, Dashed, Squiggle and None, Thin, Thick. However the specification lists none, solid, dotted, dashed, wavy and none, thin, thick. The correct values as specified are now implemented from Chrome 143. Tracking bug #354497121 | ChromeStatus.com entry | Spec

DataTransfer property for insertFromPaste, insertFromDrop and insertReplacementText input events

Populate the dataTransfer property on input events with an inputType of insertFromPaste, insertFromDrop, and insertReplacementText to provide access to clipboard and drag-drop data during editing operations in contenteditable elements. The dataTransfer object contains the same data that was available during the beforeinput event. This feature only applies to contenteditable elements. For form controls (textarea, input), the behavior remains unchanged—the data property contains the inserted text and dataTransfer remains null. Tracking bug #401593412 | ChromeStatus.com entry | Spec

FedCM: Support structured JSON responses from IdPs

Allows Identity Providers (IdPs) to return structured JSON objects instead of plain strings to Relying Parties (RPs) using the id_assertion_endpoint. This change simplifies integration for developers by eliminating the need to manually serialize and parse JSON strings. It enables more dynamic and flexible authentication flows, allowing RPs to interpret complex responses directly and support varied protocols like OAuth2, OIDC, or IndieAuth without out-of-band agreements. Tracking bug #346567168 | ChromeStatus.com entry | Spec

Network
WebTransport Application Protocol Negotiation

WebTransport Application Protocol Negotiation allows negotiation of the protocol used by the web application within the WebTransport handshake. A web application can specify a list of application protocols offered when constructing a WebTransport object, which are then conveyed to the server using HTTP headers; if the server picks one of those protocols, it can indicate that within response headers, and that reply is available within the WebTransport object. Tracking bug #416080492 | ChromeStatus.com entry | Spec

Performance
Speculation rules: mobile eager eagerness improvements

On mobile, eager eagerness speculation rules prefetches and prerenders now trigger when HTML anchor elements are in the viewport for a short time. Tracking bug #436705485 | ChromeStatus.com entry | Spec

WebRTC
WebRTC RTP header extension behavior change

Implements a change to the specification that ensures that subsequent offer or answer does not permute the header extensions negotiated unless the user wants that to happen. Tracking bug #439514253 | ChromeStatus.com entry | Spec

Isolated Web Apps
Web Smart Card API for Isolated Web Apps

Available on Isolated Web Apps (IWA) only. Enables smart card (PC/SC) applications to move to the Web platform. It gives them access to the PC/SC implementation (and card reader drivers) available in the host OS. Administrators can control the availability of this API either:

  • Globally—using the DefaultSmartCardConnectSetting policy.
  • Per-application—using the SmartCardConnectAllowedForUrls and SmartCardConnectBlockedForUrls policies. Tracking bug #1386175 | ChromeStatus.com entry | Spec
Origin trials
Digital Credentials API (issuance support)

This feature lets issuing websites (for example, a university, government agency, or bank) to securely initiate the provisioning (issuance) process of digital credentials directly into a user's mobile wallet application. On Android, this capability uses the Android IdentityCredential CredMan system (Credential Manager). On Desktop, it uses cross-device approaches using the CTAP protocol similar to Digital Credentials presentation. Origin Trial | Tracking bug #378330032 | ChromeStatus.com entry | Spec

Web Install API

Provides the ability to install a web app. When invoked, the website installs either itself, or another site from a different origin, as a web app (depending on the provided parameters). Origin Trial | Tracking bug #333795265 | ChromeStatus.com entry | Spec

Deprecations and removals
Deprecate XSLT

XSLT v1.0, which all browsers adhere to, was standardized in 1999. In the meantime, XSLT has evolved to v2.0 and v3.0, adding features, and growing apart from the version frozen into browsers. This lack of advancement, coupled with the rise of JavaScript libraries and frameworks that offer more flexible and powerful DOM manipulation, has led to a significant decline in the use of client-side XSLT. Its role within the web browser has been largely superseded by JavaScript-based technologies, such as JSON and React. Chromium uses the libxslt library to process these transformations, and libxslt was unmaintained for around 6 months of 2025. Libxslt is a complex, aging C codebase of the type notoriously susceptible to memory safety vulnerabilities like buffer overflows, which can lead to arbitrary code execution. Because client-side XSLT is now a niche, rarely-used feature, these libraries receive far less maintenance and security scrutiny than core JavaScript engines, yet they represent a direct, potent attack surface for processing untrusted web content. Indeed, XSLT is the source of several recent high-profile security exploits that continue to put browser users at risk. For these reasons, Chromium (along with both other browser engines) plans to deprecate and remove XSLT from the web platform. For more details, see Removing XSLT for a more secure browser. ChromeStatus.com entry

Deprecate getters of Intl Locale Info

Intl Locale Info API is a Stage 3 ECMAScript TC39 proposal to enhance the Intl.Locale object by exposing Locale information, such as week data (first day in a week, weekend start day, weekend end day, minimum day in the first week), and text direction hour cycle used in the locale. Changes in Stage 3 of the specification moves several getters to functions. These are now being updated in Chrome to match the specification. Tracking bug #42203770 | ChromeStatus.com entry | Spec

FedCM Privacy Enforcement for Client Metadata

To address cross-site identity correlation risks in the FedCM API, Identity Providers (IdPs) that use client_metadata within their FedCM configuration are required to implement the direct endpoints format in the .well-known/web-identity file. This mandate ensures that both accounts_endpoint and login_url are explicitly defined whenever a client_metadata_endpoint is present. This approach strengthens privacy protections by preventing relying parties from exploiting metadata to correlate user identities across multiple sites. In Chrome 143 (Warning Phase): If client_metadata_endpoint exists but accounts_endpoint or login_url is missing, the browser will display console warnings. This gives IdPs time to update configurations. ChromeStatus.com entry | Spec

FedCM-Migration of nonce to params field and renaming of IdentityCredentialError code attribute to error

Migration of nonce to params field: The nonce parameter in navigator.credentials.get() is moving from a top-level field to the params object for better API design, extensibility, and maintainability. This structured approach simplifies parsing for Identity Providers, supports future-proofing without versioning, and aligns with modern API patterns. For Relying Parties, the impact is minimal—they provide the same nonce value in a new location. In Chrome 143 (Warning Phase): nonce accepted both at top level and inside params. Top-level usage triggers a console warning. …

View originalPermalink
How 143 went

142

Added 7
  • document.activeViewTransition property to represent the active view transition object or null if no transition is ongoing
  • :target-before and :target-after pseudo-classes to match scroll markers before or after the active marker
  • Range syntax for style container queries and if() function to support comparison operators for custom properties
  • interestfor attribute on <button> and <a> elements to trigger actions on target elements when user shows interest
  • Support for download attribute in SVG <a> element
  • WebGPU primitive_index feature to expose a per-primitive index to fragment shaders
  • WebGPU texture formats tier1 and tier2 with extended capabilities for render attachment, blending, multisampling, resolve and storage_binding
Changed 2
  • ::view-transition element now uses position: absolute instead of position: fixed
  • select element rendering modes for mobile and desktop parity with size and multiple attributes

Stable release date: October 28th, 2025 Unless otherwise noted, the following changes apply to Chrome 142 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
Absolute positioning for the ::view-transition element

View transitions use a pseudo subtree of the element, with ::view-transition being the root of that transition. Previously, the ::view-transition element was specified to have position: fixed. The CSS Working Group resolved to make this position: absolute and so Chrome now reflects that change. This change shouldn't be noticeable because this element's containing block remains the snapshot containing block in either the absolute or fixed case. The only noticeable difference is in getComputedStyle. Tracking bug #439800102 | ChromeStatus.com entry | Spec

activeViewTransition property on document

The View Transitions API lets developers start visual transitions between different states. The primary SPA entry point is startViewTransition(), which returns a transition object. This object contains several promises and functionality to track transition progress, and lets you manipulate transitions, for example, by skipping the transition or modifying its types. From Chrome 142, developers no longer need to store this object. A document.activeViewTransition property represents this object, or null if no transition is ongoing. This also applies to MPA transitions, where the object is only available through pageswap and pagereveal events. In this update, document.activeViewTransition is set to this object for the duration of the transition. Tracking bug #434949972 | ChromeStatus.com entry | Spec

:target-before and :target-after pseudo-classes

These pseudo-classes match scroll markers that are before or after the active marker (matching :target-current) within the same scroll marker group, as determined by flat tree order:

  • :target-before: Matches all scroll markers that precede the active marker in the flat tree order within the group.
  • :target-after: Matches all scroll markers that follow the active marker in the flat tree order within the group. Tracking bug #440475008 | ChromeStatus.com entry | Spec
Range syntax for style container queries and if()

Chrome enhances CSS style queries and the if() function by adding support for range syntax. It extends style queries beyond exact value matching (for example, style(--theme: dark)). Developers can use comparison operators (such as > and <) to compare custom properties, literal values (for example, 10px or 25%), and values from substitution functions like attr() and env(). For a valid comparison, both sides must resolve to the same data type. It is limited to the following numeric types: , , , , , , and . Tracking bug #408011559 | ChromeStatus.com entry | Spec

Interest Invokers (the interestfor attribute)

Chrome adds an interestfor attribute to and elements. This attribute adds "interest" behaviors to the element. When a user "shows interest" in the element, actions are triggered on the target element, for example, showing a popover. The user agent detects when a user "shows interest" in the element through methods such as holding the pointer over the element, hitting special hotkeys on the keyboard, or long-pressing the element on touchscreens. When interest is shown or lost, an InterestEvent fires on the target, which has default actions for popovers, such as showing and hiding the popover. Tracking bug #326681249 | ChromeStatus.com entry | Spec

Mobile and desktop parity for select element rendering modes

By using the size and multiple attributes, the element can be rendered as an in-page listbox or a button with a popup. However, these modes don't have consistent availability across mobile and desktop Chrome. In-page listbox rendering is unavailable on mobile, and a button with a popup is unavailable on desktop when the multiple attribute is present. This update adds the listbox to mobile and a multi-select popup to desktop, and ensures that opt-ins with the size and multiple attributes result in the same rendering mode across mobile and desktop. The changes are summarized as follows:

  • When the size attribute has a value greater than 1, in-page rendering is always used. Mobile devices ignored this before.
  • When the multiple attribute is set with no size attribute, in-page rendering is used. Mobile devices previously used a popup instead of an in-page listbox.
  • When the multiple attribute is set with size=1, a popup is used. Desktop devices previously used an in-page listbox. Tracking bug #439964654 | ChromeStatus.com entry | Spec
Support download attribute in SVG element

This feature introduces support for the download attribute on the SVGAElement interface in Chromium, aligning with the SVG 2 specification. The download attribute enables authors to specify that the target of an SVG hyperlink should be downloaded rather than navigated to, mirroring the behavior already supported in HTMLAnchorElement. This enhancement promotes interoperability across major browsers and ensures consistent behavior between HTML and SVG link elements, thereby improving developer experience and user expectations. Tracking bug #40589293 | ChromeStatus.com entry | Spec

Graphics
WebGPU: primitive_index feature

WebGPU adds a new optional capability that exposes a new WGSL shader built-in, primitive_index. It provides a per-primitive index to fragment shaders on supported hardware, similar to the vertex_index and instance_index built-ins. The primitive index is useful for advanced graphical techniques, such as virtualized geometry. Tracking bug #342172182 | ChromeStatus.com entry | Spec

WebGPU: Texture formats tier1 and tier2

Extend GPU texture format support with capabilities like render attachment, blending, multisampling, resolve and storage_binding. Tracking bug #445725447 | ChromeStatus.com entry | Spec

Web APIs
FedCM—Support showing third-party iframe origins in the UI

Before Chrome 142, FedCM always showed the top-level site in its UI. This works well when the iframe is conceptually first-party (for example, foo.com might have an iframe foostatic.com, which is not meaningful to the user). But if the iframe is actually third-party, it is better to show the iframe origin in the UI so users better understand who they are sharing their credentials with. For example, a photo editor might be embedded in a book publishing web app and might want to let users access files they stored before with the photo editor. This capability is now available. Tracking bug #390581529 | ChromeStatus.com entry | Spec

Stricter *+json MIME token validation for JSON modules

Reject JSON module script responses whose MIME type's type or subtype contains non-HTTP token code points (for example, spaces) when matched with *+json. This aligns with the MIME Sniffing specification and other engines. It is part of the Interop2025 modules focus area. Tracking bug #440128360 | ChromeStatus.com entry | Spec

Web Speech API contextual biasing

This feature enables websites to support contextual biasing for speech recognition by adding a recognition phrase list to the Web Speech API. Developers can provide a list of phrases as well as updating them to apply a bias to the speech recognition models in favor of those phrases. This helps improve accuracy and relevance for domain-specific and personalized speech recognition. ChromeStatus.com entry | Spec

Media session: add reason to enterpictureinpicture action details

Adds enterPictureInPictureReason to the MediaSessionActionDetails sent to the enterpictureinpicture action in the Media Session API. This allows developers to distinguish between enterpictureinpicture actions triggered explicitly by the user (e.g. from a button in the user agent) and enterpictureinpicture actions triggered automatically by the user agent due to the content becoming occluded. Tracking bug #446738067 | ChromeStatus.com entry | Spec

Security
Local network access restrictions

Chrome 142 restricts the ability to make requests to the user's local network, gated behind a permission prompt. A local network request is any request from a public website to a local IP address or loopback, or from a local website (for example, an intranet) to loopback. Gating the ability for websites to perform these requests behind a permission mitigates the risk of cross-site request forgery attacks against local network devices such as routers, and reduces the ability of sites to use these requests to fingerprint the user's local network. This permission is restricted to secure contexts. If granted, the permissions additionally relaxes mixed content blocking for local network requests (since many local devices are not able to obtain publicly trusted TLS certificates for various reasons). Learn more in New permission prompt for Local Network Access. Tracking bug #394009026 | ChromeStatus.com entry | Spec

User input
Interoperable pointerrawupdate events exposed only in secure contexts

The PointerEvents specification restricted pointerrawupdate to secure contexts in 2020, hiding both the event firing and the global event listeners from insecure contexts. Through this feature, Chrome will match the updated specification and become interoperable with other major browsers. Tracking bug #404479704 | ChromeStatus.com entry | Spec

Sticky user activation across same-origin renderer-initiated navigations

This feature preserves the sticky user activation state after a page navigates to another same-origin page. The lack of user activation in the post-navigation page prevents some use cases like showing virtual keyboards on auto-focus, and this has been a blocker for the developers who want to build MPAs over SPAs. Tracking bug #433729626 | ChromeStatus.com entry | Spec

Origin trials
Device Bound Session Credentials

A way for websites to securely bind a session to a single device. It lets servers have a session be securely bound to a device. The browser will renew the session periodically as requested by the server, with proof of possession of a private key. Origin Trial | Device Bound Session Credentials: Second origin trial begins | ChromeStatus.com entry | Spec

View originalPermalink
How 142 went

141

Added 8
  • Add ariaNotify API to provide JavaScript control for screen reader announcements
  • Support restrictOwnAudio property for captured display surfaces
  • Add windowAudio option to getDisplayMedia() to control audio sharing preferences
  • Support width and height as presentation attributes on nested SVG elements
  • Add Digital Credentials API presentation support for retrieving credentials from mobile wallet apps
  • Add precommitHandler option to navigateEvent.intercept() to defer navigation commit
  • Add support for phone numbers and usernames as alternative fields in FedCM account selection
  • Enable No-Vary-Search support for the HTTP disk cache to share cache entries between URLs differing only in query parameters
Changed 2
  • Update hidden=until-found and details ancestor revealing algorithm to prevent infinite loops
  • Align RTP stats creation timing with WebRTC specification
Fixed 1
  • Fix custom property enumeration in getComputedStyle() to include custom properties set on the element

Stable release date: September 30th, 2025 Unless otherwise noted, the following changes apply to Chrome 141 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS
Custom property enumeration in getComputedStyle()

When iterating over window.getComputedStyle(element) in Chrome, there was a bug where it forgets to include any custom properties set on the element. Therefore, length() on the returned object forgets to account for the number of custom properties set. This bug is fixed from Chrome 141, aligning Chrome with Firefox and Safari. ChromeStatus.com entry | Spec

DOM
ARIA Notify API

ariaNotify provides a JavaScript API that lets content authors tell a screen reader what to read. ariaNotify improves reliability and developer control compared to ARIA live regions, allowing for announcing changes not tied to DOM updates. This enables more consistent and ergonomic accessibility experiences across dynamic web applications. Iframe usage of this feature can be controlled using the "aria-notify" permission policy. Tracking bug #326277796 | ChromeStatus.com entry | Spec

Update hidden=until-found and details ancestor revealing algorithm

The specification recently had some small changes to the revealing algorithms for hidden=until-found and details elements to prevent the browser from getting stuck in an infinite loop, these are now shipping in Chrome. Tracking bug #433545121 | ChromeStatus.com entry | Spec

JavaScript
Align implementations on when RTP stats should be created

RTP stats objects, of type "outbound-rtp" or "inbound-rtp" in this case, represents a WebRTC stream. The identifier of this stream is the SSRC (a number). This feature aligns with the specification on when these stats should be created. Tracking bug #406585888 | ChromeStatus.com entry | Spec

Media
Support restrictOwnAudio

The restrictOwnAudio property is a captured display surfaces constrainable property. It changes the behavior of system audio in a captured display surface. The restrictOwnAudio constraint only has an effect if the captured display surface inherently includes system audio; otherwise, it will have no impact. ChromeStatus.com entry | Spec

windowAudio for getDisplayMedia()

Extends DisplayMediaStreamOptions for getDisplayMedia() with a windowAudio option. This new option allows web applications to hint to the user agent whether the user should be offered the ability to share audio when a window is selected. windowAudio can be set to exclude, system, or window based on application preference. A web application that is configured for audio capture but wants to limit system audio capture when a window is selected should set windowAudio: "exclude". ChromeStatus.com entry | Spec

Miscellaneous
Support width and height as presentation attributes on nested elements

This feature supports applying width and height as presentation attributes on nested elements through both SVG markup and CSS. This dual approach provides even greater flexibility for developers, allowing them to manage and style SVG elements more efficiently within complex designs. Tracking bug #40409865 | ChromeStatus.com entry | Spec

Digital Credentials API (presentation support)

Websites retrieve credentials from mobile wallet apps using a variety of mechanisms, such as custom URL handlers and QR code scanning. This feature lets sites request identity information from wallets using Android's IdentityCredential CredMan system. It is extensible to support multiple credential formats (such as ISO mDoc and W3C verifiable credential) and allows multiple wallet apps to be used. This update adds mechanisms to help reduce the risk of ecosystem-scale abuse of real-world identity. Tracking bug #40257092 | ChromeStatus.com entry | Spec

Navigation API: deferred commit (precommit handlers)

Normally, when navigateEvent.intercept() is called, the intercepted navigation commits (and therefore the URL updates) as soon as the NavigateEvent finishes dispatch. This feature adds a precommitHandler option to navigateEvent.intercept(), similar to handler. It defers the commit until that handler (and all other precommit handlers) are resolved, and it allows the handler to change the navigation's URL, info, status, and history handling behavior (push/replace). Tracking bug #440190720 | ChromeStatus.com entry | Spec

FedCM: Alternative fields in account selection

Adds support for phone numbers and usernames, in addition to or instead of a user's full name and email address as identifiers for disambiguating accounts in the account selector. Also, makes these new fields available for websites to affect the disclosure text. Tracking bug #382086282 | ChromeStatus.com entry | Spec

Network / Connectivity
No-Vary-Search support for the HTTP disk cache

Lets the HTTP disk cache use the No-Vary-Search response header to share a cache entry between URLs that differ only in the query parameters. Developers can use No-Vary-Search to specify query parameters that have no impact on the user experience. A common example might be an ID used to track conversions. Supporting this header in the HTTP disk cache means that if the user later goes back to that same page without the conversion ID, it can be used or revalidated from the cache rather than having to be fetched from scratch from the network. Previously, No-Vary-Search support shipped for the navigation prefetch cache, prefetch and prerender speculation rules, and prerender. This launch makes it generally available to any feature that uses the HTTP disk cache. Tracking bug #382394774 | ChromeStatus.com entry | Spec

Offline / Storage
IndexedDB getAllRecords() and direction option for getAll() and getAllKeys()

This feature adds the getAllRecords() method to the IndexedDB IDBObjectStore and IDBIndex. It also adds a direction parameter to getAll() and getAllKeys(). This functionality lets certain read patterns be significantly faster when compared to the existing alternative of iteration with cursors. In one test, a workload from a Microsoft property showed a 350ms improvement. The getAllRecords() method combines getAllKeys() and getAll() by enumerating both primary keys and values at the same time. For an IDBIndex, getAllRecords() also provides the record's index key in addition to the primary key and value. Tracking bug #40746016 | ChromeStatus.com entry | Spec

Performance
Speculation rules: desktop "eager" eagerness improvements

On desktop, "eager" eagerness speculation rules prefetches and prerenders now trigger when users hover on a link for a shorter time than the "moderate" mouse hover time. The previous behavior, of starting prefetch and prerenders as soon as possible, was the same as "immediate" eagerness. This new behavior is more useful as it better reflects the author's intent to be more eager than the "moderate" and less eager than "immediate". ChromeStatus.com entry | Spec

Security
Strict Same Origin Policy for Storage Access API

Adjusts the Storage Access API semantics to strictly follow the Same Origin Policy with regard to security. That is, using document.requestStorageAccess() in a frame only attaches cookies to requests to the iframe's origin (not site) by default. Tracking bug #379030052 | ChromeStatus.com entry | Spec

Signature-based Integrity

This feature provides web developers with a mechanism to verify the provenance of resources they depend upon, creating a technical foundation for trust in a site's dependencies. In short: servers can sign responses with a Ed25519 key pair, and web developers can require the user agent to verify the signature using a specific public key. This offers a helpful addition to URL-based checks offered by Content Security Policy on the one hand, and Subresource Integrity's content-based checks on the other. Tracking bug #375224898 | ChromeStatus.com entry | Spec

WebRTC
WebRTC Encoded Transform (V2)

This API allows processing of encoded media flowing through an RTCPeerConnection. Chrome shipped an early version of this API in 2020. Since then, the specification has changed and other browsers have shipped the updated version (Safari in 2022 and Firefox in 2023). This launch aligns Chrome with the updated specification as part of Interop 2025. This launch does not cover the generateKeyFrame method, which is still under discussion. Tracking bug #354881878 | ChromeStatus.com entry | Spec

echoCancellationMode for getUserMedia()

Extends the echoCancellation behavior of the MediaTrackConstraints dictionary. his previously accepted true or false and now additionally accepts the values "all" and "remote-only". This lets clients modify echo cancellation behavior applied to audio tracks received from microphones, controlling how much of the user system playout (all, or only audio received from PeerConnections) is removed from the microphone signal. ChromeStatus.com entry | Spec

Managed ChromeOS only
Permissions Policy for Device Attributes API

The new Permissions Policy enables restricting access to the Device Attributes API, which is available only for policy-installed kiosk web apps and policy-installed Isolated Web Apps, both only on managed ChromeOS devices. Additionally, the feature is controlled by content settings. Two new policies are introduced: DeviceAttributesBlockedForOrigins and DefaultDeviceAttributesSetting, to complement previously introduced DeviceAttributesAllowedForOrigins. The feature is enabled by default for policy-installed kiosk web apps and policy-installed Isolated Web Apps on managed ChromeOS devices. ChromeStatus.com entry | Spec

Origin trials
Local network access restrictions

Chrome 141 restricts the ability to make requests to the user's local network, gated behind a permission prompt. This origin trial temporarily allows for access to resources on local networks to originate from non-secure contexts. This will give developers more time to migrate Local Network Access requests to originate from a secure context. Origin Trial | Tracking bug #394009026 | ChromeStatus.com entry | Spec

Proofreader API

A JavaScript API for proofreading input text with suggested corrections, backed by an AI language model. Origin Trial | Tracking bug #403313556 | ChromeStatus.com entry | Spec

Extend CSP script-src (also known as script-src-v2)

This feature adds new keywords to the script-src Content Security Policy (CSP) directive. This adds two new hash-based allowlisting mechanisms: script sources based on hashes of URLs and contents of eval() and eval()-like functions. This is sometimes referred to as script-src-v2, although it is backward compatible with the existing script-src, and uses the same directive. Extending hashes to cover URL and eval() hashes lets developers set reasonably strict security policies by narrowly allowlisting scripts by their hashes even when script contents are subject to frequent changes, and known-safe contents of eval() without permitting unchecked use of eval() broadly. The new keywords override host-based script-src when provided. This allows a single header to be compatible with browsers that both do or do not implement the new keywords. Tracking bug #392657736 | ChromeStatus.com entry | Spec

WebAssembly custom descriptors

Lets WebAssembly store data associated with source-level types more efficiently in new "custom descriptor" objects. These custom descriptors can be configured with prototypes for the WebAssembly objects of that source-level type. This lets you install methods on a WebAssembly object's prototype chain and call them directly from JavaScript using normal method call syntax. The prototypes and methods can be configured declaratively using an imported built-in function. Origin Trial | ChromeStatus.com entry | Spec

Deprecations and removals
Stop sending Purpose: prefetch header from prefetches and prerenders

View originalPermalink
How 141 went

140

Added 10
  • CSS typed arithmetic lets you write expressions such as calc(10em / 1px) to convert typed values into untyped ones and reuse them for number accepting properties
  • CSS caret-animation property with auto and manual values to control caret blinking behavior
  • highlightsFromPoint API to detect which highlights exist at a specific point within a document
  • ScrollIntoViewOptions container option to perform scrollIntoView operations that only scroll the nearest ancestor scroll container
  • View transitions now inherit additional animation properties: animation-timing-function, animation-iteration-count, animation-direction, and animation-play-state
  • View transition pseudos now inherit animation-delay property through the view transition pseudo tree
Changed 1
  • overscroll-behavior now propagates from the root element instead of the body element to comply with CSS specification

Stable release date: September 2nd, 2025 Unless otherwise noted, the following changes apply to Chrome 140 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS
CSS typed arithmetic

Typed arithmetic lets you write expressions in CSS such as calc(10em / 1px) or calc(20% / 0.5em * 1px). This is useful in, for example, typography, as it lets you convert a typed value into an untyped one and reuse it for number accepting properties. Another use case is to multiply the unitless value by another type. For example, you can now cast from pixels to degrees. Tracking bug #40768696 | ChromeStatus.com entry | Spec

CSS caret-animation property

Chromium supports animation of the caret-color property. However, when animated, the caret's default blinking behavior interferes with the animation. The CSS caret-animation property has two possible values: auto and manual. auto means browser default (blinking), and manual means the developer controls the caret animation. Additionally, users who are disturbed by or have adverse reactions to blinking or flashing visuals can disable the blinking with a user stylesheet. Tracking bug #329301988 | ChromeStatus.com entry | Spec

highlightsFromPoint API

The highlightsFromPoint API lets developers interact with custom highlights. It detects which highlights exist at a specific point within a document. This interactivity is valuable for complex web features where multiple highlights may overlap or exist within shadow DOM. By providing precise point-based highlight detection, the API empowers developers to manage dynamic interactions with custom highlights more effectively. For example, developers can respond to user clicks or hover events on highlighted regions to trigger custom tooltips, context menus, or other interactive features. Tracking bug #365046212 | ChromeStatus.com entry | Spec

ScrollIntoView container option

The ScrollIntoViewOptions container option allows developers to perform a scrollIntoView operation that only scrolls the nearest ancestor scroll container. For example, the following snippet only scrolls the scroll container of target to bring target into view, but won't scroll all of the scroll containers to the viewport: target.scrollIntoView({container: 'nearest'}); ChromeStatus.com entry | Spec

View transitions: Inherit more animation properties

Adds more animation properties to inherit through the view transition pseudo tree:

  • animation-timing-function
  • animation-iteration-count
  • animation-direction
  • animation-play-state Tracking bug #427741151 | ChromeStatus.com entry | Spec
View transition pseudos inherit animation-delay.

In addition to the previous update, the animation-delay property is now inherited through the view transition pseudo tree. ChromeStatus.com entry | Spec

Nested view transitions groups

This feature allows view transitions to generate a nested pseudo-element tree rather than a flat one. This allows the view transition to appear more in line with its original elements and visual intent. It enables clipping, nested 3D transforms, and proper application of effects like opacity, masking, and filters. Tracking bug #399431227 | ChromeStatus.com entry | Spec

Propagate viewport overscroll-behavior from root

This change propagates overscroll-behavior from the root instead of the body. The CSS working group resolved not to propagate properties from the to the viewport. Instead, properties of the viewport propagate from the root () element. As such, overscroll-behavior should propagate from the root element. However, Chrome has had a longstanding issue: it propagates overscroll-behavior from the rather than the root. This behavior is not interoperable with other browsers. This change makes Chrome comply with the specification and become interoperable with other implementations. Tracking bug #41453796 | ChromeStatus.com entry | Spec

CSS counter() and counters() in alt text of content property

This feature adds the ability to use counter() and counters() in the alt text of the content property. This provides more meaningful information to improve accessibility. Tracking bug #417488055 | ChromeStatus.com entry | Spec

CSS scroll-target-group property

The scroll-target-group property specifies whether the element is a scroll marker group container. It accepts one of the following values:

  • 'none': The element does not establish a scroll marker group container.
  • 'auto': The element establishes a scroll marker group container forming a scroll marker group containing all of the scroll marker elements for which this is the nearest ancestor scroll marker group container. Establishing a scroll marker group container lets any anchor HTML elements with a fragment identifier that are inside such a container to be the HTML equivalent of ::scroll-marker pseudo-elements. The anchor element whose scroll target is currently in view can be styled using the :target-current pseudo-class. Tracking bug #6607668 | ChromeStatus.com entry | Spec
Support font-variation-settings descriptor in @font-face rule

CSS allows developers to adjust a font's weight, width, slant, and other axes using the font-variation-settings property on individual elements. However, Chromium-based browsers lack support for this property within @font-face declarations. This feature supports the string-based syntax for font-variation-settings as defined in CSS Fonts Level 4. Invalid or unrecognized feature tags are ignored per specification. No binary or non-standard forms are supported. Variable fonts are becoming more widely adopted for both performance and typographic flexibility. Adding support for this descriptor in Chromium enhances control, reduces repetition, and supports a more scalable, modern approach to web typography. Tracking bug #40398871 | ChromeStatus.com entry | Spec

DOM
ToggleEvent source attribute

The source attribute of a ToggleEvent contains the element that triggered the ToggleEvent to be fired, if applicable. For example, if a user clicks a element with the popovertarget or commandfor attribute set to open a popover, the ToggleEvent fired on the popover will have its source attribute set to the invoking . ChromeStatus.com entry | Spec

Isolated Web Apps (IWAs)
Controlled Frame API (available only to IWAs)

This feature adds a Controlled Frame API available only to Isolated Web Apps (IWAs). Like similarly-named APIs on other platforms, Controlled Frame allows embedding all content, even third-party content that cannot be embedded in . Controlled Frame also allows controlling embedded content with a collection of API methods and events. For more information about Isolated Web Apps, see the Isolated Web Apps explainer. Tracking bug #40191772 | ChromeStatus.com entry | Spec

JavaScript
Uint8Array to and from base64 and hex

Base64 is a common way to represent arbitrary binary data as ASCII. JavaScript has Uint8Arrays for binary data. However, it lacks a built-in mechanism to encode that data as base64, or to take base64 data and produce a corresponding Uint8Array. This feature adds the ability and methods for converting between hex strings and Uint8Arrays. ChromeStatus.com entry | Spec

View transition finished promise timing change

The current finished promise timing happens within the rendering lifecycle steps. This means that code that runs as a result of promise resolution happens after the visual frame that removes the view transition has been produced. This can cause a flicker at the end of the animation if the script moves styles to preserve a visually similar state. This change resolves the issue by moving the view transition cleanup steps to run asynchronously after the lifecycle is completed. Tracking bug #430018991 | ChromeStatus.com entry

Web APIs
ReadableStreamBYOBReader min option

This feature introduces a min option to the existing ReadableStreamBYOBReader.read(view) method. The method already accepts an ArrayBufferView into which it reads data, but currently does not guarantee how many elements are written before the read resolves. By specifying a min value, you can require that the stream wait until at least that many elements are available before resolving the read. This improves upon the current behavior, where reads may resolve with fewer elements than the view can hold. Tracking bug #40942083 | ChromeStatus.com entry | Spec

Get Installed Related Apps API on desktop

The Get Installed Related Apps API (navigator.getInstalledRelatedApps) provides sites access to if their corresponding related applications are installed. Sites are only allowed to use this API if the application has an established association with the web origin. The API was launched in Chrome 80 for Android. Additional support for web apps on Desktop was enabled in Chrome 140. Docs | Tracking bug #895854 | ChromeStatus.com entry | Spec

Http cookie prefix

In some cases, it's important to distinguish on the server side between cookies set by the server and those set by the client. One such case involves cookies normally always set by the server. However, unexpected code (such as an XSS exploit, a malicious extension, or a commit from a confused developer) might set them on the client. This proposal adds a signal that lets servers make such a distinction. More specifically, it defines the __Http and __HostHttp prefixes, which ensure a cookie is not set on the client side using script. Tracking bug #426096760 | ChromeStatus.com entry | Spec

Service worker
SharedWorker script inherits controller for blob script URL

The specification states that workers should inherit controllers for the blob URL. However, existing code allows only dedicated workers to inherit the controller; shared workers don't. This fixes Chrome's behavior to align with the specification. The SharedWorkerBlobURLFixEnabled enterprise policy controls this feature. Tracking bug #324939068 | ChromeStatus.com entry | Spec

Add ServiceWorkerStaticRouterTimingInfo

This feature adds timing information for the ServiceWorker Static routing API, exposed in the navigation timing API and resource timing API for developer use. ServiceWorker provides timing information to mark certain points in time. This feature adds two pieces of Static routing API-relevant timing information:

  • RouterEvaluationStart: Time to start matching a request with registered router rules.
  • CacheLookupStart: Time to start looking up the cache storage if the source is "cache". Additionally, this feature adds two pieces of router source information: the matched router source and the final router source. Tracking bug #41496865 | ChromeStatus.com entry | Spec
Origin trials
Enable incoming call notifications

This feature extends the Notifications API to allow installed PWAs to send incoming call notifications—notifications with call-styled buttons and a ringtone. This extension helps VoIP web apps create more engaging experiences by making it easier for users to recognize and answer calling notifications. Additionally, this feature helps bridge the gap between native and web implementations of apps that have them both. Origin Trial | Tracking bug #detail?id=1383570 | ChromeStatus.com entry | Spec

Crash Reporting key-value API

This feature introduces a new key-value API, tentatively window.crashReport, backed by a per-document map that holds data appended to crash reports. The data placed in this API's backing map is sent in the CrashReportBody if any renderer process crashes occur on the site. This lets developers debug what specific state in their application might be causing a given crash. Origin Trial | Tracking bug #400432195 | ChromeStatus.com entry | Spec

Add the clipboardchange event

View originalPermalink
How 140 went

139

Added 10
  • Support font-feature-settings descriptor in @font-face rule with string-based syntax as defined in CSS Fonts Level 4
  • Add CSS custom functions that return values based on other custom properties, parameters, and conditionals
  • Enable corner-shape styling to express corner shape and curvature as a superellipse, allowing squircles, notches, and scoops
  • Support async attribute for SVG <script> element to allow asynchronous script execution
  • Add request-close invoker command for declarative control of dialog closure
  • Expose new mechanisms in WebXR depth sensing to customize behavior and improve performance, including requesting raw or smooth depth buffers and non-aligned depth buffers
Changed 4
  • Short-circuit var() and attr() functions to evaluate without looking for cycles in fallback when fallback is not taken
  • Allow active transitions to continue running when transition property is set to none, making Chrome consistent with Safari and Firefox
  • Change scroll anchoring algorithm to select the candidate as the scope or root of regular anchor selection instead of as the priority candidate
  • Relax validation of JavaScript DOM APIs to match the HTML parser and allow more characters in element and attribute names

Stable release date: August 5th, 2025 Unless otherwise noted, the following changes apply to Chrome 139 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
Short-circuiting var() and attr()

When the fallback is not taken, var() and attr() functions evaluate without looking for cycles in that fallback. ChromeStatus.com entry

Support font-feature-settings descriptor in @font-face rule

This feature supports the string-based syntax for font-feature-settings as defined in CSS Fonts Level 4. Invalid or unrecognized feature tags will be ignored per specification. No binary or non-standard forms are supported. As OpenType fonts become more widely adopted, this enhancement will improve typographic control, reduce redundancy, and support a more scalable, modern approach to web design. Tracking bug #40398871 | ChromeStatus.com entry | Spec

CSS custom functions

Custom functions are similar to custom properties, but instead of returning a single, fixed value, they return values based on other custom properties, parameters, and conditionals. Tracking bug #325504770 | ChromeStatus.com entry | Spec

Continue running transitions when switching to initial transition value

When the transition related properties change, they are only supposed to affect newly started transitions. This means that if you change the transition properties, unless you also change the properties which have active transition animations, those transition animations will continue with the previously specified duration and easing. Chrome incorrectly canceled transitions when the transition property was set to none, even though it doesn't cancel them if you only change the transition-duration. This change makes Chrome consistent with Safari and Firefox, allowing active transitions to continue running, until their property value changes triggering a new transition update. ChromeStatus.com entry | Spec

Corner shaping (corner-shape, superellipse, squircle)

Enable styling corners, on top of the existing border-radius, by expressing the shape and curvature of the corner as a superellipse. This allows shapes like squircles, notches, and scoops, and animating between them. Tracking bug #393145930 | ChromeStatus.com entry | Spec

Add font-width property and descriptor and make font-stretch a legacy alias
Support async attribute for SVG element

The SVGScriptElement interface in SVG 2.0 introduces the async attribute, similar to the HTMLScriptElement. This attribute allows scripts to be executed asynchronously, improving the performance and responsiveness of web applications that use SVG. Tracking bug #40067618 | ChromeStatus.com entry | Spec

The request-close invoker command

Dialog elements can be closed through a variety of mechanisms, sometimes developers want to have the ability to prevent closure. To achieve this dialogs fire a cancel event. Originally this was only fired via a close request (for example, an ESC key press), recently a requestClose() JavaScript function was added which also fires the cancel event. The request-close command brings that new ability to the declarative invoker commands API. Tracking bug #400647849 | ChromeStatus.com entry | Spec

Scroll anchoring priority candidate fix

Changes the scroll anchoring algorithm. Instead of selecting the priority candidate as the anchor, choose the candidate as the scope or root of the regular anchor selection algorithm which will select the deepest onscreen element as the anchor. ChromeStatus.com entry

Device
WebXR depth sensing performance improvements

Exposes several new mechanisms to customize the behavior of the depth sensing feature within a WebXR session, with the goal of improving the performance of the generation or consumption of the depth buffer. The key mechanisms exposed are: the ability to request the raw or smooth depth buffer, the ability to request that the runtime stop or resume providing the depth buffer, and the ability to expose a depth buffer that does not align with the user's view exactly, so that the user agent does not need to perform unnecessary re-projections every frame. Tracking bug #410607163 | ChromeStatus.com entry | Spec

DOM
Allow more characters in JavaScript DOM APIs

The HTML parser has always (or for a long time) allowed elements and attributes to have a wide variety of valid characters and names, but the JavaScript DOM APIs to create the same elements and attributes are more strict and don't match the parser. This change relaxes the validation of the javascript DOM APIs to match the HTML parser. Tracking bug #40228234 | ChromeStatus.com entry | Spec

Graphics
WebGPU: 3D texture support for BC and ASTC compressed formats

The texture-compression-bc-sliced-3d and texture-compression-astc-sliced-3d WebGPU features add respectively 3D texture support for BC and ASTC compressed formats. Tracking bug #342840940 | ChromeStatus.com entry | Spec

Secure Payment Confirmation (SPC)
The securePaymentConfirmationAvailability API

This is a JavaScript API to provide an easier way to check if the Secure Payment Confirmation (SPC) feature is available. With this API, the only way to determine SPC's availability was to create a PaymentRequest with the required parameters, which is clunky and difficult in the case where a developer wants to check for SPC before starting to process a payment. Tracking bug #40258712 | ChromeStatus.com entry | Spec

Secure Payment Confirmation: Browser Bound Keys

Adds an additional cryptographic signature over Secure Payment Confirmation assertions and credential creation. The corresponding private key is not synced across devices. This helps web developers meet requirements for device binding for payment transactions. Tracking bug #377278827 | ChromeStatus.com entry | Spec

On-device AI
On-device Web Speech API

This feature adds on-device speech recognition support to the Web Speech API, allowing websites to ensure that neither audio nor transcribed speech are sent to a third-party service for processing. Websites can query the availability of on-device speech recognition for specific languages, prompt users to install the necessary resources for on-device speech recognition, and choose between on-device or cloud-based speech recognition as needed. ChromeStatus.com entry | Spec

Navigation
Clear window name for cross-site navigations that switches browsing context group

Clears the value of the window.name property when navigation switches browsing context groups, to avoid leaking information that could be used as a tracking vector. Tracking bug #1090128 | ChromeStatus.com entry | Spec

Network
Reduce fingerprinting in Accept-Language header information

Reduces the amount of information the Accept-Language header value string exposes in HTTP requests and in navigator.languages. Instead of sending a full list of the user's preferred languages on every HTTP request using the Accept-Language header, Chrome only sends the user's most preferred language. Tracking bug #1306905 | ChromeStatus.com entry

Randomize TCP port allocation on Windows

This launch enables TCP port randomization on versions of Windows (2020 or later) where we don't expect to see issues with re-use of prior ports occurring too fast (causing rejection due to timeouts on port re-use). The rapid port re-use issue arises from the Birthday problem, where the probability of randomly re-picking a port already seen rapidly converges with 100% for each new port chosen when compared to port re-use in a sequential model. Tracking bug #40744069 | ChromeStatus.com entry

Performance
Faster background freezing on Android

Shortens the time to freezing background pages (and associated workers) from five minutes to one minute on Android. Tracking bug #435623337 | ChromeStatus.com entry

Security
Fire error event for Content Security Policy (CSP) blocked worker

Makes Chrome conform to the specification, checking the CSP during fetch and firing the error event asynchronously instead of throwing exception when script runs "new Worker(url)" or "new SharedWorker(url)". Tracking bug #41285169 | ChromeStatus.com entry | Spec

WebRTC
Audio level for RTC encoded frames

This feature exposes to the web the audio level of an encoded frame transmitted using RTCPeerConnection and exposed using WebRTC encoded transform. Tracking bug #418116079 | ChromeStatus.com entry | Spec

Web APIs
Web app scope extensions

Adds a scope_extensions web app manifest field that enables web apps to extend their scope to other origins. This allows sites that control multiple subdomains and top level domains to be presented as a single web app. Requires listed origins to confirm association with the web app using a .well-known/web-app-origin-association configuration file. Tracking bug #detail?id=1250011 | ChromeStatus.com entry | Spec

Specification-compliant JSON MIME type detection

Chrome now recognizes all valid JSON MIME types as defined by the WHATWG mimesniff specification. This includes any MIME type whose subtype ends with +json, in addition to application/json and text/json. This change ensures that web APIs and features relying on JSON detection behave consistently with the web platform standard and other browsers. ChromeStatus.com entry | Spec

WebGPU core-features-and-limits

The core-features-and-limits feature signifies a WebGPU adapter and device support the core features and limits of the spec. Tracking bug #418025721 | ChromeStatus.com entry | Spec

Crash Reporting API: Specify crash-reporting to receive only crash reports

This feature ensures developers receive only crash reports by specifying the endpoint named crash-reporting. By default, crash reports are delivered to the default endpoint which receives many other kinds of reports besides crash reports. Developers can supply a separate URL to the well-known endpoint named crash-reporting, to direct crash reports there, instead of the default endpoint. Tracking bug #414723480 | ChromeStatus.com entry | Spec

Origin trials
Prompt API

An API designed for interacting with an AI language model using text, image, and audio inputs. It supports various use cases, from generating image captions and performing visual searches to transcribing audio, classifying sound events, generating text following specific instructions, and extracting information or insights from text. It supports structured outputs which ensure that responses adhere to a predefined format, typically expressed as a JSON schema, to enhance response conformance and facilitate seamless integration with downstream applications that require standardized output formats. This API is also exposed in Chrome Extensions. This feature entry tracks the exposure on the web. An enterprise policy (GenAILocalFoundationalModelSettings) is available to disable the underlying model downloading which would render this API unavailable. Origin Trial | Origin trial blog post | Tracking bug #417530643 | ChromeStatus.com entry

Extended lifetime shared workers

This adds a new option, extendedLifetime: true, to the SharedWorker constructor. This requests that the shared worker be kept alive even after all current clients have unloaded. The primary use case is to allow pages to perform asynchronous work that requires JavaScript after a page unloads, without needing to rely on a service worker. Origin Trial | Origin trial blog post | Tracking bug #400473072 | ChromeStatus.com entry

SoftNavigation performance entry

Exposes the (experimental) soft navigation heuristics to web developers, using both PerformanceObserver and the performance timeline. This feature reports two new performance entries:

  • soft-navigation, for user interactions which navigate the page. Defines a new timeOrigin to help slice the performance timeline. …
View originalPermalink
How 139 went

138

Added 9
  • Add CSS abs() and sign() functions to compute absolute values and sign of numeric values
  • Add CSS progress() functional notation to represent position between two calculations
  • Add CSS sibling-index() and sibling-count() functions to style elements based on their position among siblings
  • Add CSS stretch sizing keyword for elements to fill their containing block's available space
  • Add CSS env variable to expose user's preferred OS-level font scale
  • Add Web Serial API over Bluetooth RFCOMM support on Android devices
Changed 1
  • Update QuotaExceededError to be a DOMException derived interface with optional quota and requested properties

Stable release date: June 24th, 2025 Unless otherwise noted, the following changes apply to Chrome 138 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
CSS Sign-Related Functions: abs(), sign()

The sign-related functions abs() and sign() compute various functions related to the sign of their argument. The abs(A) function contains one calculation A, and returns the absolute value of A, as the same type as the input: if A's numeric value is positive or 0⁺, just A again; otherwise -1 * A. The sign(A) function contains one calculation A, and returns -1 if A's numeric value is negative, +1 if A's numeric value is positive, 0⁺ if A's numeric value is 0⁺, and 0⁻ if A's numeric value is 0⁻. The return type is a , made consistent with the type of the input calculation. MDN Docs:abs() | Tracking bug #40253181 | ChromeStatus.com entry | Spec

Interpolation progress functional notation: CSS progress() function

The progress() functional notation returns a value representing the position of one calculation (the progress value) between two other calculations (the progress start value and progress end value). The progress() function is a math function. Tracking bug #40944203 | ChromeStatus.com entry | Spec

CSS sibling-index() and sibling-count()

The sibling-index() and sibling-count() functions can be used as integers in CSS property values to style elements based on their position among its siblings, or the total number of siblings respectively. These functions can be used directly as integer values, but more interestingly inside calc() expressions. Tracking bug #40282719 | ChromeStatus.com entry | Spec

CSS stretch sizing keyword

A keyword for CSS sizing properties (for example, width and height) that lets elements grow to exactly fill their containing block's available space. It is similar to '100%', except the resulting size is applied to the element's margin box instead of the box indicated by box-sizing. Using this keyword lets the element keep its margins while still being as large as possible. An unprefixed version of -webkit-fill-available. Tracking bug #41253915 | ChromeStatus.com entry | Spec

CSS env variable for OS-level font scale

Exposes a user's preferred font scale to CSS. Without this, it's not practical for a page to detect if the user has changed their preferred font size using the Operating System's preferences. This CSS environment variable will reflect the scale chosen by the user. Tracking bug #397737223 | ChromeStatus.com entry | Spec

Devices
Web serial over Bluetooth on Android

This feature lets web pages and web apps connect to serial ports over Bluetooth on Android devices. Chrome on Android now supports Web Serial API over Bluetooth RFCOMM. Existing enterprise policies (DefaultSerialGuardSetting, SerialAllowAllPortsForUrls, SerialAllowUsbDevicesForUrls, SerialAskForUrls and SerialBlockedForUrls) on other platforms are enabled in future_on states for Android. All policies except SerialAllowUsbDevicesForUrls will be enabled after the feature is enabled. SerialAllowUsbDevicesForUrls will be enabled in a future launch after Android provides system level support of wired serial ports. Tracking bug #375245353 | ChromeStatus.com entry | Spec

Viewport Segments Enumeration API

The Viewport Segments API allows developers to adapt their web layout to target foldable devices. The viewport segments defines the position and dimensions of a logically separate region of the viewport. Viewport segments are created when the viewport is split by one or more hardware features (such as a fold or a hinge between separate displays) that act as a divider; segments are the regions of the viewport that can be treated as logically distinct by the developer. Tracking bug #1039050 | ChromeStatus.com entry | Spec

JavaScript
Update QuotaExceededError to a DOMException derived interface

Previously, when the web platform wants to tell you when you've exceeded quota, it will use DOMException with the specific name property set to QuotaExceededError. However this does not allow carrying additional information. This proposes removing "QuotaExceededError" from the list of built-in DOMException names, and instead creates a class name QuotaExceededError from the list of built-in DOMException and has the additional optional properties quota and requested. We propose all instances of specs that throw "QuotaExceededError" DOMExceptions get upgraded to instead throw QuotaExceededErrors. For now, such specs would leave the quota and requested properties at their default value of null, but they could eventually upgrade to include that data, if it's useful for their use case (and isn't, e.g., a privacy leak). ChromeStatus.com entry | Spec

Web APIs
Translator API

A JavaScript API to provide language translation capabilities to web pages. Browsers are increasingly offering language translation to their users. Such translation capabilities can also be useful to web developers. This is especially the case when browser's built-in translation abilities cannot help. An enterprise policy (GenAILocalFoundationalModelSettings) is available to disable the underlying model downloading which would render this API unavailable. MDN Docs | Tracking bug #322229993 | ChromeStatus.com entry | Spec

Language Detector API

A JavaScript API for detecting the language of text, with confidence levels. An important supplement to translation is language detection. This can be combined with translation, for example, taking user input in an unknown language and translating it to a specific target language. Browsers today often already have language detection capabilities, and we want to offer them to web developers through a JavaScript API, supplementing the translation API. An enterprise policy (GenAILocalFoundationalModelSettings) is available to disable the underlying model downloading which would render this API unavailable. MDN Docs | ChromeStatus.com entry | Spec

Summarizer API

Summarizer API is a JavaScript API for producing summaries of input text, backed by an AI language model. Browsers and operating systems are increasingly expected to gain access to a language model. By exposing this built-in model, we avoid every website needing to download their own multi-gigabyte language model, or send input text to third-party APIs. The summarizer API in particular exposes a high-level API for interfacing with a language model in order to summarize inputs for a variety of use cases (GitHub), in a way that does not depend on the specific language model in question. An enterprise policy (GenAILocalFoundationalModelSettings) is available to disable the underlying model downloading which would render this API unavailable. MDN Docs | Tracking bug #351744634 | ChromeStatus.com entry | Spec

Escape < and > in attributes on serialization

Escape < and > in values of attributes on serialization. This mitigates the risk of mutation XSS attacks, which occur when value of an attribute is interpreted as a start tag token after being serialized and re-parsed. ChromeStatus.com entry | Spec

Crash Reporting API: is_top_level and visibility_state

This feature adds is_top_level and visibility_state string fields to the crash reporting API body that gets sent to the default reporting endpoint for crash reports. ChromeStatus.com entry | Spec

Fire the pushsubscriptionchange event upon resubscription

Fire the pushsubscriptionchange event in service workers when an origin for which a push subscription existed in the past, but which was revoked because of a permission change (from granted to deny/default), is re-granted notification permission. The event will be fired with an empty oldSubscription and newSubscription. Tracking bug #407523313 | ChromeStatus.com entry | Spec

Multimedia
Add support for video frame orientation metadata to WebCodecs

Introduces rotation: int and flip: bool values to various video related interfaces in WebCodecs so that developers can work with frame sources that have orientation (For example, Android cameras, certain media). The VideoFrame interface grows the ability to create VideoFrames with arbitrary rotation and flip as well as accessors for this information on the VideoFrame object. The VideoDecoderConfig object gains rotation and flip fields that are emitted on decoded VideoFrame objects automatically. The VideoEncoder class gains mechanisms for passing rotation and flip information from encode() to the VideoDecoderConfig emitted as part of EncodedVideoChunkMetadata. If encode() is called with frames with different orientations a nonfatal exception will be thrown. configure() may be used to reset the allowed orientation. Tracking bug #40243431 | ChromeStatus.com entry | Spec

Performance
Add prefetchCache and prerenderCache to Clear-Site-Dataheader

Two new values for the Clear-Site-Data header to help developers target clearing the prerender and prefetch cache: "prefetchCache" and "prerenderCache". Tracking bug #398149359 | ChromeStatus.com entry | Spec

Speculation rules: target_hint field

This extends speculation rules syntax to allow developers to specify the target_hint field. This field provides a hint to indicate a target navigable where a prerendered page will eventually be activated. For example, when _blank is specified as a hint, a prerendered page can be activated for a navigable opened by window.open(). The field has no effect on prefetching. The specification allows this field to accept any strings that are valid as navigable target name or keyword as the value, but this launch supports only one of "_self" or "_blank" strings. If the hint is not specified, it's treated like "_self" is specified. Tracking bug #40234240 | ChromeStatus.com entry | Spec

Security
Integrity Policy for scripts

Subresource-Integrity (SRI) enables developers to make sure the assets they intend to load are indeed the assets they are loading. But there's no current way for developers to be sure that all of their scripts are validated using SRI. The Integrity-Policy header gives developers the ability to assert that every resource of a given type needs to be integrity-checked. If a resource of that type is attempted to be loaded without integrity metadata, that attempt will fail and trigger a violation report. ChromeStatus.com entry | Spec

Service Worker
ServiceWorker support for Speculation Rules Prefetch

This feature enables ServiceWorker-controlled prefetches, that is a speculation rules prefetch to URLs controlled by a Service Worker. Previously, the prefetch is cancelled upon detecting a controlling Service Worker, thus subsequent navigation to the prefetch target is served by the non-prefetch path. This feature will enable the prefetch request to go through the Service Worker's fetch handler and the response with the Service Worker interception is cached in the prefetch cache, resulting in a subsequent navigation being served by the prefetch cache. Use the enterprise policy PrefetchWithServiceWorkerEnabled to control this feature. Tracking bug #40947546 | ChromeStatus.com entry | Spec

Deprecations and removals
WebGPU: Deprecate GPUAdapter isFallbackAdapter attribute

Deprecates the GPUAdapter isFallbackAdapter boolean attribute from WebGPU, which is redundant with the GPUAdapterInfo isFallbackAdapter boolean attribute. This upcoming removal is a minor breaking change as support for fallback adapters has not yet been implemented in any browser, thereby resulting in both isFallbackAdapter attributes consistently returning a falsy value. Tracking bug #409259074 | ChromeStatus.com entry | Spec

Deprecate asynchronous range removal for Media Source Extensions

The Media Source standard long ago changed to disallow ambiguously defined behavior involving asynchronous range removals:

  • SourceBuffer.abort() no longer aborts SourceBuffer.remove() operations. …
View originalPermalink
How 138 went

137

Added 9
  • CSS if() function provides a concise way to express conditional values by accepting condition-value pairs and returning the value associated with the first true condition
  • CSS reading-flow property controls the order in which elements in flex, grid, or block layouts are exposed to accessibility tools and focused using tab keyboard navigation
  • CSS reading-order property allows authors to manually override the order within a reading flow container
  • Selection.direction API method returns the selection's direction as either none, forward, or backward
  • Selection.getComposedRanges() API method returns a list of composed StaticRange that are allowed to cross shadow boundaries
  • Support offset-path: shape() to allow using responsive shapes to set the animation path
Changed 2
  • Letter-spacing setting is now ignored for cursive scripts including Arabic, Hanifi Rohingya, Mandaic, Mongolian, N'Ko, Phags Pa, and Syriac to ensure proper readability
  • SVG use element can now reference an external document's root element by omitting the fragment identifier instead of requiring an explicit fragment ID

Stable release date: May 27th, 2025 Unless otherwise noted, the following changes apply to Chrome 137 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
CSS if() function

The CSS if() function provides a concise way to express conditional values. It accepts a series of condition-value pairs, delimited by semicolons. The function evaluates each condition sequentially and returns the value associated with the first true condition. If none of the conditions evaluate to true, the function returns an empty token stream. This lets you express complex conditional logic in a simple and concise way. Example: div { color: var(--color); background-color: if(style(--color: white): black; else: white); } .dark { --color: black; } .light { --color: white; }

View originalPermalink
How 137 went
View all

Discussion