Chrome 135 beta

Published: March 05, 2025

Unless otherwise noted, the following changes apply to the newest Chrome beta channel release for Android, ChromeOS, Linux, macOS, and Windows. Learn more about the features listed here through the provided links or from the list on ChromeStatus.com. Chrome 135 is beta as of 5 March 2025. You can download the latest on Google.com for desktop or on Google Play Store on Android.

CSS and UI

This release adds thirteen new CSS and UI features.

Anchor positioning remembered scroll offset

Add support for the concept of remembered scroll offset. When a positioned element has a default anchor, and is tethered to this anchor at one edge, and against the original containing block at the other edge, the scroll offset will be taken into account when it comes to sizing the element. This means you can use all visible space (using position-area) for the anchored element when the document is scrolled at a given scroll offset. In order to avoid layout (resizing the element) every time the document is scrolled, the browser uses the remembered scroll offset, rather than always using the current scroll offset. The remembered scroll offset is updated at an anchor recalculation point, which is either the position where the positioned element is initially displayed, or, when a different position option (position-try-fallbacks) is chosen.

CSS Inertness

Making an element inert affects whether it can be focused, edited, selected, and searchable by find-in-page. It also affects whether it is visible in the accessibility tree. The interactivity property specifies whether an element and its flat tree descendants (including text runs) are inert or not. The interactivity property accepts one of two values: auto or inert.

Logical overflow properties

The overflow-inline and overflow-block CSS properties let you set overflow in inline and block direction relative to the writing-mode. In a horizontal writing-mode overflow-inline maps to overflow-x, while in a vertical writing-mode it maps to overflow-y.

The sign-related functions ​abs() and sign() ​compute various functions related to the sign of their argument.

The dynamic-range-limit property

Lets a page limit the maximum brightness of HDR content.

The shape() function

The shape() function allows responsive free-form shapes in the clip-path property. It lets you define a series of commands, equivalent to the commands in path(). However, the commands accept responsive units (for example, % or vw), as well as any CSS values such as custom properties.

The ::column pseudo-element

A ::column pseudo-element, which allows applying a limited set of styles to the generated fragments. Specifically, this is limited to styles which do not affect the layout, and thus can be applied post-layout.

::scroll-button() pseudo-elements

Allow the creation of interactive scroll buttons as pseudo-elements. For example:

.scroller {
  overflow: auto;
}

.scroller::scroll-button(inline-start) {
  content: "<";
}

.scroller::scroll-button(inline-end) {
  content: ">";
}

These should be focusable, behaving as a button (including their UA styles). When activated, a scroll should be performed in the direction by some amount. When it is not possible to scroll in that direction, they should be disabled (and styled with :disabled), otherwise they are enabled (and styled with :enabled). The selector lets you define buttons in four logical directions: block-start, block-end, inline-start, inline-end; as well as four physical directions: up, down, left, right.

::scroll-marker and ::scroll-marker-group

Adds the ::scroll-marker and ::scroll-marker-group for scrolling containers. These pseudo-elements let you create a set of focusable markers for all of the associated items within the scrolling container.

Nested pseudo elements styling

Enables styling of pseudo-elements that are nested inside other pseudo-elements. So far, support is defined for: ::before::marker and ::after::marker with ::column::scroll-marker being supported in the future.

To eliminate user browsing history leaks, anchor elements are styled as :visited only if they have been clicked from this top-level site and frame origin before. By only styling links that have been clicked on this site and frame before, the many side-channel attacks that have been developed to obtain :visited links styling information are now obsolete, as they no longer provide sites with new information about users.

There is an exception for self-links, where links to a site's own pages can be styled as :visited even if they have not been clicked on in this exact top-level site and frame origin before. This exemption is only enabled in top-level frames or subframes which are the same-origin with the top-level frame. The privacy benefits are still achieved because sites already know which of its subpages a user has visited, so no new information is exposed. This was a community-requested exception which improves user experience.

Interpolation progress functional notations: CSS *progress() functions

