Chrome 121 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 121 is beta as of December 6, 2023. You can download the latest on for desktop, or on the Google Play Store for Android.


This release adds six new CSS features.

CSS Highlight Inheritance

With CSS Highlight Inheritance, the CSS Highlight pseudo classes, such as ::selection and ::highlight, inherit their properties through the pseudo highlight chain, rather than the element chain. The result is a more intuitive model for inheritance of properties in highlights.

This implements the requirement from the CSS Pseudos Level 4 specification:

"When any supported property is not given a value by the cascade ... its specified value is determined by inheritance from the corresponding highlight pseudo-element of its originating element's parent element."

CSS Scrollbars: scrollbar-color and scrollbar-width

The CSS Scrollbars specification allows developers to style scrollbars by specifying their colors and thickness. This spec adds the following two properties. The scrollbar-color property provides the capability of changing the color scheme of scrollbars so they fit better into the particular style of a web page. The scrollbar-width property allows the use of narrower scrollbars that may be more suitable for some use cases, or even to hide the scrollbars completely without affecting scrollability.

CSS font-palette animation for color fonts

The CSS font-palette property allows selection of a specific palette used to render a color font. With the newly added support for animating this property, transitioning between palettes is no longer a discrete step, but becomes a smooth transition between two selected palettes. This works everywhere in CSS animations and transitions.

CSS spelling and grammar features

CSS highlight pseudo-elements for styling text that the user agent has flagged as misspelled or grammatically incorrect, and line decorations exposing the user agent’s default decorations for spelling and grammar errors. These features allow developers to choose more legible colors for the default spelling and grammar errors, highlight misspelled words with background colors or other decorations, and implement custom spell checking that blends into the device experience.

Improved CSS masking for SVG

