Chrome 125 beta

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 Chrome 125 is beta as of April 17, 2024. You can download the latest on for desktop or on Google Play Store on Android. Once released to stable, all included features can be found in the release notes.


This release adds two new CSS features and makes two CSS-related changes.

CSS Anchor Positioning

CSS anchor positioning lets developers tether an absolutely positioned element to one or more other elements on the page (the anchors), in a declarative way, without the use of JavaScript. Anchor positioning works performantly when the anchors are scrollable. A common use case is to position a popover such as a tooltip next to the element that invoked it, or a select menu and its popover options list. Before the anchor positioning feature, these use cases required JavaScript to dynamically position the popover, and keep it anchored as the invoking element was scrolled, which is a performance footgun and difficult to get right. With anchor positioning, these use cases can be implemented performantly and declaratively.

The anchor positioning feature consists of a large number of CSS properties. A few of the key properties are as follows:

  • anchor-name: sets up an element to be an anchor for other elements.
  • position-anchor: describes the "default" anchor that an anchored element should use for anchor positioning.
  • The anchor() function: used to refer to the position of the anchor element, in positioning the anchored element.
  • inset-area: a shorthand for positioning, for common relative positions.

CSS stepped value functions—round(), mod(), and rem()

The stepped-value functions, round(), mod(), and rem(), all transform a given value according to another "step value".

The round() CSS function returns a rounded number based on a selected rounding strategy.

The mod() CSS function returns a modulus left over when the first parameter is divided by the second parameter, similar to the JavaScript remainder operator (%). The modulus is the value left over when one operand, the dividend, is divided by a second operand, the divisor. It always takes the sign of the divisor.

The rem() CSS function returns a remainder left over when the first parameter is divided by the second parameter, similar to the JavaScript remainder operator (%). The remainder is the value left over when one operand, the dividend, is divided by a second operand, the divisor. It always takes the sign of the dividend.

Remove discontinuity for Oklab and Oklch colors with lightness of nearly 100% or 0

Before this change, all Lab, LCH, Oklab and Oklch colors with a lightness value of 100% were rendered as white, regardless of the other two parameters. All colors in these spaces with a lightness value of 0 were rendered as black. These two mappings caused discontinuities in gradients and were unexpected to web developers.

With this rollback, these colors are no longer mapped artificially and the resulting displayed color will be continuous with nearby colors and depend on the gamut mapping of the display.

Used color scheme root scrollbars

Makes the browser use the user's preferred color scheme to render the viewport scrollbars if the value of "page's supported color schemes" is 'normal' or not specified, and the computed value of color-scheme for the root element is normal. Viewport scrollbars can be considered to be outside the web content. Therefore, the user agents should honor the user's preferred color scheme when rendering viewport scrollbars if the developer has not explicitly specified support for color schemes.

This change does not prevent developers from controlling the color scheme for scrollbars. The new behavior makes the browser use the user's preferred color-scheme to render viewport non-overlay scrollbars only if the developer hasn’t specified the color scheme for the root element.


Keyboard-focusable scroll containers

Improves accessibility by making scroll containers focusable using sequential focus navigation. Prior to this change, the tab key doesn't focus scrollers unless tabIndex is explicitly set to 0 or more.

By making scrollers focusable by default, users who can't (or don't want to) use a mouse will be able to focus clipped content using a keyboard's tab and arrow keys. This behavior is enabled only if the scroller does not contain any keyboard focusable children.

This is an ongoing rollout that started in Chrome 124, and should be available to all users from Chrome 125. Learn more about keyboard focusable scrollers.

Declarative shadow DOM serialization

A feature to let developers serialize DOM trees containing shadow roots, recently standardized in the HTML standard.

Web APIs

Additions to the Attribution Reporting API

Features have been added to the Attribution Reporting API to create additional debugging capabilities by supporting parsing failure debug reports, improve API ergonomics by supporting a field to specify preferred registration platform, and improve privacy.

The Compute Pressure API

The Compute Pressure API offers high-level states that represent the CPU load on the system. It allows the implementation to use the right underlying hardware metrics to ensure that users can take advantage of all the processing power available to them as long as the system is not under unmanageable stress. Intel led the design and implementation work for this API, which will let video conferencing apps dynamically balance features and performance.

Accept HTTP(S) URLs when constructing WebSocket

This update enables HTTP(s) schemes in the WebSocket constructor, therefore also letting developers use relative URLs. These are normalized to the ws: and wss: internal schemes.

This launches the proposed extension of the Storage Access API (backwards compatible and has been in origin trial) to allow access to unpartitioned cookie and non-cookie storage in a third-party context. The current API only provides access to cookies, which have different use-cases than non-cookie storage.

FedCM CORS requirement on ID assertion endpoint