The progress(), media-progress(), and container-progress() functional notations represent the proportional distance of a given value (the progress value) from one value (the progress start value) to another value (the progress end value). They allow drawing a progress ratio from math functions, media features, and container features, respectively.

safe-area-max-inset-* variables

In addition to the safe-area-inset environment variables, Chrome now also supports max-area-safe-inset-* variants of these variables. Unlike the dynamic insets, the max insets do not change and represent the maximum possible safe area inset.

These values are necessary when building performant edge-to-edge web experiences.

Web APIs

Add MediaStreamTrack support to the Web Speech API

Add MediaStreamTrack support to the Web Speech API. The Web Speech API is a web standard API that allows developers to incorporate speech recognition and synthesis into their web pages. Currently, the Web Speech API uses the user's default microphone as the audio input. MediaStreamTrack support allows websites to use the Web Speech API to caption other sources of audio including remote audio tracks.

Blob URL Partitioning: Fetching and navigation

As a continuation of Storage Partitioning, this feature implements partitioning of Blob URL access by Storage Key (top-level site, frame origin, and the has-cross-site-ancestor boolean), with the exception of top-level navigations which will remain partitioned only by frame origin.

CSP require-sri-for for scripts

The require-sri-for directive gives you 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 CSP violation report. This intent covers the "script" value of this directive.

Create service worker client and inherit service worker controller for srcdoc iframe

Srcdoc context documents are currently not service worker clients and not covered by their parent's service worker. That results in some discrepancies (for example, Resource Timing reports the URLs that these documents load, but service worker doesn't intercept them). This aims to fix the discrepancies by creating service worker clients for srcdoc iframes and make them inherit their parent's service worker controller.

Dispatching click events to captured pointer

If a pointer is captured while the pointerup event is being dispatched, the click event will be dispatched to the captured target instead of the nearest common ancestor of pointerdown and pointerup events as per the UI Event spec. For uncaptured pointers, the click target remains unchanged.

Float16Array

Adds the Float16Array typed array. Number values are rounded to IEEE fp16 when writing into Float16Array instances.

Incorporating navigation initiator into the HTTP cache partition key

Chrome's HTTP cache keying scheme has been updated to include an is-cross-site-main-frame-navigation boolean to mitigate cross-site leak attacks involving top-level navigation. Specifically, this will prevent cross-site attacks in which an attacker can initiate a top-level navigation to a given page and then navigate to a resource known to be loaded by the page in order to infer sensitive information via load timing. This change also improves privacy by preventing a malicious site from using navigations to infer whether a user has visited a given site previously.

HSTS tracking prevention

Mitigates user tracking by third-parties via the HSTS cache.

This feature only allows HSTS upgrades for top-level navigations and blocks HSTS upgrades for sub-resource requests. Doing so makes it infeasible for third-party sites to use the HSTS cache to track users across the web.

Invoker Commands: the command and commandfor attributes

The command and commandfor attributes on <button> elements let you assign behaviour to buttons in a more accessible and declarative way, while reducing bugs and simplifying the amount of JavaScript needed for interactivity. Buttons with commandfor and command attributes will—when clicked, touched, or enacted with keypress—dispatch a CommandEvent on the element referenced by commandfor, with some default behaviours such as opening dialogs and popovers.

Adds support for <link rel="facilitated-payment" href="..."> as a hint that the browser should notify registered payment clients about a pending push payment.

The NavigateEvent sourceElement property

When a navigation is initiated by an Element (that is, a link click or a form submission), the sourceElement property on the NavigateEvent will return the initiating element.

NotRestoredReasons API reason name change

The NotRestoredReasons API is changing some of the reason texts to align to the standardized names. Developers monitoring these reasons may notice a change in reason texts.

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.

Service Worker client URL ignore history.pushState changes

Modifies the service worker Client.url property to ignore document URL changes using history.pushState() and other similar history APIs. The Client.url property is intended to be the creation URL of the HTML document which ignores such changes.

Support rel and relList attributes for SVGAElement

The SVGAElement interface in SVG 2.0 allows manipulation of <a> elements similar to HTML anchor elements. Supporting the rel and relList attributes enhances security and privacy for developers. This alignment with HTML anchor elements ensures consistency and ease of use across web technologies.