This is a follow-on to the improved CSS mask support in Chrome 120, adding new mask support to SVG (multiple masks, as well as mask-mode, mask-composite, mask-position, and mask-repeat). In addition, remote SVG masks (for example, mask: url(masks.svg#star)) are now supported.

Ruby-specific display values

New CSS display property values, ruby and ruby-text, are added. The default display values of <ruby> and <rt> are changed to ruby and ruby-text respectively, and ruby layout respects these display values. Web authors can use any elements such as <div> to render ruby by setting the new display values.

Web APIs

Attribution Reporting Feature Bundle: Reduced Aggregate Delays, Event-Level Report Epsilon Field, Reserved Keys

Chrome includes changes to the Attribution Reporting API focused on:

  • Reducing transmission loss by supporting reduced aggregate report delays.
  • Additional API configurability by supporting an event-level reporting epsilon field.
  • Improved extensibility of the API by failing registrations when encountering reserved keys.

Back/forward cache notRestoredReason API

The notRestoredReason API will report the list of reasons why a page is not served from bfcache using the PerformanceNavigationTiming API.

Require user gesture for resize APIs in Document picture-in-picture

This enables the resizeBy() and resizeTo() methods on document picture-in-picture windows, but with the added restriction of a user gesture requirement to mitigate the abuse potential.

EditContext API

The EditContext API simplifies the process of integrating a web app with advanced text input methods such as VK shape-writing, handwriting panels, speech recognition, and IME Compositions. It improves accessibility and performance, and unlocks new capabilities for web-based editors.

Feature detection for supported clipboard formats

You can now check if the Async Clipboard API supports a certain MIME type by calling the new supports() function, passing the MIME type as an argument, like for example, ClipboardItem.supports('image/png').

HTMLSelectElement showPicker()

The showPicker() method of HTMLSelectElement gives developers a way to programmatically open the option picker of a <select> element, following the pattern of input.showPicker().

MediaCapabilities: Query HDR support with decodingInfo()

Extends the Media Capabilities API to allow detection of HDR rendering support via three new VideoConfiguration dictionary fields: hdrMetadataType, colorGamut, transferFunction.

Chromium implements its own tone-mapping algorithms so will always return true for HDR10 (smpteSt2086) static metadata. smpteSt2094-40 (HDR10+) and smpteSt2094-10 dynamic metadata are not currently supported, so will return false.

Private Aggregation API: aggregation coordinator selection

This modification to the Private Aggregation API provides a mechanism for selecting which coordinator to use for payload encryption (from a vendor-specified allowlist). The choice of service is made with an additional option in the Shared Storage run() and selectURL() calls, and in Protected Audience's runAdAuction() and joinAdInterestGroup() calls. The broad approach largely aligns with that of the Attribution Reporting API.

Remote Playback API on desktop

This API extends the HTMLMediaElement that enables controlling remote playback of media from a web page. This shipped on Android in Chrome 56, and is available on Desktop from Chrome 121.

Speculation Rules API

There are new features for the Speculation Rules API.

Support of document rules: This is an extension to the speculation rules syntax that lets the browser obtain the list of URLs for speculative loading from <a> elements in a page. They may include criteria for which of these links can be used. This, coupled with a new "eagerness" field for speculation rules allows developers to automatically prefetch or prerender links on pages immediately, on hover or on mouse down.

A separate change allows specifying speculation rules using the Speculation-Rules HTTP response header as an alternative to using inline <script> elements. The value of this header must be a URL pointing to a text resource with "application/speculationrules+json" MIME type. The resource's rules will be added to the document's rule set.

Finally, the No-Vary-Search hint enables speculative prefetches to match even if URL query parameters change. The No-Vary-Search HTTP response header declares that some or all parts of a URL's query can be ignored for matching purposes. It can declare that the order of query parameter keys shouldn't prevent matches, that specific query parameters shouldn't prevent matches, or that only certain known query parameters should cause mismatches.

SpeechSynthesis and SpeechSynthesisVoice interface objects

Adds the interface objects for SpeechSynthesis and SpeechSynthesisVoice, to the already supported features. This makes feature detection using SpeechSynthesisVoice.prototype possible.

Storage Buckets API

Storage Buckets gives sites the ability to organize on-device data into separate "buckets", allowing user agents to evict the grouped data independently of that which is in other buckets, and enabling sites to ergonomically manage semantically related data. Each storage bucket can contain data associated with established storage APIs such as IndexedDB and CacheStorage.

URLPattern: Inherit left, wildcard right

Behavior changes to patterns which are constructed using a base URL, the constructor string syntax, or both—but not any pattern which explicitly specifies components separately without a base URL.

Components are not inherited from a base URL if an "earlier" component is explicitly specified. In the string format, unspecified "later" components are implicitly wildcarded, rather than required to be empty (with the exception of the port, which is always taken to be specified when the hostname is). Username and password are never implicitly specified or inherited.

This makes patterns more expansive than before, in cases where wildcards are likely to be desirable.

URLPattern: RegExp v flag instead of u

The URL Pattern API allows developers to specify pattern strings. Those are transformed to regular expressions internally.

When the API was first implemented, these regular expressions were compiled with the u flag. Chrome 121 updates it to the v flag, enabling Unicode sets.

Additions to WebGPU

WebGPU now allows developers to omit entry points to shader modules when creating a pipeline, improving ergonomics. If no default entry point is found, a GPUValidationError will be triggered as usual.

WebGPU timestamp queries allow WebGPU applications to measure precisely (down to the nanosecond) how much time their GPU commands take to execute, especially at the beginning and end of passes. Timestamp queries are heavily used to gain insights into the performance and behavior of GPU workloads.

While the WebGPU specification makes timestamp queries an optional feature due to timing attack concerns, we believe that timestamp queries quantization provides a good middle ground by reducing the precision of timers with a resolution of 100 microseconds.

X25519Kyber768 key encapsulation for TLS

Protect current Chrome TLS traffic against future quantum cryptanalysis by deploying the Kyber768 quantum-resistant key agreement algorithm. This is a hybrid X25519 + Kyber768 key agreement based on an IETF standard. This specification and launch is outside the scope of W3C. This key agreement will be launched as a TLS cipher, and should be transparent to users.

Origin trials in progress

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

The Element Capture API

The Element Capture API provides methods for capturing a subtree of the DOM.

Given a video MediaStreamTrack obtained through pre-existing means to initiate tab-capture, Element Capture allows mutating the track to only capture a subtree of the DOM starting at a given Element.

The API bears some resemblance to the Region Capture API, but affords greater flexibility for applications, because occluding and occluded content are both excluded from the capture.

Register for the ElementCapture origin trial

Changes to existing behavior

Chrome 121 includes the following change to existing behavior, included here so developers are aware of the change .

Discard Input Events To Recently Moved Cross-Origin Iframes

If a cross-origin iframe has moved recently within its embedding page, then Chrome silently discards events targeting the iframe. The rationale is that if the iframe moved recently, it is likely that the user did not intend to click or tap on it.

This change shipped in limited form in 2019: it only affected iframes containing script using version 2 features of IntersectionObserver (that is, occlusion or effect detection). This launch expands this behavior to all cross-origin iframes, and will start as a limited experiment in Chrome 121 then be ramped up.