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 <number>.
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(<color>) function
The image() function lets authors generate a solid-color image from any
color. Its syntax is: image() = image( <color> )
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 effectauto: propagation, local effectcontain: no propagation, local effectchain: 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 <path>, <circle>, <rect>,
<line>, <polyline>, <polygon>, and <ellipse>).
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:
<div focusgroup="toolbar wrap" aria-label="Formatting">
<button>Bold</button>
<button>Italic</button>
<button>Underline</button>
</div>
Out of order streaming
Use <template for> and processing instruction ranges (<?marker>, <?start>,
and <?end>) to update existing parts of the document without JS.
Tracking bug #431374376 | ChromeStatus.com entry | Spec
Parse processing instructions in HTML
Processing instructions (syntax: <?target data>) are an existing DOM
construct, exposed in XML, that represents node objects that are not elements
but can have some semantic meaning for the processing of a document.
Processing instructions are parsed by the HTML parser, and receive an attribute API similar to elements to mutate their data.
Tracking bug #481087638 | ChromeStatus.com entry | Spec
popover=hint behavior changes
This change implements a revised and simplified stacking model for the
popover=hint attribute and its interactions with popover=auto. Previously,
the interactions between these two types of popovers could be complex in some
corner case situations (such as nesting auto popovers inside hint popovers), and
could lead to unexpected behavior. Under the new model, opening a hint popover
does not inadvertently close unrelated auto popovers. Hint popovers are only
hidden when their ancestral auto popover is hidden, or when a new, unrelated
auto popover is opened. Additionally, developers can safely nest an auto popover
inside a hint popover; instead of throwing an exception or breaking the stack,
the nested auto popover gracefully "downgrades" and behaves as a hint popover.
This supports use cases such as placing a customizable-select within a
popover=hint.
To further improve predictability and prevent complex state mutations, we are
also tightening the behavior around opening and closing popovers from within the
beforetoggle event. There were guards in place for some, but not all, of the
possible cases before. This change revamps the mechanism used to detect these
cases, so that it should more reliably throw InvalidStateErrors for all such
cases. This ensures that popover state management remains stable and prevents
looping reentrancy bugs.
Tracking bug #499019927 | ChromeStatus.com entry | Spec
Programmatic scroll promises
This feature provides a reliable signal for the completion status of a
programmatic smooth-scroll. All scroll methods in Element and Window return
Promise objects that get resolved on scroll completion, and the resolved value
indicates whether the scroll was interrupted or not.
Tracking bug #41406914 | ChromeStatus.com entry | Spec
Graphics and media
Disable SVG filters on plugins and iframes
Chrome 150 will prevent SVG filters from being applied to embedded plugins
(for example, PDFs) and cross-origin or restricted iframes (for example,
sandboxed iframes). When a plugin or iframe would be painted with an SVG filter
effect, the effect tree is traversed to find the highest ancestor without SVG
filters, and that effect is then applied instead.
Tracking bug #476646486 | ChromeStatus.com entry | Spec
WebGPU: Immediates
Adds a new immediate address space in WGSL and a setImmediateData() method on
render pass, compute pass, and render bundle encoders that lets developers pass
small amounts of frequently-updated data directly to shaders without creating
GPU buffer objects or bind groups.
Tracking bug #366291600 | ChromeStatus.com entry | Spec
Security and Web Speech
Opaque origin for data: URLs
Chrome 150 updates how dedicated and shared Workers handle data:
URLs. Rather than automatically
inheriting the security origin of the script or page that created them, these
workers are assigned a unique opaque origin.
This alignment with the worker HTML
specification
enhances security by isolating these workers from the creator's same-origin
state, preventing them from accessing sensitive data using mechanisms like
BroadcastChannel or same-origin storage. To maintain correct isolation
boundaries, these workers still reside within the same storage partition (for
example, by preserving the top-level site or nonce) as their creator.
Tracking bug #40051700 | ChromeStatus.com entry | Spec
Web Speech API: On-Device Recognition Quality
Extends the SpeechRecognition interface by adding a quality property to
SpeechRecognitionOptions. This lets developers specify the semantic capability
required for on-device recognition (with processLocally: true).
The proposed quality enum supports three levels: command, dictation, and
conversation. These map to increasing task complexity and hardware requirements.
This lets developers determine if the local device can handle high-stakes use
cases (like meeting transcription) or if they should fallback to cloud services.
Tracking bug #476168420 | ChromeStatus.com entry | Spec
Web Apps
PWA origin migration
When a user installs a Progressive Web App (PWA), its identity and security
context are tightly bound to its web origin, for example, app.example.com.
This presents a significant challenge for developers who need to change their
PWA's origin due to rebranding, domain restructuring, or technical
re-architecture. Without origin migration, such a change forces users to
manually uninstall the old app and reinstall the new one, leading to a
disruptive experience and a potential increase in user loss rate. Chrome 150
introduces a mechanism for developers to seamlessly migrate an installed PWA to
a new, same-site origin, preserving user trust and permissions.
The WebAppInstallForceList policy blocks migration. Since enterprise policies around web applications are primarily based on URLs and origins, there is a risk that a migration would bypass certain policies an administrator might have configured. No migration will be offered to the user when an app is force-installed by their enterprise administrator, and instead a banner will be shown explaining this to the user.
Tracking bug #396504527 | ChromeStatus.com entry | Spec
Origin trials
Email Verification Protocol
The EVP (email verification protocol) helps users create, access and recover
accounts by providing cryptographic proof of ownership seamlessly rather than
email OTPs manually.
Origin Trial | ChromeStatus.com entry | Spec
Speculative load measurement
Expose measurement data regarding speculative loads (preloads, prefetches and
prerenders) as part of a newly exposed performance.getSpeculations() method.
That would enable developers to measure the efficacy of various speculative
loading strategies and adapt them accordingly.
Origin Trial | Tracking bug #481590676 | ChromeStatus.com entry
WebRTC Diagnostic Logging API
API for WebRTC diagnostic logging.
This API lets an application opt in to diagnostic logging. These logs contain information about the WebRTC activity by the application and are useful for local debugging or to file bugs.
Logs can be optionally uploaded out of band to the browser vendor and can be used for diagnosing bugs. The application gets an ID that can be attached to a bug report, similar to crashes.
Diagnostic logs are enabled with an enterprise policy called
WebRtcDiagnosticLogCollectionAllowedForOrigins.
Origin Trial | Tracking bug #481412281 | ChromeStatus.com entry | Spec
Deprecations and removals
There are no deprecations or removals in this release.