Timestamps for RTC Encoded Frames

This feature consists in exposing to the Web some timestamps that are present in WebRTC encoded frames transmitted via RTCPeerConnection. The timestamps in question are:

  • Capture timestamp: the timestamp when a frame was originally captured
  • Receive timestamp: the timestamp when a frame was received

Update ProgressEvent to use double type for 'loaded' and 'total'

The ProgressEvent has attributes loaded and total indicating the progress, and their type is unsigned long long now. With this feature, the type for these two attributes is changed to double instead, which gives the developer more control over the value. For example, the developers can now create a ProgressEvent with the total of 1 and the loaded increasing from 0 to 1 gradually. This is aligned with the default behavior of the <progress> HTML element if the max attribute is omitted.

The fetchLater API

The fetchLater() API is a JavaScript API to request a deferred fetch, especially useful for more reliable beaconing at the end of a page's lifetime. Once called in a document, a deferred request is queued by the browser in the PENDING state, and will be invoked by the earliest of the following conditions:

The document is destroyed. After a user-specified time. For privacy reasons, all pending requests will be flushed when the document enters bfcache no matter how much time is left. The browser decides it's time to send it.

The API returns a FetchLaterResult that contains a boolean field activated that may be updated to tell whether the deferred request has been sent out or not. On successful sending, the whole response will be ignored by the browser, including body and headers.

Note that from the point of view of the API user, the exact send time is unknown.

New origin trials

In Chrome 135 you can opt into the following new origin trials.

Interest Invokers

This feature adds an interesttarget attribute to <button> and <a> elements. The interesttarget attribute adds "interest" behaviors to the element, such that when the user "shows interest" in the element, actions are triggered on the target element. Actions can include things like showing a popover. The user agent will handle detecting when the user "shows interest" in the element, using methods such as hovering the element with a mouse, hitting special hotkeys on the keyboard, or long-pressing the element on touchscreens. When interest is shown or lost, an InterestEvent is fired on the target, which have default actions in the case of popovers—showing and hiding the popover.

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.

Deprecations and removals

This version of Chrome introduces the deprecations and removals listed below. Visit ChromeStatus.com for lists of planned deprecations, current deprecations and previous removals.

This release of Chrome deprecates one feature.

Deprecate getters of Intl Locale Info

The 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. Chrome landed an implementation in Chrome 99, however the proposal changed to move several getters to functions. We need to remove the deprecated getters and relaunch the renamed functions.

This release of Chrome removes three features.

Remove deprecated navigator.xr.supportsSession method

navigator.xr.supportsSession was replaced in the WebXR spec by the navigator.xr.isSessionSupported method in September of 2019 after receiving feedback on the API shape from the TAG. It has been marked as deprecated in Chrome since then, producing a console warning redirecting developers to the updated API. Usage of the call is very low, and all major frameworks that are used to build WebXR content have been confirmed to have been updated to use the newer call.

Remove NavigateEvent canTransition property

In Chrome 108, the NavigateEvent's transitionWhile() method and canTransition property were replaced with the new intercept() method and canIntercept property. At that time, the transitionWhile() method was removed. However, we forgot to remove the canTransition property: instead, we left it around as an alias for canIntercept. In Chrome 135, we're fixing that and removing canTransition. Any uses of canTransitioncan be replaced with canIntercept, with no change in behavior.

Remove WebGPU limit maxInterStageShaderComponents

The maxInterStageShaderComponents limit is being removed due to a combination of factors:

  • Redundancy with maxInterStageShaderVariables: This limit already serves a similar purpose, controlling the amount of data passed between shader stages.
  • Minor Discrepancies: While there are slight differences in how the two limits are calculated, these differences are minor and can be effectively managed within the maxInterStageShaderVariables limit.
  • Simplification: Removing maxInterStageShaderComponents streamlines the shader interface and reduces complexity for developers. Instead of managing two separate limits (that both apply simultaneously but with subtle differences), they can focus on the more appropriately named and comprehensive maxInterStageShaderVariables.