The fetches in the FedCM API are hard to reason about because of the properties required of them. While there is ongoing discussion regarding the accounts endpoint, there is also largely consensus that the ID assertion endpoint should use CORS. This update aligns security properties of this fetch more closely to other fetches in the web platform. Learn more about how CORS requirement works in FedCM updates: Button Mode API origin trial, CORS and SameSite.

Interoperable mousemove default action

Chrome allowed canceling mousemove events to prevent other APIs like text selection (and even drag-and-drop in the past). This does not match other major browsers; nor does it conform to the UI Event spec. Now text selection will no longer be the default action of mousemove. Text selection and drag-and-drop can still be prevented through canceling selectstart and dragstart events respectively.

Updates to the Shared Storage API

This update adds support for running cross origin worklets without having to create an iframe.

Chrome Apps

Direct Sockets API in Chrome Apps

This update helps ease the transition of specialized apps from Chrome Apps to Isolated Web Apps by enabling Direct Sockets in Chrome Apps, letting web apps establish direct transmission control protocol (TCP) and user datagram protocol (UDP) communications with network devices and systems.

New origin trials

From Chrome 125 you can opt into the following new origin trials.

FedCM Button Mode API and Use Other Account API

This origin trial includes the following two FedCM APIs.

The Button Mode API lets websites call FedCM inside a button click, such as clicking on a Sign-in to IdP button. This requires FedCM to guarantee it always responds with a visible user interface, as opposed to widget mode, which doesn't show a UI when users log out. Calling the FedCM API in button mode takes users to login to the IdP (in a dialog window), when users are logged-out.

Also, because the button mode is called within an explicit user gesture, the UI may also be more prominent (for example, centered and modal) compared to the UI from the widget mode (which doesn't have such explicit intention). Learn more about how the Button Mode API works in FedCM updates: Button Mode API origin trial, CORS and SameSite

The Use Other Account API lets an Identity Provider allow users to sign in to other accounts.

Register for the FedCM origin trial.

Foldable APIs

This origin trial includes the Device Posture API and Viewport Segments Enumeration API. These APIs are designed to help developers target foldable devices. Learn more in Origin trial for Foldable APIs.

Register for the Foldable APIs origin trial.

Media Previews opt-out

This reverse origin trial will exclude sites from the launch of Media Previews.

Chrome intends to provide real-time previews of camera and microphone input at the time camera and microphone permissions are requested by websites. These will also be available from the site's pageinfo.

In addition, users with multiple devices will be able to select a camera and microphone at the time permissions are requested, unless the site has requested a specific device through getUserMedia().

This feature is in concurrent development with another permissions-related project, Page-Embedded Permissions Controls (PEPC). Users will be exposed to PEPC under an independent launch process involving a separate origin trial or site-specific experiments.

Deprecation trial for prefixed HTMLVideoElement Fullscreen properties and methods

This deprecation trial lets you opt back into support for the prefixed HTMLVideoElement properties and methods if you need more time to adjust your code. See full details of the removed properties and methods under Deprecations and removals.

Register for the Prefixed Video fullscreen API deprecation trial.

Skip preload scanning

Skips the preload scanner to explore performance tradeoffs for pages with no sub-resource fetches.

The preload scanner step benefits performance of pages with sub-resource fetches, through implementation of the speculative prefetch. However, for pages that don't benefit from this step, that is, for pages with no sub-resources, this is additional processing overhead with little benefit.

For advanced web users who would like to benefit by reducing this overhead, this experiment provides a page-level control to disable the preload scanner. Data collected from this experiment could evaluate if a modified API or a different implementation of the HTML preload scanner would be helpful.

Register for the skip preload scanning origin trial.

Deprecations and removals

Visit for lists of planned deprecations, current deprecations and previous removals.

This release of Chrome removes the following three features.

Remove "window-placement" alias for permission and permission policy "window-management"

Removes the "window-placement" alias for permission and permission policy "window-management". This is part of a larger effort to rename the strings by eventually deprecating and removing "window-placement". The terminology change improves the longevity of the descriptor as the Window Management API evolves over time.

Removal of Enterprise policy: NewBaseUrlInheritanceBehaviorAllowed

The underlying code change (enable new base URL inheritance behavior) that this enterprise policy overrides has been enabled in stable releases since August 2023 (118.0.5966.0). Since known issues have been dealt with, this enterprise policy will be removed in Chrome 125.

Removal of prefixed HTMLVideoElement Fullscreen properties and methods

The prefixed HTMLVideoElement fullscreen APIs have been deprecated since Chrome 38. They were replaced by Element.requestFullscreen(), which first shipped un-prefixed in 2018 in Chrome 71.

The following properties and methods will be removed from HTMLVideoElement:

  • webkitSupportsFullscreen
  • webkitDisplayingFullscreen
  • webkitEnterFullscreen()
  • webkitExitFullscreen()
  • webkitEnterFullScreen() (note the different capitalization of the "S" in FullScreen)
  • webkitExitFullScreen()

Register for the deprecation trial listed in this post, if your site still relies on these and you need more time for updating code.