Published: April 3, 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 136 is beta as of April 3, 2025. You can download the latest on Google.com for desktop or on Google Play Store on Android.
CSS and UI
This release adds six new CSS and UI features.
CSS dynamic-range-limit
property
Enables a page to limit the maximum brightness of HDR content.
Ignore letter spacing in cursive scripts
This feature adds logic to ignore the letter-spacing setting for cursive scripts, even if specified by the developer as per spec, to ensure that letter spacing does not break words.
Partitioning :visited
links history
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. They no longer provide sites with new
information about users.
Learn more about these improvements to the privacy of :visited
links.
Rename string
attr()
type to raw-string
The CSS Working Group resolved to replace string
attr()
type with
raw-string
.
Therefore, Chrome has changed attr()
syntax, so that attr(data-foo string)
will now be attr(data-foo raw-string)
.
Type-agnostic var()
fallback
The fallback part of a var()
function does not validate against the type of
the custom property being referenced.
Unprefixed print-color-adjust
The
print-color-adjust
property lets you adjust colors in printed web pages. This is the same as
Chrome's already-supported -webkit-print-color-adjust
, but with a standardized
name. The -webkit
prefixed version is not removed.
Web APIs
AudioContext interrupted state
Adds an "interrupted"
state to AudioContextState
. This new state lets the UA
pause playback in these scenarios and enable web applications to respond
appropriately.
Blob URL partitioning: Fetching/Navigation
As a continuation of Storage Partitioning, this 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. This behavior is similar to what's currently implemented by both Firefox and Safari, and aligns Blob URL usage with the partitioning scheme used by other storage APIs as part of Storage Partitioning.
In addition, noopener
is now enforced on renderer-initiated top-level
navigations to Blob URLs where the corresponding site is cross-site to the
top-level site performing the navigation. This aligns Chrome with similar
behavior in Safari, and the relevant specs have been updated to reflect these
changes.
Call stacks in crash reports from unresponsive web pages
This feature captures the JavaScript call stack when a web page becomes unresponsive due to JavaScript code running an infinite loop or other very long computation. This helps developers identify the cause of the unresponsiveness. The JavaScript call stack is included in the crash reporting API when the reason is unresponsive.
Captured Surface Control API
The Captured Surface Control API lets Web applications forward wheel events to a captured tab, and read and change the zoom level of a captured tab.
CapturedSurfaceResolution
Exposes the pixel ratio of the captured surface while screensharing. This feature will help applications to conserve their system resources or adapt the quality and bandwidth trade-off according to the physical and logical resolutions of the captured surface.
Dispatch 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.
Explicit compile hints with magic comments
Allows the attaching of information about which functions should be eager parsed and compiled in JavaScript files. The information will be encoded as magic comments.
FedCM updates: Multiple IdPs support, removal of "add another account" feature in passive mode
With this update, FedCM can show multiple identity providers in the same dialog.
This provides developers with a convenient way to present all supported identity
providers to users. We are planning to first tackle the simple case of having
all providers in the same get()
call. We are also removing support for 'add
another account' feature in FedCM passive mode. This feature allows showing a
'use another account' button alongside other IdP accounts in the chooser. The
feature is currently unused, and UX conversations have led us to believe that
supporting this leads to a more complicated flow without much benefit. This
feature will still work in FedCM active mode.
Fluent scrollbars.
This feature modernizes the Chrome scrollbars (both overlay and non-overlay) on Windows and Linux to fit the Windows 11 Fluent design language. Non-overlay Fluent scrollbars will be enabled by default in Linux and Windows. This change applies to Linux as well because Chrome's Linux scrollbar design has historically been aligned with what ships on Windows.
H265 (HEVC) codec support in WebRTC
From Chrome 136, HEVC will join VP8, H.264, VP9, and AV1 as supported codecs in WebRTC. Support will be queryable using the MediaCapabilities API.
This newer codec has increased compression efficiency (higher quality per bitrate) relative to older generation codecs like VP8 and H264 and very strong hardware support going back over a decade. This translates into increased battery life and reduced risk of performance issues, and, depending on the performance of the underlying hardware encoder, will often improve visual experience in cases where hardware VP9 or AV1 encoders are not available.
H26x Codec support updates for MediaRecorder
The MediaRecorder API now supports HEVC encoding, introducing the hvc1.*
codec
string, and adds new codecs (hev1.*
and avc3.*
) supporting variable
resolution video in MP4. Support for HEVC platform encoding was added in
WebCodecs in Chrome 130. As a follow-up, support has been added to the
MediaRecorder API in Chromium. The API now supports both MP4 and Matroska muxer
types with different HEVC and H.264 mime type specifications. HEVC encoding is
only supported if the user's device and operating system provide the necessary
capabilities.
IP address logging and reporting in Chrome Enterprise
Chrome Enterprise is enhancing security monitoring and incident response capabilities by collecting and reporting local and remote IP addresses and sending those IP addresses to the Security Investigation Logs (SIT). In addition, Chrome Enterprise will allow admins to optionally send the IP addresses to first-party and third-party SIEM providers using the Chrome Enterprise Reporting connector. This will be available for Chrome Enterprise Core customers.
Incorporate navigation initiator into the HTTP cache partition key
Chrome's HTTP cache keying scheme is 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 from 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.
Language support for CanvasTextDrawingStyles
The <canvas>
DOM element, like all DOM elements, accepts a lang
attribute
that is used to define language specific treatment for font selection (when
fonts have locale specific glyphs). Browsers respect this attribute. However,
when an OffscreenCanvas is created there is no way to set locale information,
possibly resulting in a state where an offscreen canvas produces rendered
results that differ from the canvas in which its output is used. This feature
adds a lang
IDL attribute to CanvasTextDrawingStyles
to give direct control
over the language for the text drawing and metrics.
Permissions Policy reports for iframes
Introduces a new violation type called "Potential Permissions Policy violation",
which will only look at Permissions Policy (including report-only policy) and
the allow
attribute set in iframes to detect the conflict between Permissions
Policy enforced versus permissions propagated to iframes.
Predictable reported storage quota
Report a predictable storage quota from StorageManager's Estimate API for sites that don't have unlimited storage permissions. It is possible to detect a user's browsing mode using the reported storage quota because the storage space made available is significantly smaller in incognito mode than in regular mode.
Private Aggregation API: Aggregate error reporting
There are a range of error conditions that can be hit when using the Private Aggregation API. For example, the privacy budget could run out, preventing any further histogram contributions. This feature allows developers to register histogram contributions that should only be sent if a particular type of error occurs. This feature supports measuring the frequency of the error conditions and to split these measurements on relevant developer-specified dimensions (for example, version of deployed code). As the errors themselves may be cross-site information, we cannot simply expose them to the page for users without third-party cookies. Instead, this feature reuses the existing aggregate, noised reporting pipelines through the Aggregation Service.
RegExp.escape
RegExp.escape
is a static method that takes a string and returns an escaped
version that may be used as a pattern inside a regular expression. For example:
const str = prompt("Please enter a string");
const escaped = RegExp.escape(str);
const re = new RegExp(escaped, 'g'); // handles reg exp special tokens with the replacement.
console.log(ourLongText.replace(re));
Speculation rules: tag field
Enables developers to add tag field
to speculation rules. This optional field
can be used to track the source of speculation rules. For example, to treat them
differently at an intermediary server. Any tags associated with a speculation
will be sent with the Sec-Speculation-Tags
header.
Strict Same Origin Policy for the Storage Access API
Adjusts the Storage Access API semantics to strictly follow the Same Origin
Policy. That is, using document.requestStorageAccess()
in a frame only
attaches cookies to requests to the iframe's origin (not site) by default. Note
that the CookiesAllowedForUrls
policy or Storage Access Headers may still
be used to unblock cross-site cookies.
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.
Use DOMPointInit
for getCharNumAtPosition
, isPointInFill
, isPointInStroke
This change brings Chromium code in line with the latest W3C spec for
SVGGeometryElement
and SVGPathElement
in terms of usage of DOMPointInit
over SVGPoint
for getCharNumAtPosition
, isPointInFill
, isPointInStroke
.
Web Authentication conditional create (Passkey upgrades)
WebAuthn conditional create requests let websites upgrade existing password credentials to a passkey.
WebGPU: GPUAdapterInfo
isFallbackAdapter
attribute
The GPUAdapterInfo
isFallbackAdapter
boolean attribute indicates if an
adapter has significant performance limitations in return for wider
compatibility, more predictable behavior, or improved privacy. Note that a
fallback adapter may not be present on all systems.
New origin trials
In Chrome 136, you can opt into the following new origin trials.
Audio Output Devices API: setDefaultSinkId()
This feature adds setDefaultSinkId()
to MediaDevices, which enables the
top-level frame to change the default audio output device used by its subframes.
Let web applications understand bimodal performance timings
Web applications may suffer from bimodal distribution in page load performance, due to factors outside of the web application's control. For example:
- When a user agent first launches (a "cold start" scenario), it must perform many expensive initialization tasks that compete for resources on the system.
- Browser extensions can affect the performance of a website. For example, some extensions run additional code on every page you visit, which can increase CPU usage and result in slower response times.
- When a machine is busy performing intensive tasks, it can lead to slower loading of web pages.
In these scenarios, content the web app attempts to load will be in competition with other work happening on the system. This makes it difficult to detect if performance issues exist within web applications themselves, or because of external factors.
A new confidence
field on the PerformanceNavigationTiming
object will enable
developers to discern if the navigation timings are representative for their web
application.
Device Bound Session Credentials
A way for websites to securely bind a session to a single device.
It lets servers have a session that's 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.
Update of canvas text rendering implementation
The internals of CanvasRenderingContext2D and
OffscreenCanvasRenderingContext2D's measureText()
, fillText()
, and
strokeText()
have been replaced by a new implementation that better supports
RTL text and caching. This might affect performance and BIDI-text output, so
this origin trial allows for text-heavy canvas applications to try out the new
implementation and report any issues they may encounter.
Deprecations and removals
This version of Chrome introduces the following deprecations and removals. Visit ChromeStatus.com for lists of planned deprecations, current deprecations and previous removals.
This release of Chrome deprecates two features.
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. This change removes
some getters deprecated in a specification change since they shipped.
Remove HTMLFencedFrameElement.canLoadOpaqueURL()
.
canLoadOpaqueURL()
was replaced with navigator.canLoadAdAuctionFencedFrame()
in 2023, and calling it has resulted in a deprecation console warning ever since
pointing developers to the new API. It does not make sense to have the function
attached to HTMLFencedFrameElement
and instead should be attached to the
navigator
object (which contains other fenced frame and ad auction methods).