Google Chrome Updates & Release Notes
98 updates curated from 99 sources by the Releasebot Team. Last updated: Jun 5, 2026
- Jun 2, 2026
- Date parsed from source:Jun 2, 2026
- First seen by Releasebot:Jun 5, 2026
What's new in Dev Tools (Chrome 149)
Google Chrome releases Chrome 149 with major AI assistance upgrades, experimental WebMCP debugging tools in DevTools, and CSS code completion in the Styles tab. It also promotes APCA contrast guidelines to stable, improves Device Mode user agent handling, and adds a range of DevTools fixes and workflow boosts.
Chrome 149 brings major upgrades to AI assistance, introduces experimental WebMCP debugging tools in the Application panel, and expands code completion support to CSS.
Dev Tools for agents
The MCP server and CLI of Chrome DevTools for agents are now officially stable! Read the full announcement here.
Key features and new tools added up to the v1.1.1 release include:
- Custom third-party, page-exposed tools: pages can now define custom debugging tools through JavaScript, discoverable and callable by DevTools for agents.
- WebMCP debugging: DevTools for agents can now list and execute WebMCP tools.
- Custom HTTP headers emulation: Adds support for HTTP headers (such as Auth tokens or custom User-Agents) to the emulation tool.
Third-party tools and WebMCP debugging are still experimental and not yet enabled by default. Check the tool reference for info on how to use them. We will provide more documentation on developer.chrome.com once those features are ready for production use.
For the most recent updates around DevTools for agents, and to contribute, visit the GitHub repository. Get started with our documentation or get up to speed with the comprehensive Google I/O video session Supercharge your AI coding workflow with Chrome DevTools for agents.
Tip: With Modern Web Guidance the Chrome team released a set of skills to help coding agents build with the web's newest features, while supporting your Baseline target. Find install instructions in our documentation and learn more in the dedicated Google I/O video session Unlock modern web capabilities in your AI coding workflows.
AI assistance
The AI assistance panel has received a significant user interface update and new tools to improve the conversational experience and provide deeper page insights:
- Agent walkthrough: AI assistance now renders widgets directly within the chat interface instead of plain text Markdown. These widgets cover Core Web Vitals and related insights, LCP elements, LCP breakdown, Bottom-up thread activity, and more. A Reveal link inside the widget brings you to the source of this information inside DevTools.
- Copy to coding agent: Conversations now end with a dedicated button to copy the conversation, either summarized as a prompt, or the verbatim conversation, for you to paste it in your coding agent of choice.
- Upgraded capabilities: AI assistance now has access to Lighthouse and related insights, allowing it to holistically analyze your page and give targeted advice.
- Improved responses: Using Gemini 3 under the hood, and refined preambles, AI assistance gives more concise, and more actionable answers.
- Improved navigation: You can now navigate through your previous chat prompts using the Up Arrow and Down Arrow keys, making it fast and intuitive to refine or re-run previous queries.
Let us know what you think by commenting on the dedicated feedback bug. In favor of Copy to coding agent, we will deprecate support for automated styling fixes through AI assistance, with Chrome 152.
Tip: Learn more about the updates to AI assistance in the dedicated Google I/O video session Break boundaries with Gemini in Chrome DevTools.
WebMCP
This release introduces experimental WebMCP debugging tools within the Application panel sidebar. WebMCP (Web Model Context Protocol) allows web pages to register tools to be used by visiting LLM agents. Learn more about the proposed standard in our documentation.
The new debugging tools lets developers:
- Inspect client-side tools and their schemas.
- Manually run tools execution with custom parameters.
- Track and filter active or pending tool invocation events.
- Monitor execution status and inspect return payloads.
WebMCP is a proposed web standard in early preview. Enable the #devtools-webmcp-support and #enable-webmcp-testing flags on chrome://flags to start experimenting.
Tip: Learn more about WebMCP in the Google I/O video session Build your website for the agentic era.
Code completion for CSS
The Styles tab now features code completion for CSS with Gemini, building on the support for the Console & Sources panels. Enable code suggestions in Settings > AI innovations > Code suggestions.
This helps you to play around with more complex combinations of CSS properties, like gradients or box shadows, without remembering their exact syntax. Or to quickly build out grid- and flex- layouts, relying on multiple related properties.
The toolbar at the bottom of the Styles tab displays the status through a loading spinner. Suggestions update or clear as you type, ensuring that the AI-generated text stays relevant to your manual edits.
APCA color contrast guidelines promoted to stable
The Advanced Perceptual Contrast Algorithm (APCA) contrast calculator has officially left its experimental phase and is now available as a standard preference setting. APCA replaces the legacy AAA/AA contrast guidelines with a modern perceptual contrast model optimized for modern displays and text rendering.
You can now enable or disable APCA guidelines using the checkbox located under Settings > Preferences > Elements > Enable APCA contrast guidelines.
Dynamic Device Mode user agent
The Responsive device mode previously used a hardcoded User Agent string (Android 6.0; Nexus 5). This caused modern websites to degrade functionality or trigger compatibility modes because the reported OS was recognized as over a decade old.
The hard coded user agent has been replaced with a dynamic heuristic that auto-updates based on the current calendar year, ensuring DevTools always reports a plausible, modern environment without requiring manual maintenance.
Other highlights
A collection of smaller improvements and bug fixes in this release:
- Console: Added a Collapse / Expand all toggle button to the Console panel toolbar to quickly expand or collapse all active console groups and stack traces at once.
- Application: Clickable hyperlinks have replaced static text for storage bucket fields in the Application metadata view. Clicking a bucket link automatically navigates to and highlights that specific bucket in the Storage Buckets sidebar panel.
- Application: Re-enabled full storage inspection support for Service Workers after resolving a crash regression.
- Application: Added support for inspecting form_submission prerendering events within the Preloading panel.
- Application: Implemented Device-Bound Session Credentials (DBSC) management, allowing developers to clear or delete active sessions from the context menu or by pressing the Delete or Backspace keys.
- Elements: Highlights on DOM nodes representing hidden issues in the Issues panel now dynamically update (appearing or disappearing) in response to issue filter actions.
- Network: Server-Sent Events (SSE) are now fully serialized and included in HAR exports, enabling ongoing, live event stream captures to be saved and re-imported into DevTools.
- Performance: Fixed Core Web Vitals tracking in the Live Metrics view to pin tracking strictly to the primary frame execution context, preventing dynamic iframe churn from resetting metrics.
- Performance: Upgraded web-vitals to v5.2.0, introducing native upstream fixes for memory leaks during INP monitoring.
- Jun 2, 2026
- Date parsed from source:Jun 2, 2026
- First seen by Releasebot:Jun 3, 2026
Chrome 149
Google Chrome releases a broad stable update for desktop and Android with new CSS gap decorations and shape-outside options, improved text overflow interaction, tighter privacy controls, bfcache WebSocket support, and updates to Clipboard, Payment Request, Intl.Locale, and WebAssembly APIs.
CSS gap decorations
CSS gap decorations let you style gaps in container layouts like grid and flexbox, similar to column-rule in multiple-column layout. This feature is highly requested by web developers who must use hacks to style the gaps in grid and flexbox layouts today.
It brings new CSS properties like column-rule-inset, row-rule-inset, column-rule-visibility-items, and row-rule-visibility-items, and supports animation of rule width, color, and insets.
CSS gap decorations blog post | Tracking bug #357648037 | ChromeStatus.com entry | Spec
When a user interacts (for example, by editing or using caret navigation) with text that has text-overflow: ellipsis set, the text temporarily switches from ellipsis to clip. This lets the user see and interact with the hidden overflow content. This feature applies to all editable and non-editable elements. For form controls, such as
<textarea>and<input>, this behavior is already supported.Tracking bug #40731275 | ChromeStatus.com entry | Spec
This change removes the erroneous border-color: gray CSS rule from the UA stylesheet for the
<table>element. The HTML specification does not contain this rule, and it prevented borders from defaulting to currentColor. Neither Firefox nor WebKit have this gray border color rule in their UA stylesheet, leading to interoperability issues.Tracking bug #494554835 | ChromeStatus.com entry | Spec
Support path() and shape() in shape-outside
Adds support for the path() and shape() shape functions in the CSS shape-outside property. These functions let developers define float exclusion shapes more flexibly and support animation.
Tracking bug #502328208 | ChromeStatus.com entry | Spec
Support rect() and xywh() in shape-outside
Adds support for the rect() and xywh() basic shape functions in the CSS shape-outside property. These functions let developers define float exclusion shapes using rectangle coordinates, aligning Chrome with Firefox and Safari which already support this feature.
Tracking bug #490343453 | ChromeStatus.com entry | Spec
User action pseudo-class top layer boundary
Changes :hover, :active, and :focus-within matching on parents of elements to match only up to the first top layer element in the parent chain. Since top layer elements are typically rendered disconnected from their parent chain visually, it does not make sense to change parent styles when a top layer element is hovered or activated.
Tracking bug #407769114 | ChromeStatus.com entry | Spec
Web app scope system accent color
Restricts access to the system accent color for CSS keywords (AccentColor and AccentColorText) and accent-color: auto to be only within a web app and initial profile context. This limits a significant fingerprinting vector when exposing the user's system colors widely on the web.
Tracking bug #481353056 | ChromeStatus.com entry | Spec
image-rendering: crisp-edges
image-rendering: crisp-edges indicates that image should be scaled in a way that preserves contrast and edges, and which avoids smoothing colors or introducing blur to the image in the process.
Chrome, Firefox, and Safari treat crisp-edges and pixelated as synonyms and implement both using nearest-neighbor scaling.
Tracking bug #41073066 | ChromeStatus.com entry | Spec
Support 'path-length' as a CSS property
Introduces a new CSS property, path-length, which maps to the SVG pathLength presentation attribute. This applies to SVG geometry elements that support pathLength (including
<path>,<circle>,<rect>,<line>,<polyline>,<polygon>, and<ellipse>), allowing authors to specify it in stylesheets, inline styles, and animations.Tracking bug #40670251 | ChromeStatus.com entry | Spec
Web APIs
Intl.Locale.prototype.variants
Adds Intl.Locale.prototype.variants as stated in the ECMA-402 specification, and accepts variants in the options bag in the Intl.Locale constructor.
ChromeStatus.com entry | Spec
Payment Request: Allow payment handlers to report back internal errors
Lets payment handlers accessed using the Payment Request API return distinct errors for "user cancelled" (AbortError) versus "internal payment app error" (OperationError). This lets developers retry or fall back to a different flow when an internal app error occurs, while properly stopping if the user cancels.
Tracking bug #473478138 | ChromeStatus.com entry | Spec
Respect autocorrect="off" for Windows touch keyboard in TSF
Makes Chrome's TSF integration detect and revert touch keyboard autocorrections on Windows when the focused editable element has autocorrect="off" set.
Tracking bug #487613498 | ChromeStatus.com entry | Spec
Selective Clipboard Format Read
Enhances the Asynchronous Clipboard API by deferring actual clipboard data retrieval from the OS until the web application calls getType(). Instead of eagerly fetching all available formats at read() time, the browser now returns ClipboardItem objects with available MIME types but without the underlying data, which reduces CPU usage and improves responsiveness.
Tracking bug #435051711 | ChromeStatus.com entry | Spec
Network and connectivity
Disconnect WebSockets on bfcache entry
Active WebSocket connections no longer prevent a page from entering the Back/Forward Cache (bfcache). By closing connections on bfcache entry instead of marking the document as ineligible, the browser allows pages with active WebSockets to be stored and restored.
Tracking bug #467838624 | ChromeStatus.com entry | Spec
New origin trials
Gamepad event-driven input API
Extends the Gamepad API with a new event-driven model that lets applications receive gamepad input with lower latency. Instead of relying on frequent polling using navigator.getGamepads(), developers can now listen for a rawgamepadinputchange event, which fires whenever new input data is available from the device.
Origin Trial | Tracking bug #40582297 | ChromeStatus.com entry | Spec
Permissions Policy: focus-without-user-activation
Permissions Policy: focus-without-user-activation
Lets embedders control programmatic focus from embedded content with the focus-without-user-activation permissions policy. When the policy is denied for a frame, programmatic focus calls (element.focus(), autofocus, window.focus(), dialog.showModal(), and popover focusing) are blocked unless triggered by user activation.
Origin Trial | Tracking bug #40095111 | ChromeStatus.com entry | Spec
WebAssembly custom descriptors
Lets WebAssembly store data associated with source-level types more efficiently in new "custom descriptor" objects. These custom descriptors can be configured with prototypes for the WebAssembly objects of that source-level type, which lets methods be installed on a WebAssembly object's prototype chain and called directly from JavaScript using normal method call syntax.
Origin Trial | Tracking bug #403372470 | ChromeStatus.com entry | Spec
Original source All of your release notes in one feed
Join Releasebot and get updates from Google and hundreds of other software products.
- May 5, 2026
- Date parsed from source:May 5, 2026
- First seen by Releasebot:May 26, 2026
Chrome 148
Google Chrome releases its May 2026 stable update with broad web platform advances, including new CSS query and feature-detection capabilities, stronger media and drag-and-drop behavior, expanded Android support, and new APIs for AI, performance, and web app experiences.
Stable release date: May 5th, 2026
Unless otherwise noted, the following changes apply to Chrome 148 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
CSS and UI
CSS name-only container queries
A CSS query container can be queried based on its container-name only, and the container does not need any container-type set:
#container { container-name: --foo; } @container --foo { input { background-color: green; } }<div id="container"> <div><input></div> </div>Previously, @container required a container type in addition to the name.
Tracking bug #40287550 | ChromeStatus.com entry | Spec
At-rule: CSS feature detection
This feature adds an at-rule() function to CSS @supports which enables authors to feature-detect support for CSS at-rules.
Tracking bug #40211832 | ChromeStatus.com entry | Spec
Open Font Format avar2 text shaping and glyph rendering
Version 2 of the avar (Axis Variations) table enables font designers to create variable fonts with better control over interpolation. While the original variable font spec handles axes independently, avar2 allows axes to influence one another. This leads to fonts that are easier to use for content authors to use, and enable compact storage.
Avar2 works by using the same familiar concepts of font variations, but applies the variable delta values to the design axis specifications itself. In addition, it lets you do this over a range of multiple axes.
As an example, it lets font designers create "meta sliders" which control multiple variation axes at once, alleviating the user from fine-tuning and finding a useful corner of the font's design space.
Avar2 gives font designers better control over the usable variation space of their font, and lets them coordinate the adjustment of design axes across several axes.
By defining the relationships between axes mathematically within the avar version 2 table, fonts can achieve complex designs with fewer masters, leading to smaller file sizes, because the interpolation is stored more efficiently.
Tracking bug #40246300 | ChromeStatus.com entry | Spec
The revert-rule keyword
The revert-rule keyword rolls back the cascade to the previous rule, similar to how revert-layer rolls back the cascade to the previous layer. For example:
div { color: green; } div { color: revert-rule; /* Effectively green */ }This is especially useful in combination with conditionals, because it lets you eliminate the current rule if some condition is not met:
div { display: if(style(--layout: fancy): grid; else: revert-rule); }Tracking bug #393582263 | ChromeStatus.com entry | Spec
Lazy loading for video and audio elements
Adds the loading attribute to and elements, letting developers defer media resource loading until the element is near the viewport using loading="lazy". This matches the existing lazy loading behavior for and elements, improving page load performance and reducing data usage.
Tracking bug #469111735 | ChromeStatus.com entry | Spec
text-decoration-skip-ink: all
Add support for the all value for the CSS text-decoration-skip-ink property.
The text-decoration-skip-ink property already supports auto and none. The all value extends this by unconditionally applying ink-skipping to all glyphs —including CJK characters—whereas auto leaves CJK characters un-skipped because ink-skipping tends to produce undesirable visual results for ideographic scripts at typical underline positions.
With text-decoration-skip-ink: all, developers who have adjusted text-underline-position or text-underline-offset to avoid clashing with CJK glyphs can explicitly opt in to ink-skipping for those characters as well.
Tracking bug #40675832 | ChromeStatus.com entry | Spec
Correctly set dropEffect for dragEnter, dragLeave, and dragOver events
Correctly set dropEffect for dragEnter, dragLeave, and dragOver events
The drag and drop specifications require the dataTransfer's object dropEffect attribute to have certain predetermined values on dragEnter, dragOver, and dragLeave. Drag enter and drag over should have a dropEffect based on the current effectAllowed, and dragLeave should always have a none dropEffect. Currently, Chromium doesn't adhere to these rules. With the launch of this feature, Chromium will start respecting the specification and assigning the correct values to this attribute so that web developers can start relying on it.
Tracking bug #434151262 | ChromeStatus.com entry | Spec
Pointer event suppression on drag start
According to the HTML spec, when a drag starts the user agent should send the appropriate events to the drag source to indicate that the pointer event stream has ended, and that it shouldn't expect any more events from this pointer. This code had been partially implemented for mouse events and fully implemented for touch drags on Android. With the work in this feature, we aim to fully satisfy this spec requirement on all other platforms. Practically, this means that after a drag has started the drag source will now receive the pointercancel, pointerout, and pointerleave events to indicate that the current event stream has finished.
Tracking bug #452372355 | ChromeStatus.com entry | Spec
Capabilities
Manifest localization
Supports localization of manifest members so apps can adapt their names, descriptions, icons, and shortcuts to the user's language and region. Developers provide localized values in the web app manifest, and the browser automatically selects the appropriate resources based on the user's language settings, introducing language support across different markets.
Learn more in Localization support for web app manifests.
Tracking bug #380491647 | ChromeStatus.com entry | Spec
Web on Android
Web Serial API on Android
The Web Serial API provides an interface for connecting to serial devices, either through a serial port on the user's system or removable USB and Bluetooth devices that emulate a serial port. Now it is supported on Android.
Users, especially in the educational, hobbyist, and industrial sectors, connect peripheral devices to their computers that require custom software to control. For example, robotics are often used to teach computer programming and electronics in schools. This requires software which can upload code to a robot or control it remotely. In an industrial or hobbyist setting a piece of equipment such as a mill, laser cutter or 3D printer is controlled by a program running on a connected computer. These devices are often controlled by small microcontrollers using a serial connection.
For more information, see the Web Serial API guide on web.dev and the Web Serial specification.
Tracking bug #365514951 | ChromeStatus.com entry
SharedWorker on Android
For a long time, SharedWorker has been disabled on Android due to concerns about its unpredictable process lifecycle. SharedWorker instances might terminate unexpectedly, without notifying users or web developers.
However, a recent discussion on GitHub (see the GitHub discussion) suggests that the unpredictable nature of SharedWorker's process lifecycle might not be as significant an issue as previously thought. Based on this, SharedWorker is being re-enabled on Android while this behavior is investigated to ensure a stable and reliable experience.
Tracking bug #40290702 | ChromeStatus.com entry | Spec
Web APIs
WebGPU: linear_indexing feature
This feature adds functionality to the WebGPU spec after its first shipment in a browser.
Adds two new compute shader built-in values for user quality of life. These are implemented for all backends (as polyfills of existing built-in values).
Tracking bug #482840564 | ChromeStatus.com entry | Spec
Web Authentication Immediate UI mode
A new mode for navigator.credentials.get() that causes browser sign-in UI to be displayed to the user if there is a passkey or password for the site that is immediately known to the browser, or else rejects the promise with NotAllowedError if there is no such credential available. This allows the site to avoid showing a sign-in page if the browser can offer a choice of sign-in credentials that are likely to succeed, while still allowing a traditional sign-in page flow for cases where there are no such credentials.
Tracking bug #408002783 | ChromeStatus.com entry | Spec
Get Secure Payment Confirmation capabilities
Adds a new static method to the Payment Request that lets web developers get the capabilities of the browser's implementation of Secure Payment Confirmation.
This helps web developers know what capabilities are available for Secure Payment Confirmation so they can decide whether or not they want to use Secure Payment Confirmation with those capabilities.
Tracking bug #484043990 | ChromeStatus.com entry | Spec
Extended lifetime shared workers
This update adds a new option, extendedLifetime: true, to the SharedWorker constructor. This new option requests that the shared worker be kept alive even after all current clients have unloaded. This lets pages perform asynchronous work that requires JavaScript after a page unloads, without needing to rely on a service worker.
Tracking bug #400473072 | ChromeStatus.com entry | Spec
Prompt API
The Prompt API gives web developers direct access to a browser-provided on-device AI language model. The API design offers fine-grained control, aligned with cloud API shapes, for progressively enhancing sites with model interactions tailored to individualized use cases. This complements task-based language model APIs, for example, Summarizer API, as well as a variety of APIs and frameworks for generalized on-device inference with developer-supplied ML models.
The initial implementation supports text, image, and audio inputs. In addition, response constraints ensure that generated text conforms with predefined regular expression and JSON schema formats.
This supports a variety of use cases, from generating image captions and performing visual searches to transcribing audio, classifying sound events, generating text following specific instructions, and extracting information or insights from multi-modal source material.
Tracking bug #417526788 | ChromeStatus.com entry | Spec
Network and connectivity
IDNA ContextJ rules
IDNA is the mechanism for non-ASCII characters in domain names. It encodes a URL like http://네이버.한국/ as http://xn--950bt9s8xi.xn--3e0b707e/ (a redirect to naver.com).
The URL specification sets the CheckJoiners flag, which enables the ContextJ rules in IDNA2008. This disallows ZWNJ (U+200C ZERO WIDTH NON-JOINER) and ZWJ (U+200D ZERO WIDTH JOINER) in most places in URLs. The implementation passes the UIDNA_CHECK_CONTEXTJ option to ICU, where this rule is implemented.
Tracking bug #40765949 | ChromeStatus.com entry | Spec
Reuse no-store images on same-src reassignment
Allow same-document available-image reuse to bypass Cache-Control: no-store reload when the same src value is reassigned to an element. Previously, Blink would re-fetch the image even though it was already decoded and available in the document. This aligns with existing Gecko and WebKit behavior.
Tracking bug #486562295 | ChromeStatus.com entry | Spec
Performance
ContentType in Resource Timing
Adds the contentType field to PerformanceResourceTiming to hold a string corresponding to the Content-Type HTTP header of the fetched resource as returned by the server.
Tracking bug #1366706 | ChromeStatus.com entry | Spec
WebRTC Datachannel: Always negotiate data channels
Implements a WebRTC extension alwaysNegotiateDataChannels which defines a way for the application to negotiate data channels in the SDP offer before creating a datachannel. This also negotiates the data m= section before any audio or video m sections and uses it as the "offerer-tagged m= section" for BUNDLE.
This means that:
const pc = new RTCPeerConnection({ alwaysNegotiateDataChannels: true }); const offer = await pc.createOffer();will create an offer with an application m-line in the SDP and that:
const pc = new RTCPeerConnection({ alwaysNegotiateDataChannels: true }); pc.addTransceiver('audio'); pc.createDataChannel('somechannel'); const offer = await pc.createOffer();will create an offer that negotiates an application m-line followed by an audio m-line in the SDP.
Tracking bug #433898678 | ChromeStatus.com entry | Spec
New origin trials
Declarative CSS module scripts
Declarative CSS Modules Scripts are an extension of the existing script-based CSS Module Scripts. They allow for developers to share declarative stylesheets with shadow roots, including declarative shadow roots. Developers can define inline style modules with
Original source - Apr 7, 2026
- Date parsed from source:Apr 7, 2026
- First seen by Releasebot:May 26, 2026
Chrome 147
Google Chrome releases Chrome 147 with major CSS and SVG upgrades, new WebXR and JavaScript capabilities, stronger local network access protections, improved autofill and preload support, and a Rust-based XML parser for safer parsing.
CSS and UI
Element-scoped view transitions
Exposes element.startViewTransition() on arbitrary HTML elements. The element establishes a scope for the transition, which means that the transition pseudo-elements are affected by ancestor clips and transforms, and multiple transitions on separate elements can run concurrently.
CSS contrast-color()
CSS contrast-color() function helps meet contrast requirements for accessibility. It can be used anywhere in CSS where a color value is expected. It takes a color value argument and returns either 'black' or 'white', depending on which provides the highest contrast against the color argument.
Timeline named range scroll
This feature expands the set of named ranges for view timelines by adding a scroll range to the existing set of entry, exit, cover, and contain.
CSS border-shape property
The CSS border-shape property lets you create non-rectangular borders with any arbitrary shape, for example, a polygon, circle, or shape(). Although border-shape accepts the same shapes as clip-path, it is fundamentally different. border-shape defines the shape of the border, decorates it, and clips only the inside. border-shape has two variants: one that strokes a shape and another that fills between two shapes.
CSSPseudoElement interface
The CSSPseudoElement interface represents a pseudo-element in JavaScript. CSSPseudoElement is returned from Element.pseudo(type), where type is currently ::after, ::before, or ::marker. CSSPseudoElement is a proxy object that represents a pseudo-element. Unlike a pseudo-element, a CSSPseudoElement always exists. It has attributes and methods including type (string representing the pseudo-element's type), element (the pseudo-element's ultimate originating element), parent (the pseudo-element's originating element), and pseudo(type) method to retrieve nested pseudo-elements.
Pseudo target on events
Specific events now include a .pseudoTarget, which is either CSSPseudoElement (if the interaction was with a pseudo-element) or null. This provides more specific information about the event origin, e.g., indicating that a ::after pseudo-element was clicked, not just the ultimate originating element (Event.target). Event.target remains unchanged.
Decouple *-width and *-style properties
Chrome 147 aligns with updated CSS specifications for the behavior of the border-width, outline-width, and column-rule-width properties. Previously, if the corresponding border-style, outline-style, or column-rule-style was set to none or hidden, the computed width was forced to 0px regardless of the specified value. Now, computed values always reflect the author-specified values, independent of the *-style property. Resolved values from getComputedStyle() for outline-width and column-rule-width also reflect specified values. This change aligns Chrome with Firefox and WebKit.
Support path attribute on SVG element
Adds support for the path attribute on the SVG element. This lets developers define text path geometry inline using SVG path data and reduces the need for separately defined elements. The element resolves its text path geometry with rules prioritizing path attribute over href attribute, consistent with SVG 2 specification and other browser engines.
Device
WebXR Plane Detection
The WebXR Plane Detection API lets sites retrieve the set of planes detected in the user's environment. This is less work for developers and more powerful than using the depth-sensing WebXR feature. Semantic labeling information is exposed when available, providing better knowledge about the world.
DOM
JSON and style support for link rel=modulepreload
Adds support for JSON and style module types as destinations. Previously, only script-like module scripts were supported. Now style modules and JSON modules can be preloaded.
XML Parsing in Rust for non XSLT scenarios
Implements the Rust XML parser for scenarios where no XSLT processing is required. This improves security by eliminating memory corruption bugs in XML parsing, replacing libxml2 (written in C) with a safe alternative. XSLT is being deprecated, but safe Rust XML parsing can be used where XSLT is not required.
Graphics
WebXR Layers
WebXR Layers offers a more efficient way to draw immersive content. It supports native color and depth textures, texture arrays, and different layer types managed by the system compositor.
JavaScript
Math.sumPrecise
Implements a TC39 proposal to add a method to sum multiple values in JavaScript. Adds an iterable-taking Math.sumPrecise method that returns the sum of the values in the iterable using a more precise algorithm than naive summation.
Network / Connectivity
Request.isReloadNavigation attribute
Adds the read-only boolean attribute isReloadNavigation to the Fetch API's Request interface. It indicates whether the current navigation request was initiated as a user-triggered reload (e.g., Refresh button, location.reload(), or history.go(0)). This signal is primarily exposed on the Request object within a Service Worker's FetchEvent.
Performance
Update Device Memory API limits
Updates to a new set of possible values for the Device Memory API: Android: 1, 2, 4, 8; Others: 2, 4, 8, 16, 32. These replace old values of 0.25, 0.5, 1, 2, 4, and 8. This reduces fingerprinting risks at the lower end and allows better usage and segmenting of high-end devices.
Local Network Access (LNA)
Local Network Access restrictions on service worker WindowClient.navigate()
Adds LNA restrictions to WindowClient.navigate() calls to prevent websites from unilaterally making requests to local networks and devices. Uses WindowClient as the initiator to determine if navigation is an LNA request. Applies only if the WindowClient being navigated is a subframe; no LNA restrictions on main frame navigations currently.
Local network access restrictions for WebTransport
Restricts ability to make requests to the user's local network using WebTransport, gated behind a permission prompt. Local network requests are those from public websites to local IP or loopback, or from local websites to loopback. Permission is restricted to secure contexts.
Local network access restrictions for WebSockets
LNA restrictions now include WebSockets. WebSockets connections to local addresses trigger permission prompts. Current LNA enterprise policies still apply.
Isolated Web Apps (IWA)
Web Printing API
Enables deeper integration with printer-related functionality in Isolated Web Apps. Provides JavaScript methods to query local printers, submit print jobs, and manage print job options and status, relying on Internet Printing Protocol (IPP) specifications.
Origin trials
Prerender cross-origin iframes
Prerenders cross-origin iframes using an opt-in response header Supports-Loading-Mode: prerender-cross-origin-frames.
Autofill event
Adds an autofill event that lets developers modify forms to fit autofilled data and notify the browser when done.
WebNN
Enables web applications and frameworks to take advantage of native OS services for machine learning and underlying hardware capabilities, helping implement consistent, efficient, and reliable ML experiences on the web.
Deprecations and removals
Remove Inline XSLT for production of SVG
Deprecates and removes inline XSLT processing for SVG production, a special case of XSLT processing considered virtually non-existent on the web. Rolls out in sync with experimental testing of the Rust-based XML parser; not immediately deployed to 100% in Chrome 147.
Original source - Mar 10, 2026
- Date parsed from source:Mar 10, 2026
- First seen by Releasebot:May 26, 2026
Chrome 146
Google Chrome releases Chrome 146 stable with major web platform upgrades, including scroll-triggered animations, scoped custom element registries, WebGPU compatibility mode and transient attachments, the Sanitizer API, improved permission controls, and better WebAudio, LCP, and drag-and-drop behavior.
Stable release date: March 10th, 2026
Unless otherwise noted, the following changes apply to Chrome 146 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
CSS and UI
Scroll-triggered animations
This feature adds scroll-position-based control of animations, for example, playing, pausing, and resetting animations.
A common pattern on pages across the web is to start an animation when a scroll position is reached. Developers often do this by using JavaScript to manually detect that an element is within its scroll container's viewport and to start a corresponding animation (for example, sliding that element into view). Many of these use cases rely on declaratively provided information. This feature lets you create such interactions declaratively with CSS, which lets the user agent offload this interaction to a worker thread. The API also includes JavaScript interfaces that let you extend the feature to web animations in addition to CSS animations.
The trigger-scope property
The trigger-scope property lets you limit the names of animation triggers declared by trigger-instantiating properties.
Trigger-instantiating properties, for example, timeline-trigger, declare names that the animation-trigger property can reference to attach animations to triggers. However, these names are global by default (similar to anchor-name), and it is often useful to limit the visibility of the names to isolate animation-to-trigger interactions.
meta name="text-scale"
The root element's default font size scales in proportion to both the operating system's and browser's text scale setting. This lets pages that follow best practices around font-relative units (that is, use rem and em for font sizes and page elements that adapt to user text size preferences) respect the user's OS-level text scale setting. This also disables existing browser-based mechanisms (that is, full-page zoom on windows) and heuristics (that is, text autosizing on mobile). You can signal to the browser that the page is constructed in a way (that is, with rem and em) that scales well across various user-selected font size preferences. Similar to env(preferred-text-scale), which provides a way to access the text scale, this API extends this by enabling scaling using the root element's default font size and opting out of automatic text scaling.
Scoped custom element registry
This feature lets multiple custom element definitions for a single tag name exist within a page. This prevents custom element name conflicts when a web app uses libraries from multiple sources. This is achieved by allowing user code to create multiple custom element registries and associate them with tree scopes and elements that function as scoping objects.
Capabilities
Populate targetURL during file handling
The Launch Handler implementation now ensures LaunchParams.targetURL is populated when a PWA is launched with file handling. Before this change, the property was null when a file launch was directed to an existing window. This change ensures that the URL from the manifest action field (the same URL the document must currently load) is available to the launchQueue consumer.
Stop re-queueing LaunchParams on reload
Prevent the launchQueue from re-sending the last LaunchParams (including file handles) when a user reloads the page. Previously, a page refresh triggered the launch consumer again with the data from the original launch. This change ensures that a reload is treated as a standard navigation rather than a "re-launch," and the launchQueue won't be populated with duplicate files unless a new file launch event occurs.
DOM
Navigation API: add post-commit handler from precommit
When intercepting navigations with the navigate event, precommitHandlers and post-commit ordinary handlers are passed separately.
This works well when there is only one or the other, but can be cumbersome when the flow includes a precommitHandler that leads to a post-commit handler.
This addition is a small ergonomic improvement that lets you register a post-commit handler while invoking a precommit handler.
Graphics
WebGPU: Texture and Sampler Lets
Add a language feature to WGSL, texture_and_sampler_let, that lets you store texture and sampler objects into a let declaration in WGSL.
WebGPU: Transient attachments
This feature adds functionality to the WebGPU spec after its first shipment in a browser.
A new TRANSIENT_ATTACHMENT GPUTextureUsage lets you create attachments that let render pass operations stay in tile memory, avoiding VRAM traffic and potentially avoiding VRAM allocation for the textures.
WebGPU Compatibility mode
This mode adds an opt-in, lightly restricted subset of the WebGPU API that can run older graphics APIs, for example, OpenGL and Direct3D11. By opting into this mode and obeying its constraints, you can extend the reach of your WebGPU applications to many older devices that don't have the modern, explicit graphics APIs that core WebGPU requires. For simple applications, the only required change is to specify the compatibility featureLevel when calling requestAdapter. For more advanced applications, some modifications might be necessary to accommodate the mode's restrictions. Since Compatibility mode is a subset, the resulting applications are also valid WebGPU Core applications and run even on user agents that don't support Compatibility mode.
JavaScript
Iterator sequencing
A TC39 proposal to create iterators by sequencing existing iterators. This introduces Iterator.concat(...items).
Selective permissions intervention
When you grant a website permission to access a powerful API (for example, Bluetooth, Camera, Clipboard, DisplayCapture, Geolocation, Microphone, Serial, and USB), your consent is intended for the site, not necessarily for every third-party script running on the page. In particular, embedded ad scripts running in the main frame or same-origin iframes can use the page's permission to opportunistically access this sensitive data. You might not be aware that an advertisement is accessing your information.
This intervention aims to better align a granted permission with your intent by preventing ad script in a context with API permission from using it, reinforcing your trust and control over your data.
Preserve dropEffect values from dragover to drop Events
The HTML5 Drag and Drop API lets web applications handle drag-and-drop operations through a series of events: dragstart, dragenter, dragover, dragleave, drop, and dragend. During these events, the dataTransfer.dropEffect property indicates which operation (copy, move, link, or none) should be performed.
According to the HTML5 specification, the dropEffect value set by web applications during the last dragover event should be preserved and available in the subsequent drop event.
However, Chromium-based browsers were overwriting the web application's dropEffect value with the browser's own negotiated operation before the drop event fired, breaking specification compliance and limiting your control over drag-and-drop behavior. This behavior has now been changed.
Multimedia
Playback Statistics API for WebAudio
This feature adds an AudioContext.playbackStats attribute which returns an AudioPlaybackStats object. This object provides audio playback statistics, for example, average latency, minimum/maximum latency, underrun duration, and underrun count. This API lets web applications monitor audio playback quality and detect glitches.
Note: This feature was tracked as AudioContext.playoutStats. It has been renamed to AudioContext.playbackStats to align with the final Web Audio API specification. The old name is supported as a deprecated alias for backward compatibility.
Network
Data URL MIME Type Parameter Preservation
Preserve MIME type parameters (for example, charset, boundary) in data URL Content-Type headers as specified in the Fetch Standard.
Performance
LCP: Match specced behavior for emitting candidates
The LCP algorithm now emits candidates based on the largest painted image instead of the largest pending-but-not-yet-painted image. This might cause more intermediate candidates to be emitted to the performance timeline.
In each animation frame, after it has been presented, the LCP algorithm emits a new candidate (at most one) to the performance timeline if there is a new largest text or image that was painted in that frame. The algorithm also tracks the "largest pending image", which is the largest still-loading image, and uses that image's size to determine whether the new candidate is largest. This means a slow loading large image can prevent emission of intermediate LCP candidates, and these candidates often provide useful information for you to understand the loading progression.
This behavior emerged during Interop 2025 as a difference with other engines, and the team agreed to align to emit at most one candidate per frame based on the set of painted image and text elements for that frame.
Security
Sanitizer API
The Sanitizer API offers a way to remove content that might execute script from arbitrary, user-supplied HTML content. The goal is to make it easier to build XSS-free web applications.
Origin trials
WebNN
WebNN lets web applications and frameworks take advantage of native operating system services for machine learning and the underlying hardware capabilities available on your computer to implement consistent, efficient, and reliable ML experiences on the web.
CPU Performance API
This API exposes information about your device's power. This API targets web applications that use this information to provide an improved user experience, possibly in combination with the Compute Pressure API, which provides information about the device's CPU pressure or utilization and lets applications react to changes in CPU pressure.
Speculation rules: form_submission field
This extends speculation rules syntax, letting you specify the form_submission field for prerender.
This field directs the browser to prepare the prerender as a form submission, so it can be activated by real form submission navigations. For example, a simple search form results in a /search?q=XXX GET request navigation; web developers have requested support for this.
Focusgroup
The Focusgroup feature facilitates keyboard focus navigation among a set of focusable elements by using the keyboard arrow keys.
Learn more about focusgroup in Request for developer feedback: focusgroup.
Original source - Feb 10, 2026
- Date parsed from source:Feb 10, 2026
- First seen by Releasebot:May 26, 2026
Chrome 145
Google Chrome ships Chrome 145 with major web platform upgrades across CSS, UI, performance, security, storage, and WebRTC. It adds new typography and layout controls, expands form and focus behavior, improves privacy and device-bound security, and strengthens rendering, reporting, and Android window handling.
Unless otherwise noted, the following changes apply to Chrome 145 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
CSS and UI
Add support for the text-justify CSS property
Add support for the text-justify CSS property
You can control how text is justified when text-align: justify is applied by using the text-justify property. For example, you can force justification by expanding inter-character space even in English text.
Tracking bug #40321528 | ChromeStatus.com entry | SpecEnable percentage values for CSS letter-spacing and word-spacing properties
Enable percentage values for CSS letter-spacing and word-spacing properties
Enable percentage values for the letter-spacing and word-spacing CSS properties, as defined in the CSS Text Module Level 4 specification. Percentage values are calculated relative to the advance measure of the space character (U+0020). This provides you with more robust and flexible control over typography, particularly in responsive designs where text spacing needs to adapt to different viewports and font sizes.
Tracking bug #327740939 | ChromeStatus.com entry | SpecRefine border-radius shadow edge computation for high border-radius
Refine border-radius shadow edge computation for high border-radius
This change ensures that shadows and clip boundaries on near-circular elements (where border-radius is close to 50%) precisely match the visual contour of the curved edge.
This provides a more consistent rendering of complex rounded shapes, eliminating visual discrepancies for high radius values. The border-radius adjustment factor, which ensures corners appear sharp for small radii, is progressively dampened as the radius value approaches 50%.
This also applies to non-round contours (using corner-shape), which now use the same radius adjustment mechanism.
Tracking bug #448651073 | ChromeStatus.com entry | SpecColumn wrapping for multicol
Add support for the column-wrap and column-height CSS properties, from multicol Level 2.
This enables vertical column layout, or even 2D column layout. Columns can have an explicit constrained height, rather than being derived from the content-box height of the multicol container. They wrap to a new row of columns when all columns have been filled for one row, instead of creating overflowing columns in the inline direction.
Tracking bug #403183884 | ChromeStatus.com entry | SpecExpose onanimationcancel event to GlobalEventHandlers
Expose onanimationcancel event to GlobalEventHandlers
The CSS Animations Level 1 extends the GlobalEventHandlers interface defined in the HTML specification, declaring four new event handlers: onanimationstart, onanimationiteration, onanimationend, and onanimationcancel. Only the onanimationcancel event handler has been missing from the GlobalEventHandlers IDL.
Tracking bug #464010037 | ChromeStatus.com entry | SpecCustomizable select listbox
This extends customizable select support to the listbox rendering mode, including single-select and multi-select in listbox mode.
The listbox rendering mode renders the select element in-flow or in the page, rather than with a separate button and popup. You can opt into listbox rendering mode across platforms using the multiple or size attributes, for example, or . When the appearance: base-select CSS property is applied to the select element with these attributes, it has improved rendering and input behavior.
This does not support customizable select for the multi-select popup, which will be supported later. You must set the following attributes to get a multi-select popup: .
Tracking bug #357649033 | ChromeStatus.com entry | SpecThe focusVisible option on focus
The focusVisible option on focus
When calling the focus() method, you can supply a focusVisible boolean in the FocusOptions dictionary. When true, a focus ring is always painted around the newly-focused element, and it matches the :focus-visible pseudo-class. When false, the focus ring is not painted, and :focus-visible does not match. When missing, the user agent makes its own determination as to whether the focus ring should be painted, and the :focus-visible pseudo-class matches accordingly.
Tracking bug #462191849 | ChromeStatus.com entry | SpecEnable monochrome emoji rendering in forced colors mode.
This change updates Chromium's emoji rendering behavior in Forced Colors Mode. During computed-value resolution, emoji whose font-variant-emoji value computes to normal or unicode are rendered using their monochrome glyphs when available.
Chromium therefore suppresses color emoji rendering, which ensures emojis fully participate in the Forced Colors Mode pipeline and respect system high-contrast colors. Behavior outside Forced Colors Mode is unchanged.
Tracking bug #420857717 | ChromeStatus.com entry | SpecOverscroll effect on non-root scrollers
This shows elastic overscroll effects on non-root scroll containers. When a nested scrollable element reaches its scroll boundary, the overscroll affordance applies to that element instead of only the root scroller. This reduces the need for custom JavaScript workarounds and can be controlled per element with overscroll-behavior.
Tracking bug #41102897 | ChromeStatus.com entry | SpecCapabilities
Show true window position on Android
Chrome on Android accurately reports the browser window's position and size using window.screenX, window.screenY, window.outerWidth, and window.outerHeight.
Chrome previously incorrectly assumed that all browser windows on Android start at coordinates (0, 0). This assumption is inaccurate for Android tablets that use freeform windowing mode. Websites always received 0 when querying the window's on-screen position using window.screenX and window.screenY. These fields store the coordinates of the window's top-left corner in global work area coordinate space.
Moreover, Chrome on Android incorrectly assumed that outer dimensions of the browser window are equal to the inner dimensions of the website viewport.
window.screenX and window.screenY have aliases: window.screenLeft and window.screenTop.
Tracking bug #417632037 | ChromeStatus.com entry | SpecJavaScript
Upsert
This is an ECMAScript proposal for Map.prototype.getOrInsert, Map.prototype.getOrInsertComputed, WeakMap.prototype.getOrInsert, and WeakMap.prototype.getOrInsertComputed.
Tracking bug #434977728 | ChromeStatus.com entry | SpecCrash Reporting key-value API
A new key-value API, window.crashReport, is backed by a per-Document map holding data that Chrome appends to crash reports.
The data placed in this API's backing map is sent in the CrashReportBody if any renderer process crashes are incurred by the site. This lets you debug what specific state in your application might be causing a given crash.
Tracking bug #400432195 | ChromeStatus.com entry | SpecReduced User-Agent strings by default
Starting in Chrome 145, Chrome removes the UserAgentReduction policy. This policy was available to control whether Chrome sent a reduced or full User-Agent string.
To enhance user privacy and reduce passive tracking capabilities, Chrome began reducing the information contained in the User-Agent header by default in Chrome version 110. The UserAgentReduction policy was provided as a temporary measure for enterprises to manage this transition.
The recommended mechanism for websites to access browser and device information is User-Agent Client Hints (UA-CH). UA-CH requires websites to actively request specific information, which is a more privacy-preserving approach than the legacy User-Agent string. For more information, see the web.dev article, Migrate to User-Agent Client Hints.
From Chrome 145 onwards, the UserAgentReduction policy has no effect. Chrome sends a reduced User-Agent string by default. Systems or applications that relied on this policy to receive the full (legacy) User-Agent string might no longer receive the detailed information they expect.
ChromeStatus.com entryNavigation API: expose destination in navigation.transition
NavigationTransition has a from property, exposing the old URL of the navigation. Exposing to (a NavigationDestination) completes this. It is especially useful when using precommit handlers, as during precommit the current URL has not yet switched to the destination.
navigation.transition is only exposed for intercepted navigations—which means same-origin document-initiated navigations.
Tracking bug #447171238 | ChromeStatus.com entry | SpecSecure Payment Confirmation: Browser Bound Keys
This adds an additional cryptographic signature over Secure Payment Confirmation assertions and credential creation. The corresponding private key is not synced across devices. This helps you meet requirements for device binding for payment transactions.
Tracking bug #377278827 | ChromeStatus.com entry | SpecSecure Payment Confirmation: UX Refresh
Updates the UX elements for the SPC dialog on Android Chrome.
In addition to UX presentation, the following are added:- Merchants can provide an optional list of payment entity logos related to the payment that are displayed in the UX.
- Different output states are returned to the merchant depending on whether the user wants to continue the transaction without SPC or to cancel the transaction. Only a single output state is sent for both cases.
- A new payment detail label field is added to the payment instrument so the text is presented across two lines in SPC.
Tracking bug #405173922 | ChromeStatus.com entry | Spec
Cookie Store API maxAge attribute
Cookie Store API maxAge attribute
You can specify a maxAge when setting a cookie with the Cookie Store API.
Cookie expiry time is already configurable using the expires attribute, but maxAge provides a more idiomatic option and aligns the Cookie Store API with the options provided by document.cookie and the Set-Cookie HTTP Header.
Tracking bug #430926231 | ChromeStatus.com entry | SpecInputEvent types for deletion commands on non-collapsed selections
This reports accurate inputType values for deletion keyboard shortcuts on selected text. When deletion commands like Ctrl+Backspace or Ctrl+Delete are used with selected text in contenteditable elements, the beforeinput and input events report deleteContentBackward or deleteContentForward instead of deleteWordBackward or deleteWordForward. This lets you correctly understand what editing operation occurred and implement reliable undo, redo, or custom editing behaviors.
Tracking bug #41423062 | ChromeStatus.com entry | SpecSticky activation for the clipboardchange event
Sticky activation for the clipboardchange event
This requires sticky user activation or clipboard-read permission to fire clipboardchange events, preventing unauthorized clipboard monitoring.
The clipboardchange event is relatively new (Chrome 144), and this has minimal web-facing change. In most cases, sticky user activation or clipboard-read permission is already present where clipboard monitoring occurs (for example, in remote desktop clients).
Tracking bug #468821937 | ChromeStatus.com entry | SpecMultimedia
Expose rtpTimestamp from WebRTC video frames with VideoFrame.metadata()
Expose rtpTimestamp from WebRTC video frames with VideoFrame.metadata()
Adds a VideoFrame.metadata() method that returns a dictionary containing the rtpTimestamp field, if the underlying VideoFrame has this field in its native metadata. An empty dictionary is returned otherwise. Only video frames originating from WebRTC sources have the rtpTimestamp metadata attached.
Additional metadata fields are already present in the native implementation and might be exposed to JavaScript over time, as outlined in the proposed spec.
ChromeStatus.com entry | SpecStorage
IndexedDB: SQLite backend (in-memory contexts)
Chromium's IndexedDB implementation has been rewritten on top of SQLite, to replace the previous implementation that uses a hybrid of LevelDB and flat files. There is no change to the Web API.
This improves reliability and, to a lesser extent, performance.
This is applied only to in-memory contexts such as Incognito mode in Chromium and Google Chrome. This limits the impact of any new bugs and defers the need to migrate existing data persisted to disk.
Tracking bug #436880911 | ChromeStatus.com entry | SpecPerformance
Let web applications understand bimodal performance timings
A new confidence field on the PerformanceNavigationTiming object lets you discern whether the navigation timings are representative for your web application.
Tracking bug #1413848 | ChromeStatus.com entry | SpecAdd presentationTime and paintTime to performance entries
Add presentationTime and paintTime to performance entries
This exposes paintTime and presentationTime in element timing, LCP, long animation frames, and paint timing.
paintTime means the time when the rendering phase ended and the browser started the paint phase.
presentationTime means the time when the "pixels reached the screen," which is somewhat implementation-defined.
This feature entry omits event timing, which is done separately.
Tracking bug #378827535 | ChromeStatus.com entry | SpecUse of CssPixels in LayoutShift API
This feature changes the attribution data (prevRect and currentRect) in the LayoutShift API to be reported in CSS pixels instead of physical pixels. The behavior is inconsistent with other layout-related APIs, which all use CSS pixels. This change improves consistency, simplifies usage for you, and aligns with expected units in debugging and tooling.
Tracking bug #399058544 | ChromeStatus.com entry | SpecSecurity
Device Bound Session Credentials
Device Bound Session Credentials (DBSC) lets websites bind a user's session to their specific device, making it significantly harder for stolen session cookies to be used on other machines.
ChromeStatus.com entry | SpecThe Origin API
The origin is a fundamental component of the web's implementation, essential to both the security and privacy boundaries that user agents maintain. The concept is well-defined between HTML and URL, along with widely-used adjacent concepts like site.
Origins, however, are not directly exposed to you. Though there are various origin getters on various objects, each of those returns the ASCII serialization of an origin, not the origin itself. This has a few negative implications. Practically, you attempting to do same-origin or same-site comparisons when handling serialized origins often get things wrong in ways that lead to vulnerabilities. Philosophically, it seems like a missing security primitive that you struggle to polyfill accurately.
In Chrome 145, Chrome addresses this gap in the platform by introducing an Origin object that encapsulates the origin concept and provides helpful methods such as comparison, serialization, and parsing.
Tracking bug #434131026 | ChromeStatus.com entry | SpecLocal Network Access split permissions
This is an enhancement to the Local Network Access (LNA) restrictions, where Chrome splits the permission required from one Local Network Access permission into two separate permissions.
The old permission is local-network-access. The new permissions are local-network (for LNA requests to IPs in the local address space) and loopback-network (for LNA requests to IPs in the loopback address space).
The old permission is kept as an alias and continues to work for permissions.query and Permissions Policy. Enterprise policies continue to work the same; newer, more granular enterprise policies are added later.
Tracking bug #465491626 | ChromeStatus.com entry | SpecTrusted Types specification alignment
Trusted Types was originally implemented and launched in Chromium in 2019 and has since found use in numerous websites. It has recently gained interest from other browser vendors.
The Trusted Types spec was co-written as a "monkey patch" spec along with the original implementation. It receives fresh attention as others are trying to implement the same spec. It has been "upstreamed" into HTML + DOM (plus a bit of CSP). As part of that process, various inconsistencies are being identified and fixed. Some of these fixes might be developer observable. The intent is to update the implementation to match the spec as it is upstreamed into HTML.
Meanwhile, WebKit has launched their implementation of the updated Trusted Types spec, which gives Chrome high confidence that this update is highly web compatible.
Tracking bug #330516530 | ChromeStatus.com entry | SpecGraphics
WebGPU: subgroup_uniformity feature
WebGPU: subgroup_uniformity feature
This adds a new scope to the uniformity analysis and changes which parts of the language are checked in each to enable subgroup functionality to be considered uniform in more cases.
Tracking bug #454653380 | ChromeStatus.com entry | SpecIsolated Web Apps
WebRequest.SecurityInfo in Controlled Frame
WebRequest.SecurityInfo in Controlled Frame
This feature introduces a WebRequest.SecurityInfo API for ControlledFrame. It lets a web app intercept an HTTPS, WSS, or WebTransport request to a server, retrieve the server's certificate fingerprint (as verified by the browser), and then use that fingerprint to manually verify the certificate of a separate raw TCP/UDP connection to the same server. This provides a method for the app to confirm it's communicating with the correct server.
Tracking bug #462114142 | ChromeStatus.com entry | SpecOrigin trials
JPEG XL decoding support (image/jxl) in blink
JPEG XL decoding support (image/jxl) in blink
Adds support for decoding JPEG XL (image/jxl) images in Blink using jxl-rs, a memory-safe pure Rust decoder.
JPEG XL is a modern image format standardized as ISO/IEC 18181 that offers:- Progressive decoding for improved perceived loading performance.
- Support for wide color gamut, HDR, and high bit depth.
- Animation support.
This implementation uses jxl-rs instead of the C++ libjxl reference decoder to meet Chromium's memory safety requirements. The decoder is gated behind the enable-jxl-image-format flag and enable_jxl_decoder build flag.
ChromeStatus.com entryWebAudio: Configurable render quantum
AudioContext and OfflineAudioContext now take an optional renderSizeHint, which allows users to ask for a particular render quantum size when an integer is passed, to use the default of 128 frames if nothing or default is passed, or to ask the User-Agent to pick a good render quantum size if hardware is specified.
Origin Trial | ChromeStatus.com entryDeprecations and removals
Remove support for obsolete virtual cameras on macOS
Chrome removes support for obsolete virtual cameras for all macOS releases that it supports.
Tracking bug #461717105 | ChromeStatus.com entryRemove BMP Extension for Embedding JPEG-or-PNG-in-BMP
Chrome removes the BMP extension for embedding JPEG-or-PNG-in-BMP.
Original source
Tracking bug #456842524 | ChromeStatus.com entry | Spec - Jan 13, 2026
- Date parsed from source:Jan 13, 2026
- First seen by Releasebot:May 26, 2026
Chrome 144
Google Chrome releases Chrome 144 with broad web platform upgrades, including new CSS and UI styling controls, richer view transitions and WebGPU capabilities, a declarative geolocation element, Temporal support, better performance and input handling, plus several API deprecations.
Unless otherwise noted, the following changes apply to Chrome 144 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
CSS and UI
CSS find-in-page highlight pseudos
This feature exposes find-in-page search result styling to authors as a highlight pseudo-element, similar to selection and spelling errors. This lets developers change foreground and background colors or add text decorations. This is especially useful if browser defaults have insufficient contrast with page colors or are otherwise unsuitable.
Non-tree-scoped container-name matching
Ignore tree-scope when matching container-name for @container queries.
Previously, container-name matching for container queries used tree-scoped names or references for matching. This meant the same name didn't match if the @container rule and the container-type property originated from different trees, such that the container-type declaration came from an inner shadow tree.
With this change, container names match regardless of @container rule or container-type declaration origins.
CSS anchor positioning with transforms
When an anchor-positioned element is tethered against an anchor that has a transform (or is contained by an element with a transform), resolve anchor() and anchor-size() functions against the bounding box of the transformed anchor.
CSS caret-shape property
The caret's shape in native applications is most commonly a vertical bar, an underscore, or a rectangular block. Additionally, the shape often varies depending on the input mode, for example, insert or replace. The CSS caret-shape property lets sites choose one of these shapes for the caret inside editable elements, or leave the choice to the browser. The recognized property values are auto, bar, block, and underscore.
SVG2 CSS cascading
Align the Chrome implementation with the SVG2 specification for matching CSS rules in element trees.
Match selectors against the instantiation elements instead of the originating element subtree. This means selectors no longer match ancestor and sibling elements outside the cloned subtree. More importantly, state selectors, for example, :hover, now start matching in instances.
Respect overscroll-behavior on non-scrollable scroll containers
The overscroll-behavior property applies to all scroll container elements, regardless of whether those elements currently have overflowing content or are user scrollable. Developers can use overscroll-behavior to prevent scroll propagation on an overflow: hidden backdrop or an overflow: auto element without considering whether it will currently be overflowing.
Respect overscroll-behavior for keyboard scrolls
When you set overscroll-behavior to a value other than auto, the browser shouldn't perform scroll chaining. The browser respects this for mouse or touch scrolling, but keyboard scrolls ignored it. This change makes keyboard scrolling also respect overscroll-behavior.
@scroll-state scrolled support
Lets developers style descendants of containers based on the most recent scrolling direction.
Side-relative syntax for background-position-x/y longhands
Defines the background image position relative to one of its edges.
This syntax gives developers more flexible and responsive mechanisms to define the background image position, instead of using fixed values that need adaptation to the window or frame size.
This feature also applies to the -webkit-mask-position property to ensure web compatibility.
View transitions waitUntil() method
View transitions automatically construct a pseudo-element tree to display and animate participating elements in the transition. Per the specification, this subtree is constructed when the view transition starts animating and is destroyed when the animations associated with all view transition pseudo-elements are in the finished state (or more precisely, in a non-running, non-paused state).
This works for most cases and provides a seamless experience for developers. However, for more advanced cases, this is insufficient because developers sometimes want the view transition pseudo-tree to persist beyond the animation finish state.
One example is tying view transitions with Scroll Driven Animations. When a scroll timeline controls the animation, the subtree shouldn't be destroyed when the animations finish because scrolling back should still animate the pseudo elements.
To enable advanced uses of view transition, this intent adds a waitUntil() function on the ViewTransition object that takes a promise. This promise delays destruction of the pseudo-tree until it settles.
Device
XRVisibilityMaskChange
Adds an XRVisibilityMaskChange event that provides a list of vertices and a list of indices to represent the mesh of the visible portion of the user's viewport. This data can then limit the amount of the viewport drawn to, which improves performance. To better support this event, XRView objects are also given unique identifiers to allow easier pairing with the associated masks. This extends the core WebXR specification.
DOM
The element
Introduces the element, a declarative, user-activated control for accessing the user's location. It streamlines the user and developer journey by handling the permission flow and directly providing location data to the site. This often eliminates the need for a separate JavaScript API call.
This addresses the long-standing problem of permission prompts triggering directly from JavaScript without a strong signal of user intent. By embedding a browser-controlled element in the page, the user's click provides a clear, intentional signal. This enables a better prompt UX and, crucially, provides a recovery path for users who previously denied the permission.
Graphics
WebGPU: Uniform buffer standard layout
Uniform buffers declared in WGSL shaders are no longer required to have 16-byte alignment on array elements or to pad nested structure offsets to a multiple of 16 bytes.
WebGPU: subgroup_id feature
The subgroup_id and num_subgroups built-in values are available when the subgroups extension is enabled.
JavaScript
Temporal in ECMA262
The Temporal API in ECMA262 is a new API that provides standard objects and functions for working with dates and times. Date has been a long-standing pain point in ECMAScript. This proposes Temporal, a global Object that acts as a top-level namespace (similar to Math), which brings a modern date and time API to the ECMAScript language.
Support ping, hreflang, type, and referrerPolicy for SVGAElement
Adds support for ping, hreflang, type, and referrerPolicy attributes on SVGAElement, aligning its behavior with HTMLAnchorElement for consistent link handling across HTML and SVG.
Mirroring of RTL MathML operators
Supports character-level and glyph-level mirroring when rendering MathML operators in right-to-left mode.
When using RTL mode, some operators can be mirrored by changing them to another code point. For example, a right parenthesis becomes a left parenthesis. This is character-level mirroring, with equivalences defined by Unicode's Bidi_Mirrored property.
Some operators have no appropriate mirroring character. Glyph-level mirroring applies in this case, with the rtlm font feature, where another glyph can replace it in a mirrored context. Some existing implementations mirror the original glyph directly, but this might change the meaning for asymmetrical characters, for example, the clockwise contour integral.
The clipboardchange event
The clipboardchange event fires whenever a web app or any other system application changes the system clipboard contents. This lets web apps, for example, remote desktop clients, keep their clipboards synchronized with the system clipboard. It provides an efficient alternative to polling the clipboard (using JavaScript) for changes.
Permissions
User-Agent Client Hints ch-ua-high-entropy-values permissions policy
Adds support for a ch-ua-high-entropy-values permissions policy that enables a top-level site to restrict which documents can collect high-entropy client hints with the navigator.userAgentData.getHighEntropyValues() JavaScript API.
Restricting collection of high-entropy hints over HTTP is possible through existing per-client-hint permissions policies.
Performance
Performance and Event Timing: interactionCount
The Event Timing API is part of the Performance Timeline and measures the performance of user interactions. Certain events have an interactionId value assigned to them. This is useful for grouping related interactions based on common physical user inputs or gestures.
This feature adds a performance.interactionCount property, which is the total number of interactions that occurred on the page.
In particular, this feature is useful for computing the Interaction to Next Paint (INP) metric value. This requires knowing the total number of interactions to compute a high percentile score (p98 for pages with more than 50 total interactions).
This feature has been specified for a long time, was prototyped in Chromium a long time ago but never shipped, is part of Interop 2025, and is available in other browsers.
Note: A more powerful performance.eventCounts map for specific events exists, but you can't accurately map event counts to interaction counts.
User input
Interoperable pointer and mouse boundary events after DOM changes
After an event target is removed from the DOM, the logical target of the pointer, as implied by the Pointer and Mouse boundary events (that is, over, out, enter, and leave events), should be the nearest ancestor still attached to the DOM.
The PEWG recently reached consensus on this behavior.
Chrome tracked a node even after it was removed from the DOM. As a result, if the pointer moves to a new node B after the hit-test node A is removed from the DOM, the boundary event sequence (pointerover, pointerout, pointerenter, pointerleave events, and the corresponding mouse events) implied a pointer movement from A to B. As per the new consensus, the event sequence implies a pointer movement from the "parent of A" to B.
Pointer lock on Android
Provides access to raw mouse movement by locking the target of mouse events to a single element and hiding the mouse cursor.
WebRTC
RTCDegradationPreference enum value maintain-framerate-and-resolution
maintain-framerate-and-resolution disables WebRTC's internal video adaptation. This lets the application implement its own adaptation logic and prevents interference from the internal adaptation.
From the WebRTC MediaStreamTrack Content Hints specification:
Maintain framerate and resolution regardless of video quality. The user agent shouldn't prefer reducing the framerate or resolution for quality and performance reasons, but might drop frames before encoding if necessary not to overuse network and encoder resources.
Isolated Web Apps (IWA)
Multicast Support for Direct Sockets API.
This feature lets Isolated Web Apps (IWAs) subscribe to multicast groups, receive User Datagram Protocol (UDP) packets from them, and specify additional parameters when sending UDP packets to multicast addresses.
Origin trials
Enhanced Canvas API TextMetrics
Expands the TextMetrics Canvas API to support selection rectangles, bounding box queries, and glyph cluster-based operations.
This new functionality enables complex text editing applications with accurate selection, caret positioning, and hit testing. Additionally, cluster-based rendering facilitates sophisticated text effects, for example, independent character animations and styling.
Context-aware media elements
Context-aware media elements, are a declarative, user-activated control for accessing the starting and interacting with media streams.
This addresses the long-standing problem of permission prompts being triggered directly from JavaScript without a strong signal of user intent. By embedding a browser-controlled element in the page, the user's click provides a clear, intentional signal. This enables a much better prompt UX and, crucially, provides a recovery path for users who have previously denied the permission.
Deprecations and removals
Deprecate and remove: Private Aggregation API
The Private Aggregation API is a generic mechanism for measuring aggregate, cross-site data in a privacy-preserving manner. It was originally designed for a future without third-party cookies.
Following Chrome's announcement that the current approach to third-party cookies will be maintained, Chrome plans to deprecate and remove the Private Aggregation API (along with certain other Privacy Sandbox APIs, as outlined on the Privacy Sandbox feature status page). This API is only exposed through the Shared Storage and Protected Audience APIs, which are also planned for deprecation and removal. Therefore, no additional work is required for Private Aggregation.
Deprecate and Remove: Shared Storage API
The Shared Storage API is a privacy-preserving web API that enables storage not partitioned by a first-party site.
Following Chrome's announcement that the current approach to third-party cookies will be maintained, Chrome plans to deprecate and remove the Shared Storage API (along with certain other Privacy Sandbox APIs, as outlined on the Privacy Sandbox feature status page).
Deprecate and Remove Protected Audience
The Protected Audience API provides a method of interest-group advertising without third-party cookies or user tracking across sites.
Following Chrome's announcement that the current approach to third-party cookies will be maintained, Chrome plans to deprecate and remove the Protected Audience API (along with certain other Privacy Sandbox APIs, as outlined on the Privacy Sandbox feature status page).
Externally loaded entities in XML parsing
Chrome synchronously fetches external XML entities or DTDs and incorporates them into parsing under specific circumstances. This document proposes removing this functionality.
For example, http/tests/security/contentTypeOptions/xml-external-entity.xml shows how external entities can be defined in the trailing part of the DOCTYPE statement. These entities then refer to resources that are synchronously loaded and included as context when parsing XML.
Another syntax example is a DOCTYPE that, using the SYSTEM keyword followed by a URL, points to a DTD that contains additional entity definitions.
The parser passes up such external load requests.
According to the XML specification, non-validating processors are not required to read external entities.
Chrome plans to deprecate loading external entity definitions in XML documents that don't use XSLT.
Original source - Dec 2, 2025
- Date parsed from source:Dec 2, 2025
- First seen by Releasebot:May 26, 2026
Chrome 143 Bookmark collections drop down
Google Chrome releases Chrome 143 for desktop and Android with broad web platform upgrades, including CSS anchored fallback container queries, WebGPU texture swizzle, WebTransport protocol negotiation, richer FedCM and Web App Manifest support, improved editing APIs, and ICU 77 Unicode 16 updates.
Stable release date: December 2nd, 2025
Unless otherwise noted, the following changes apply to Chrome 143 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
Want just the highlights? Check out New in Chrome 143.
CSS and UI
CSS anchored fallback container queries
Introduces @container anchored(fallback) to style descendants of anchor positioned elements based on which of position-try-fallbacks is applied.
Such queries can be used to style an anchored element's tether or its animations, based on how the anchor and the anchored element are positioned relative to each other.
Tracking bug #417621241 | ChromeStatus.com entry | Spec
Side-relative syntax for background-position-x/ y longhands
Defines the background image's position relative to one of its edges.
This syntax provides a more flexible and responsive mechanism to define the background image position, instead of using fixed values that need to be adapted to the window or frame size.
This feature is applied also to the -webkit-mask-position property to ensure webcompat levels are the same.
Tracking bug #40468636 | ChromeStatus.com entry | Spec
Implement CSS property font-language-override
Implement CSS property font-language-override
Introduces support for font-language-override CSS property. The property allows developers to override the system language used for OpenType glyph substitution by specifying a four-character language tag directly in CSS.
This enables fine-grained typographic control, particularly useful for multilingual content or fonts with language-specific glyph variants.
Tracking bug #41170551 | ChromeStatus.com entry | Spec
Web App Manifest: specify update eligibility
Specify an update eligibility algorithm in the manifest specification. This makes the update process more deterministic and predictable, giving the dev more control over whether (and when) updates should apply to existing installations, and allowing removal of the update check throttle that user agents currently need to implement to avoid wasting network resources.
Tracking bug #403253129 | ChromeStatus.com entry
Device
Gamepad ongamepadconnected and ongamepaddisconnected event handler attributes
Gamepad ongamepadconnected and ongamepaddisconnected event handler attributes
Adds ongamepadconnected and ongamepaddisconnected event handlers to the WindowEventHandlers interface mixin.
This enables support for the following event handler attributes:
- window.ongamepadconnected
- document.body.ongamepadconnected
- window.ongamepaddisconnected
- document.body.ongamepaddisconnected
Tracking bug #40175074 | ChromeStatus.com entry | Spec
DOM
Allow more characters in JavaScript DOM APIs
The HTML parser lets elements and attributes have a wide variety of valid characters and names, but the JavaScript DOM APIs to create the same elements and attributes are more strict and don't match the parser.
This change relaxes the validation of the JavaScript DOM APIs to match the HTML parser.
Tracking bug #40228234 | ChromeStatus.com entry | Spec
Graphics
WebGPU: Texture component swizzle
Allows GPUTextureViews to rearrange or replace the color components from texture's red/green/blue/alpha channels when accessed by a shader.
Tracking bug #414312052 | ChromeStatus.com entry | Spec
JavaScript
ICU 77 (supporting Unicode 16)
The Unicode support library ICU (International Components for Unicode) is upgraded from version 74.2 to 77.1, adding support for Unicode 16 and updating locale data. Two changes could pose some risk for web applications that assume a specific format from the Intl JS APIs:
- The default Italian number formatting changed to omit the thousand separator for 4-digit numbers. For example new Intl.NumberFormat("it").format(1234) will return 1234 instead of 1.234. The old behavior can be achieved with the useGrouping parameter for the Intl.NumberFormat constructor.
- In some English locales (en-AU, en-GB, and en-IN), a comma was added after full-length weekdays, for example, changing Saturday 30 April 2011 to Saturday, 30 April 2011. Web applications should avoid relying on the precise formatting of dates and they may change again in future.
Tracking bug #421834885 | ChromeStatus.com entry | Spec
EditContext: TextFormat underlineStyle and underlineThickness
The EditContext API shipped with a bug in Chrome where the TextFormat object supplied by the textformatupdate event provides incorrect values for the underlineStyle and underlineThickness properties. Before Chrome 143 the possible values are None, Solid, Dotted, Dashed, Squiggle and None, Thin, Thick. However the specification lists none, solid, dotted, dashed, wavy and none, thin, thick.
The correct values as specified are now implemented from Chrome 143.
Tracking bug #354497121 | ChromeStatus.com entry | Spec
DataTransfer property for insertFromPaste, insertFromDrop and insertReplacementText input events
DataTransfer property for insertFromPaste, insertFromDrop, and insertReplacementText input events
Populate the dataTransfer property on input events with an inputType of insertFromPaste, insertFromDrop, and insertReplacementText to provide access to clipboard and drag-drop data during editing operations in contenteditable elements.
The dataTransfer object contains the same data that was available during the beforeinput event.
This feature only applies to contenteditable elements. For form controls (textarea, input), the behavior remains unchanged—the data property contains the inserted text and dataTransfer remains null.
Tracking bug #401593412 | ChromeStatus.com entry | Spec
FedCM: Support structured JSON responses from IdPs
Allows Identity Providers (IdPs) to return structured JSON objects instead of plain strings to Relying Parties (RPs) using the id_assertion_endpoint.
This change simplifies integration for developers by eliminating the need to manually serialize and parse JSON strings. It enables more dynamic and flexible authentication flows, allowing RPs to interpret complex responses directly and support varied protocols like OAuth2, OIDC, or IndieAuth without out-of-band agreements.
Tracking bug #346567168 | ChromeStatus.com entry | Spec
Network
WebTransport Application Protocol Negotiation
WebTransport Application Protocol Negotiation allows negotiation of the protocol used by the web application within the WebTransport handshake.
A web application can specify a list of application protocols offered when constructing a WebTransport object, which are then conveyed to the server using HTTP headers; if the server picks one of those protocols, it can indicate that within response headers, and that reply is available within the WebTransport object.
Tracking bug #416080492 | ChromeStatus.com entry | Spec
Performance
Speculation rules: mobile eager eagerness improvements
On mobile, eager eagerness speculation rules prefetches and prerenders now trigger when HTML anchor elements are in the viewport for a short time.
Tracking bug #436705485 | ChromeStatus.com entry | Spec
WebRTC
WebRTC RTP header extension behavior change
Implements a change to the specification that ensures that subsequent offer or answer does not permute the header extensions negotiated unless the user wants that to happen.
Tracking bug #439514253 | ChromeStatus.com entry | Spec
Isolated Web Apps
Web Smart Card API for Isolated Web Apps
Available on Isolated Web Apps (IWA) only. Enables smart card (PC/SC) applications to move to the Web platform. It gives them access to the PC/SC implementation (and card reader drivers) available in the host OS.
Administrators can control the availability of this API either:
- Globally—using the DefaultSmartCardConnectSetting policy.
- Per-application—using the SmartCardConnectAllowedForUrls and SmartCardConnectBlockedForUrls policies.
Tracking bug #1386175 | ChromeStatus.com entry | Spec
Origin trials
Digital Credentials API (issuance support)
This feature lets issuing websites (for example, a university, government agency, or bank) to securely initiate the provisioning (issuance) process of digital credentials directly into a user's mobile wallet application. On Android, this capability uses the Android IdentityCredential CredMan system (Credential Manager). On Desktop, it uses cross-device approaches using the CTAP protocol similar to Digital Credentials presentation.
Origin Trial | Tracking bug #378330032 | ChromeStatus.com entry | Spec
Web Install API
Provides the ability to install a web app. When invoked, the website installs either itself, or another site from a different origin, as a web app (depending on the provided parameters).
Origin Trial | Tracking bug #333795265 | ChromeStatus.com entry | Spec
Deprecations and removals
Deprecate XSLT
XSLT v1.0, which all browsers adhere to, was standardized in 1999. In the meantime, XSLT has evolved to v2.0 and v3.0, adding features, and growing apart from the version frozen into browsers. This lack of advancement, coupled with the rise of JavaScript libraries and frameworks that offer more flexible and powerful DOM manipulation, has led to a significant decline in the use of client-side XSLT. Its role within the web browser has been largely superseded by JavaScript-based technologies, such as JSON and React.
Chromium uses the libxslt library to process these transformations, and libxslt was unmaintained for around 6 months of 2025. Libxslt is a complex, aging C codebase of the type notoriously susceptible to memory safety vulnerabilities like buffer overflows, which can lead to arbitrary code execution. Because client-side XSLT is now a niche, rarely-used feature, these libraries receive far less maintenance and security scrutiny than core JavaScript engines, yet they represent a direct, potent attack surface for processing untrusted web content. Indeed, XSLT is the source of several recent high-profile security exploits that continue to put browser users at risk. For these reasons, Chromium (along with both other browser engines) plans to deprecate and remove XSLT from the web platform. For more details, see Removing XSLT for a more secure browser.
ChromeStatus.com entry
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.
Changes in Stage 3 of the specification moves several getters to functions. These are now being updated in Chrome to match the specification.
Tracking bug #42203770 | ChromeStatus.com entry | Spec
FedCM Privacy Enforcement for Client Metadata
To address cross-site identity correlation risks in the FedCM API, Identity Providers (IdPs) that use client_metadata within their FedCM configuration are required to implement the direct endpoints format in the .well-known/web-identity file. This mandate ensures that both accounts_endpoint and login_url are explicitly defined whenever a client_metadata_endpoint is present. This approach strengthens privacy protections by preventing relying parties from exploiting metadata to correlate user identities across multiple sites.
In Chrome 143 (Warning Phase): If client_metadata_endpoint exists but accounts_endpoint or login_url is missing, the browser will display console warnings. This gives IdPs time to update configurations.
ChromeStatus.com entry | Spec
FedCM-Migration of nonce to params field and renaming of IdentityCredentialError code attribute to error
FedCM-Migration of nonce to params field and renaming of IdentityCredentialError code attribute to error
Migration of nonce to params field: The nonce parameter in navigator.credentials.get() is moving from a top-level field to the params object for better API design, extensibility, and maintainability. This structured approach simplifies parsing for Identity Providers, supports future-proofing without versioning, and aligns with modern API patterns. For Relying Parties, the impact is minimal—they provide the same nonce value in a new location.
In Chrome 143 (Warning Phase): nonce accepted both at top level and inside params. Top-level usage triggers a console warning.
Rename code to error in IdentityCredentialError: The code attribute in IdentityCredentialError is renamed to error for clearer semantics, better developer experience, and alignment with web standards. This change reduces ambiguity and avoids conflicts with DOMException.code. Additionally, error.code becomes error.error, retaining its DOMString type.
In Chrome 143 (Warning Phase): Both error and code attributes are supported. Using code triggers a console warning, guiding developers to migrate.
Tracking bug #427474985 | ChromeStatus.com entry | Spec
Original source - Oct 28, 2025
- Date parsed from source:Oct 28, 2025
- First seen by Releasebot:May 26, 2026
Chrome 142
Google Chrome releases Chrome 142 with new CSS and View Transitions updates, expanded WebGPU and FedCM capabilities, stronger local network access protections, improved select rendering parity, and new APIs for speech, media sessions, and device-bound sessions.
Unless otherwise noted, the following changes apply to Chrome 142 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
Absolute positioning for the ::view-transition element
View transitions use a pseudo subtree of the element, with ::view-transition being the root of that transition. Previously, the ::view-transition element was specified to have position: fixed. The CSS Working Group resolved to make this position: absolute and so Chrome now reflects that change.
This change shouldn't be noticeable because this element's containing block remains the snapshot containing block in either the absolute or fixed case. The only noticeable difference is in getComputedStyle.
active View Transition property on document
The View Transitions API lets developers start visual transitions between different states. The primary SPA entry point is startViewTransition(), which returns a transition object. This object contains several promises and functionality to track transition progress, and lets you manipulate transitions, for example, by skipping the transition or modifying its types.
From Chrome 142, developers no longer need to store this object. A document.activeViewTransition property represents this object, or null if no transition is ongoing.
This also applies to MPA transitions, where the object is only available through pageswap and pagereveal events. In this update, document.activeViewTransition is set to this object for the duration of the transition.
:target-before and :target-after pseudo-classes
These pseudo-classes match scroll markers that are before or after the active marker (matching :target-current) within the same scroll marker group, as determined by flat tree order:
- :target-before: Matches all scroll markers that precede the active marker in the flat tree order within the group.
- :target-after: Matches all scroll markers that follow the active marker in the flat tree order within the group.
Range syntax for style container queries and if()
Chrome enhances CSS style queries and the if() function by adding support for range syntax.
It extends style queries beyond exact value matching (for example, style(--theme: dark)). Developers can use comparison operators (such as > and <) to compare custom properties, literal values (for example, 10px or 25%), and values from substitution functions like attr() and env(). For a valid comparison, both sides must resolve to the same data type. It is limited to the following numeric types: , , , , , , and .
Interest Invokers (the interestfor attribute)
Chrome adds an interestfor attribute to and elements. This attribute adds "interest" behaviors to the element. When a user "shows interest" in the element, actions are triggered on the target element, for example, showing a popover. The user agent detects when a user "shows interest" in the element through methods such as holding the pointer over the element, hitting special hotkeys on the keyboard, or long-pressing the element on touchscreens. When interest is shown or lost, an InterestEvent fires on the target, which has default actions for popovers, such as showing and hiding the popover.
Mobile and desktop parity for select element rendering modes
By using the size and multiple attributes, the element can be rendered as an in-page listbox or a button with a popup. However, these modes don't have consistent availability across mobile and desktop Chrome. In-page listbox rendering is unavailable on mobile, and a button with a popup is unavailable on desktop when the multiple attribute is present.
This update adds the listbox to mobile and a multi-select popup to desktop, and ensures that opt-ins with the size and multiple attributes result in the same rendering mode across mobile and desktop. The changes are summarized as follows:
- When the size attribute has a value greater than 1, in-page rendering is always used. Mobile devices ignored this before.
- When the multiple attribute is set with no size attribute, in-page rendering is used. Mobile devices previously used a popup instead of an in-page listbox.
- When the multiple attribute is set with size=1, a popup is used. Desktop devices previously used an in-page listbox.
Support download attribute in SVG element
This feature introduces support for the download attribute on the SVGAElement interface in Chromium, aligning with the SVG 2 specification. The download attribute enables authors to specify that the target of an SVG hyperlink should be downloaded rather than navigated to, mirroring the behavior already supported in HTMLAnchorElement. This enhancement promotes interoperability across major browsers and ensures consistent behavior between HTML and SVG link elements, thereby improving developer experience and user expectations.
WebGPU: primitive_index feature
WebGPU adds a new optional capability that exposes a new WGSL shader built-in, primitive_index. It provides a per-primitive index to fragment shaders on supported hardware, similar to the vertex_index and instance_index built-ins. The primitive index is useful for advanced graphical techniques, such as virtualized geometry.
WebGPU: Texture formats tier1 and tier2
Extend GPU texture format support with capabilities like render attachment, blending, multisampling, resolve and storage_binding.
FedCM—Support showing third-party iframe origins in the UI
Before Chrome 142, FedCM always showed the top-level site in its UI.
This works well when the iframe is conceptually first-party (for example, foo.com might have an iframe foostatic.com, which is not meaningful to the user).
But if the iframe is actually third-party, it is better to show the iframe origin in the UI so users better understand who they are sharing their credentials with. For example, a photo editor might be embedded in a book publishing web app and might want to let users access files they stored before with the photo editor. This capability is now available.
Stricter *+json MIME token validation for JSON modules
Reject JSON module script responses whose MIME type's type or subtype contains non-HTTP token code points (for example, spaces) when matched with *+json. This aligns with the MIME Sniffing specification and other engines. It is part of the Interop2025 modules focus area.
Web Speech API contextual biasing
This feature enables websites to support contextual biasing for speech recognition by adding a recognition phrase list to the Web Speech API.
Developers can provide a list of phrases as well as updating them to apply a bias to the speech recognition models in favor of those phrases. This helps improve accuracy and relevance for domain-specific and personalized speech recognition.
Media session: add reason to enterpictureinpicture action details
Adds enterPictureInPictureReason to the MediaSessionActionDetails sent to the enterpictureinpicture action in the Media Session API. This allows developers to distinguish between enterpictureinpicture actions triggered explicitly by the user (e.g. from a button in the user agent) and enterpictureinpicture actions triggered automatically by the user agent due to the content becoming occluded.
Local network access restrictions
Chrome 142 restricts the ability to make requests to the user's local network, gated behind a permission prompt.
A local network request is any request from a public website to a local IP address or loopback, or from a local website (for example, an intranet) to loopback. Gating the ability for websites to perform these requests behind a permission mitigates the risk of cross-site request forgery attacks against local network devices such as routers, and reduces the ability of sites to use these requests to fingerprint the user's local network.
This permission is restricted to secure contexts. If granted, the permissions additionally relaxes mixed content blocking for local network requests (since many local devices are not able to obtain publicly trusted TLS certificates for various reasons).
Interoperable pointerrawupdate events exposed only in secure contexts
The PointerEvents specification restricted pointerrawupdate to secure contexts in 2020, hiding both the event firing and the global event listeners from insecure contexts. Through this feature, Chrome will match the updated specification and become interoperable with other major browsers.
Sticky user activation across same-origin renderer-initiated navigations
This feature preserves the sticky user activation state after a page navigates to another same-origin page. The lack of user activation in the post-navigation page prevents some use cases like showing virtual keyboards on auto-focus, and this has been a blocker for the developers who want to build MPAs over SPAs.
Note: Browser-initiated navigation requests (reload, history navigation, typed URL in address bar) are not covered by this feature.
Device Bound Session Credentials
A way for websites to securely bind a session to a single device.
It lets servers have a session be 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.
Original source - Sep 30, 2025
- Date parsed from source:Sep 30, 2025
- First seen by Releasebot:May 26, 2026
Chrome 141
Google Chrome ships Chrome 141 with a broad set of web platform upgrades, including new accessibility and navigation APIs, IndexedDB and cache performance gains, stricter Storage Access security, WebRTC and media updates, and expanded support for credentials, SVG, CSP, and WebAssembly.
Stable release date: September 30th, 2025
Unless otherwise noted, the following changes apply to Chrome 141 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
CSS
Custom property enumeration in getComputedStyle()
When iterating over window.getComputedStyle(element) in Chrome, there was a bug where it forgets to include any custom properties set on the element. Therefore, length() on the returned object forgets to account for the number of custom properties set. This bug is fixed from Chrome 141, aligning Chrome with Firefox and Safari.
DOM
ARIA Notify API
ariaNotify provides a JavaScript API that lets content authors tell a screen reader what to read.
ariaNotify improves reliability and developer control compared to ARIA live regions, allowing for announcing changes not tied to DOM updates. This enables more consistent and ergonomic accessibility experiences across dynamic web applications. Iframe usage of this feature can be controlled using the "aria-notify" permission policy.
Update hidden=until-found and details ancestor revealing algorithm
The specification recently had some small changes to the revealing algorithms for hidden=until-found and details elements to prevent the browser from getting stuck in an infinite loop, these are now shipping in Chrome.
JavaScript
Align implementations on when RTP stats should be created
RTP stats objects, of type "outbound-rtp" or "inbound-rtp" in this case, represents a WebRTC stream. The identifier of this stream is the SSRC (a number). This feature aligns with the specification on when these stats should be created.
Media
Support restrictOwnAudio
The restrictOwnAudio property is a captured display surfaces constrainable property. It changes the behavior of system audio in a captured display surface. The restrictOwnAudio constraint only has an effect if the captured display surface inherently includes system audio; otherwise, it will have no impact.
windowAudio for getDisplayMedia()
Extends DisplayMediaStreamOptions for getDisplayMedia() with a windowAudio option. This new option allows web applications to hint to the user agent whether the user should be offered the ability to share audio when a window is selected. windowAudio can be set to exclude, system, or window based on application preference.
A web application that is configured for audio capture but wants to limit system audio capture when a window is selected should set windowAudio: "exclude".
Miscellaneous
Support width and height as presentation attributes on nested elements
This feature supports applying width and height as presentation attributes on nested elements through both SVG markup and CSS. This dual approach provides even greater flexibility for developers, allowing them to manage and style SVG elements more efficiently within complex designs.
Digital Credentials API (presentation support)
Websites retrieve credentials from mobile wallet apps using a variety of mechanisms, such as custom URL handlers and QR code scanning. This feature lets sites request identity information from wallets using Android's IdentityCredential CredMan system. It is extensible to support multiple credential formats (such as ISO mDoc and W3C verifiable credential) and allows multiple wallet apps to be used. This update adds mechanisms to help reduce the risk of ecosystem-scale abuse of real-world identity.
Navigation API: deferred commit (precommit handlers)
Normally, when navigateEvent.intercept() is called, the intercepted navigation commits (and therefore the URL updates) as soon as the NavigateEvent finishes dispatch.
This feature adds a precommitHandler option to navigateEvent.intercept(), similar to handler. It defers the commit until that handler (and all other precommit handlers) are resolved, and it allows the handler to change the navigation's URL, info, status, and history handling behavior (push/replace).
FedCM: Alternative fields in account selection
Adds support for phone numbers and usernames, in addition to or instead of a user's full name and email address as identifiers for disambiguating accounts in the account selector. Also, makes these new fields available for websites to affect the disclosure text.
Network / Connectivity
No-Vary-Search support for the HTTP disk cache
Lets the HTTP disk cache use the No-Vary-Search response header to share a cache entry between URLs that differ only in the query parameters.
Developers can use No-Vary-Search to specify query parameters that have no impact on the user experience. A common example might be an ID used to track conversions. Supporting this header in the HTTP disk cache means that if the user later goes back to that same page without the conversion ID, it can be used or revalidated from the cache rather than having to be fetched from scratch from the network.
Previously, No-Vary-Search support shipped for the navigation prefetch cache, prefetch and prerender speculation rules, and prerender. This launch makes it generally available to any feature that uses the HTTP disk cache.
Offline / Storage
IndexedDB getAllRecords() and direction option for getAll() and getAllKeys()
This feature adds the getAllRecords() method to the IndexedDB IDBObjectStore and IDBIndex. It also adds a direction parameter to getAll() and getAllKeys(). This functionality lets certain read patterns be significantly faster when compared to the existing alternative of iteration with cursors. In one test, a workload from a Microsoft property showed a 350ms improvement.
The getAllRecords() method combines getAllKeys() and getAll() by enumerating both primary keys and values at the same time. For an IDBIndex, getAllRecords() also provides the record's index key in addition to the primary key and value.
Performance
Speculation rules: desktop "eager" eagerness improvements
On desktop, "eager" eagerness speculation rules prefetches and prerenders now trigger when users hover on a link for a shorter time than the "moderate" mouse hover time.
The previous behavior, of starting prefetch and prerenders as soon as possible, was the same as "immediate" eagerness. This new behavior is more useful as it better reflects the author's intent to be more eager than the "moderate" and less eager than "immediate".
Security
Strict Same Origin Policy for Storage Access API
Adjusts the Storage Access API semantics to strictly follow the Same Origin Policy with regard to security. That is, using document.requestStorageAccess() in a frame only attaches cookies to requests to the iframe's origin (not site) by default.
Note: The CookiesAllowedForUrls policy or Storage Access Headers may still be used to unblock cross-site cookies.
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.
WebRTC
WebRTC Encoded Transform (V2)
This API allows processing of encoded media flowing through an RTCPeerConnection. Chrome shipped an early version of this API in 2020. Since then, the specification has changed and other browsers have shipped the updated version (Safari in 2022 and Firefox in 2023). This launch aligns Chrome with the updated specification as part of Interop 2025.
This launch does not cover the generateKeyFrame method, which is still under discussion.
echoCancellationMode for getUserMedia()
Extends the echoCancellation behavior of the MediaTrackConstraints dictionary. This previously accepted true or false and now additionally accepts the values "all" and "remote-only". This lets clients modify echo cancellation behavior applied to audio tracks received from microphones, controlling how much of the user system playout (all, or only audio received from PeerConnections) is removed from the microphone signal.
Managed ChromeOS only
Permissions Policy for Device Attributes API
The new Permissions Policy enables restricting access to the Device Attributes API, which is available only for policy-installed kiosk web apps and policy-installed Isolated Web Apps, both only on managed ChromeOS devices.
Additionally, the feature is controlled by content settings. Two new policies are introduced: DeviceAttributesBlockedForOrigins and DefaultDeviceAttributesSetting, to complement previously introduced DeviceAttributesAllowedForOrigins. The feature is enabled by default for policy-installed kiosk web apps and policy-installed Isolated Web Apps on managed ChromeOS devices.
Origin trials
Local network access restrictions
Chrome 141 restricts the ability to make requests to the user's local network, gated behind a permission prompt.
This origin trial temporarily allows for access to resources on local networks to originate from non-secure contexts. This will give developers more time to migrate Local Network Access requests to originate from a secure context.
Proofreader API
A JavaScript API for proofreading input text with suggested corrections, backed by an AI language model.
Extend CSP script-src (also known as script-src-v2)
This feature adds new keywords to the script-src Content Security Policy (CSP) directive. This adds two new hash-based allowlisting mechanisms: script sources based on hashes of URLs and contents of eval() and eval()-like functions. This is sometimes referred to as script-src-v2, although it is backward compatible with the existing script-src, and uses the same directive.
Extending hashes to cover URL and eval() hashes lets developers set reasonably strict security policies by narrowly allowlisting scripts by their hashes even when script contents are subject to frequent changes, and known-safe contents of eval() without permitting unchecked use of eval() broadly.
The new keywords override host-based script-src when provided. This allows a single header to be compatible with browsers that both do or do not implement the new keywords.
WebAssembly custom descriptors
Lets WebAssembly store data associated with source-level types more efficiently in new "custom descriptor" objects. These custom descriptors can be configured with prototypes for the WebAssembly objects of that source-level type. This lets you install methods on a WebAssembly object's prototype chain and call them directly from JavaScript using normal method call syntax. The prototypes and methods can be configured declaratively using an imported built-in function.
Deprecations and removals
Stop sending Purpose: prefetch header from prefetches and prerenders
Stop sending Purpose: prefetch header from prefetches and prerenders
Now that prefetches and prerenders are using the Sec-Purpose header for prefetches and prerenders, we will move to remove the legacy Purpose: prefetch header that is still currently passed. This will be behind a feature flag/ kill switch to prevent compat issues.
This will be scoped to speculation rules prefetch, speculation rules prerender, and Chromium's non-standard .
Original source - Sep 2, 2025
- Date parsed from source:Sep 2, 2025
- First seen by Releasebot:May 26, 2026
Chrome 140
Google Chrome ships a broad stable update for Android, ChromeOS, Linux, macOS, and Windows with new CSS and web platform capabilities, better view transitions and scrolling behavior, stronger JavaScript and streams support, and added APIs for apps, workers, cookies, and crash reporting.
Unless otherwise noted, the following changes apply to Chrome 140 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
CSS typed arithmetic
Typed arithmetic lets you write expressions in CSS such as calc(10em / 1px) or calc(20% / 0.5em * 1px). This is useful in, for example, typography, as it lets you convert a typed value into an untyped one and reuse it for number accepting properties. Another use case is to multiply the unitless value by another type. For example, you can now cast from pixels to degrees.
Tracking bug #40768696 | ChromeStatus.com entry | Spec
CSS caret-animation property
Chromium supports animation of the caret-color property. However, when animated, the caret's default blinking behavior interferes with the animation.
The CSS caret-animation property has two possible values: auto and manual. auto means browser default (blinking), and manual means the developer controls the caret animation. Additionally, users who are disturbed by or have adverse reactions to blinking or flashing visuals can disable the blinking with a user stylesheet.
Tracking bug #329301988 | ChromeStatus.com entry | Spec
highlights From Point API
The highlightsFromPoint API lets developers interact with custom highlights. It detects which highlights exist at a specific point within a document. This interactivity is valuable for complex web features where multiple highlights may overlap or exist within shadow DOM. By providing precise point-based highlight detection, the API empowers developers to manage dynamic interactions with custom highlights more effectively. For example, developers can respond to user clicks or hover events on highlighted regions to trigger custom tooltips, context menus, or other interactive features.
Tracking bug #365046212 | ChromeStatus.com entry | Spec
ScrollIntoView container option
The ScrollIntoViewOptions container option allows developers to perform a scrollIntoView operation that only scrolls the nearest ancestor scroll container. For example, the following snippet only scrolls the scroll container of target to bring target into view, but won't scroll all of the scroll containers to the viewport:
target.scrollIntoView({container: 'nearest'});ChromeStatus.com entry | Spec
View transitions: Inherit more animation properties
Adds more animation properties to inherit through the view transition pseudo tree:
- animation-timing-function
- animation-iteration-count
- animation-direction
- animation-play-state
Tracking bug #427741151 | ChromeStatus.com entry | Spec
View transition pseudos inherit animation-delay.
In addition to the previous update, the animation-delay property is now inherited through the view transition pseudo tree.
ChromeStatus.com entry | Spec
Nested view transitions groups
This feature allows view transitions to generate a nested pseudo-element tree rather than a flat one. This allows the view transition to appear more in line with its original elements and visual intent. It enables clipping, nested 3D transforms, and proper application of effects like opacity, masking, and filters.
Tracking bug #399431227 | ChromeStatus.com entry | Spec
Propagate viewport overscroll-behavior from root
This change propagates overscroll-behavior from the root instead of the body.
The CSS working group resolved not to propagate properties from the to the viewport. Instead, properties of the viewport propagate from the root () element. As such, overscroll-behavior should propagate from the root element. However, Chrome has had a longstanding issue: it propagates overscroll-behavior from the rather than the root. This behavior is not interoperable with other browsers. This change makes Chrome comply with the specification and become interoperable with other implementations.
Tracking bug #41453796 | ChromeStatus.com entry | Spec
CSS counter() and counters() in alt text of content property
This feature adds the ability to use counter() and counters() in the alt text of the content property. This provides more meaningful information to improve accessibility.
Tracking bug #417488055 | ChromeStatus.com entry | Spec
CSS scroll-target-group property
The scroll-target-group property specifies whether the element is a scroll marker group container. It accepts one of the following values:
- 'none': The element does not establish a scroll marker group container.
- 'auto': The element establishes a scroll marker group container forming a scroll marker group containing all of the scroll marker elements for which this is the nearest ancestor scroll marker group container.
Establishing a scroll marker group container lets any anchor HTML elements with a fragment identifier that are inside such a container to be the HTML equivalent of ::scroll-marker pseudo-elements. The anchor element whose scroll target is currently in view can be styled using the :target-current pseudo-class.
Tracking bug #6607668 | ChromeStatus.com entry | Spec
Support font-variation-settings descriptor in @font-face rule
CSS allows developers to adjust a font's weight, width, slant, and other axes using the font-variation-settings property on individual elements. However, Chromium-based browsers lack support for this property within @font-face declarations. This feature supports the string-based syntax for font-variation-settings as defined in CSS Fonts Level 4. Invalid or unrecognized feature tags are ignored per specification. No binary or non-standard forms are supported. Variable fonts are becoming more widely adopted for both performance and typographic flexibility. Adding support for this descriptor in Chromium enhances control, reduces repetition, and supports a more scalable, modern approach to web typography.
Tracking bug #40398871 | ChromeStatus.com entry | Spec
DOM
ToggleEvent source attribute
The source attribute of a ToggleEvent contains the element that triggered the ToggleEvent to be fired, if applicable. For example, if a user clicks a element with the popovertarget or commandfor attribute set to open a popover, the ToggleEvent fired on the popover will have its source attribute set to the invoking .
ChromeStatus.com entry | Spec
Isolated Web Apps (IWAs)
Controlled Frame API (available only to IWAs)
This feature adds a Controlled Frame API available only to Isolated Web Apps (IWAs). Like similarly-named APIs on other platforms, Controlled Frame allows embedding all content, even third-party content that cannot be embedded in . Controlled Frame also allows controlling embedded content with a collection of API methods and events. For more information about Isolated Web Apps, see the Isolated Web Apps explainer.
Tracking bug #40191772 | ChromeStatus.com entry | Spec
JavaScript
Uint8Array to and from base64 and hex
Base64 is a common way to represent arbitrary binary data as ASCII. JavaScript has Uint8Arrays for binary data. However, it lacks a built-in mechanism to encode that data as base64, or to take base64 data and produce a corresponding Uint8Array. This feature adds the ability and methods for converting between hex strings and Uint8Arrays.
ChromeStatus.com entry | Spec
View transition finished promise timing change
The current finished promise timing happens within the rendering lifecycle steps. This means that code that runs as a result of promise resolution happens after the visual frame that removes the view transition has been produced. This can cause a flicker at the end of the animation if the script moves styles to preserve a visually similar state. This change resolves the issue by moving the view transition cleanup steps to run asynchronously after the lifecycle is completed.
Tracking bug #430018991 | ChromeStatus.com entry
Web APIs
ReadableStreamBYOBReader min option
This feature introduces a min option to the existing ReadableStreamBYOBReader.read(view) method. The method already accepts an ArrayBufferView into which it reads data, but currently does not guarantee how many elements are written before the read resolves. By specifying a min value, you can require that the stream wait until at least that many elements are available before resolving the read. This improves upon the current behavior, where reads may resolve with fewer elements than the view can hold.
Tracking bug #40942083 | ChromeStatus.com entry | Spec
Get Installed Related Apps API on desktop
The Get Installed Related Apps API (navigator.getInstalledRelatedApps) provides sites access to if their corresponding related applications are installed. Sites are only allowed to use this API if the application has an established association with the web origin.
The API was launched in Chrome 80 for Android. Additional support for web apps on Desktop was enabled in Chrome 140.
Docs | Tracking bug #895854 | ChromeStatus.com entry | Spec
Http cookie prefix
In some cases, it's important to distinguish on the server side between cookies set by the server and those set by the client. One such case involves cookies normally always set by the server. However, unexpected code (such as an XSS exploit, a malicious extension, or a commit from a confused developer) might set them on the client. This proposal adds a signal that lets servers make such a distinction. More specifically, it defines the __Http and __HostHttp prefixes, which ensure a cookie is not set on the client side using script.
Tracking bug #426096760 | ChromeStatus.com entry | Spec
Service worker
SharedWorker script inherits controller for blob script URL
The specification states that workers should inherit controllers for the blob URL. However, existing code allows only dedicated workers to inherit the controller; shared workers don't. This fixes Chrome's behavior to align with the specification. The SharedWorkerBlobURLFixEnabled enterprise policy controls this feature.
Tracking bug #324939068 | ChromeStatus.com entry | Spec
Add ServiceWorkerStaticRouterTimingInfo
This feature adds timing information for the ServiceWorker Static routing API, exposed in the navigation timing API and resource timing API for developer use. ServiceWorker provides timing information to mark certain points in time.
This feature adds two pieces of Static routing API-relevant timing information:
- RouterEvaluationStart: Time to start matching a request with registered router rules.
- CacheLookupStart: Time to start looking up the cache storage if the source is "cache".
Additionally, this feature adds two pieces of router source information: the matched router source and the final router source.
Tracking bug #41496865 | ChromeStatus.com entry | Spec
Origin trials
Enable incoming call notifications
This feature extends the Notifications API to allow installed PWAs to send incoming call notifications—notifications with call-styled buttons and a ringtone. This extension helps VoIP web apps create more engaging experiences by making it easier for users to recognize and answer calling notifications. Additionally, this feature helps bridge the gap between native and web implementations of apps that have them both.
Origin Trial | Tracking bug #detail?id=1383570 | ChromeStatus.com entry | Spec
Crash Reporting key-value API
This feature introduces a new key-value API, tentatively window.crashReport, backed by a per-document map that holds data appended to crash reports.
The data placed in this API's backing map is sent in the CrashReportBody if any renderer process crashes occur on the site. This lets developers debug what specific state in their application might be causing a given crash.
Origin Trial | Tracking bug #400432195 | ChromeStatus.com entry | Spec
Add the clipboardchange event
Add the clipboardchange event
The clipboardchange event fires whenever a web app or any other system application changes the system clipboard contents. This allows web apps like remote desktop clients to keep their clipboards synchronized with the system clipboard. It provides an efficient alternative to polling the clipboard with JavaScript for changes.
Origin Trial | Tracking bug #41442253 | ChromeStatus.com entry | Spec
Enable SharedWorker on Android
The long-standing demand for SharedWorker support on Android stems from several needs expressed by web developers:
- Resource sharing and efficiency: Developers aim to share a single WebSocket or Server-Sent Events (SSE) connection across multiple tabs, thereby conserving resources.
- Persistent resource management: A requirement to share and persist resources across tabs, particularly for technologies like WASM-based SQLite.
- Closing a feature gap: Other major mobile browsers, including Safari on iOS and Firefox on Android, already support SharedWorker, making Chrome on Android the last major browser to address this gap.
Origin Trial | ChromeStatus.com entry | Spec
Removals
Stop sending Purpose: prefetch header from prefetches and prerenders
Prefetches and prerenders now use the Sec-Purpose header, therefore the legacy Purpose: prefetch header is being removed.
This will be scoped to speculation rules prefetch, speculation rules prerender, , and Chromium's non-standard .
Tracking bug #420724819 | ChromeStatus.com entry | Spec
Deprecate special font size rules for H1 within some elements
The HTML spec contains a list of special rules for
tags nested within , , , or tags:
These special rules are deprecated, because they cause accessibility issues. Namely, they visually reduce the font size for nested
elements so that they "look" like
elements, but nothing in the accessibility tree reflects this demotion.
Tracking bug #394111284 | ChromeStatus.com entry | Spec
Original source - Aug 5, 2025
- Date parsed from source:Aug 5, 2025
- First seen by Releasebot:May 26, 2026
Chrome 139
Google Chrome releases a broad Stable update with major CSS, WebGPU, WebXR, WebAuthn, and on-device AI improvements, plus privacy and performance upgrades. It also adds new web APIs, expands payment and web app capabilities, and removes support for macOS 11.
Stable release date: August 5th, 2025
Unless otherwise noted, the following changes apply to Chrome 139 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
Want just the highlights? Check out New in Chrome 139.
CSS and UI
Short-circuiting var() and attr()
When the fallback is not taken, var() and attr() functions evaluate without looking for cycles in that fallback.
Support font-feature-settings descriptor in @font-face rule
This feature supports the string-based syntax for font-feature-settings as defined in CSS Fonts Level 4. Invalid or unrecognized feature tags will be ignored per specification. No binary or non-standard forms are supported.
As OpenType fonts become more widely adopted, this enhancement will improve typographic control, reduce redundancy, and support a more scalable, modern approach to web design.
CSS custom functions
Custom functions are similar to custom properties, but instead of returning a single, fixed value, they return values based on other custom properties, parameters, and conditionals.
Continue running transitions when switching to initial transition value
When the transition related properties change, they are only supposed to affect newly started transitions. This means that if you change the transition properties, unless you also change the properties which have active transition animations, those transition animations will continue with the previously specified duration and easing.
Chrome incorrectly canceled transitions when the transition property was set to none, even though it doesn't cancel them if you only change the transition-duration. This change makes Chrome consistent with Safari and Firefox, allowing active transitions to continue running, until their property value changes triggering a new transition update.
Corner shaping (corner-shape, superellipse, squircle)
Enable styling corners, on top of the existing border-radius, by expressing the shape and curvature of the corner as a superellipse.
This allows shapes like squircles, notches, and scoops, and animating between them.
Add font-width property and descriptor and make font-stretch a legacy alias
Note: Previously the font-width property was added to these release notes. THis was an error as the property did not ship.
Support async attribute for SVG
Original source - Jun 24, 2025
- Date parsed from source:Jun 24, 2025
- First seen by Releasebot:May 26, 2026
Chrome 138 Bookmark collections drop down LLM Tools
Google Chrome adds Chrome 138 stable features including new CSS math and sizing functions, Web Serial over Bluetooth on Android, foldable viewport segments, AI translation, language detection and summarization APIs, WebCodecs orientation metadata, and security and cache updates.
Unless otherwise noted, the following changes apply to Chrome 138 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
CSS and UI
CSS Sign-Related Functions: abs(), sign()
CSS Sign-Related Functions: abs(), sign() compute various functions related to the sign of their argument. The abs(A) function contains one calculation A, and returns the absolute value of A, as the same type as the input: if A's numeric value is positive or 0⁺, just A again; otherwise -1 * A. The sign(A) function contains one calculation A, and returns -1 if A's numeric value is negative, +1 if A's numeric value is positive, 0⁺ if A's numeric value is 0⁺, and 0⁻ if A's numeric value is 0⁻. The return type is a , made consistent with the type of the input calculation.
Interpolation progress functional notation: CSS progress() function
The progress() functional notation returns a value representing the position of one calculation (the progress value) between two other calculations (the progress start value and progress end value). The progress() function is a math function.
CSS sibling-index() and sibling-count()
The sibling-index() and sibling-count() functions can be used as integers in CSS property values to style elements based on their position among its siblings, or the total number of siblings respectively. These functions can be used directly as integer values, but more interestingly inside calc() expressions.
CSS stretch sizing keyword
A keyword for CSS sizing properties (for example, width and height) that lets elements grow to exactly fill their containing block's available space. It is similar to '100%', except the resulting size is applied to the element's margin box instead of the box indicated by box-sizing. Using this keyword lets the element keep its margins while still being as large as possible. An unprefixed version of -webkit-fill-available.
CSS env variable for OS-level font scale
Exposes a user's preferred font scale to CSS. Without this, it's not practical for a page to detect if the user has changed their preferred font size using the Operating System's preferences. This CSS environment variable will reflect the scale chosen by the user.
Devices
Web serial over Bluetooth on Android
This feature lets web pages and web apps connect to serial ports over Bluetooth on Android devices. Chrome on Android now supports Web Serial API over Bluetooth RFCOMM. Existing enterprise policies (DefaultSerialGuardSetting, SerialAllowAllPortsForUrls, SerialAllowUsbDevicesForUrls, SerialAskForUrls, and SerialBlockedForUrls) on other platforms are enabled in future_on states for Android. All policies except SerialAllowUsbDevicesForUrls will be enabled after the feature is enabled. SerialAllowUsbDevicesForUrls will be enabled in a future launch after Android provides system level support of wired serial ports.
Viewport Segments Enumeration API
The Viewport Segments API allows developers to adapt their web layout to target foldable devices. The viewport segments defines the position and dimensions of a logically separate region of the viewport. Viewport segments are created when the viewport is split by one or more hardware features (such as a fold or a hinge between separate displays) that act as a divider; segments are the regions of the viewport that can be treated as logically distinct by the developer.
JavaScript
Update QuotaExceededError to a DOMException derived interface
Previously, when the web platform wants to tell you when you've exceeded quota, it will use DOMException with the specific name property set to QuotaExceededError. However this does not allow carrying additional information. This proposes removing "QuotaExceededError" from the list of built-in DOMException names, and instead creates a class name QuotaExceededError from the list of built-in DOMException and has the additional optional properties quota and requested. We propose all instances of specs that throw "QuotaExceededError" DOMExceptions get upgraded to instead throw QuotaExceededErrors. For now, such specs would leave the quota and requested properties at their default value of null, but they could eventually upgrade to include that data, if it's useful for their use case (and isn't, e.g., a privacy leak).
Web APIs
Translator API
A JavaScript API to provide language translation capabilities to web pages. Browsers are increasingly offering language translation to their users. Such translation capabilities can also be useful to web developers. This is especially the case when browser's built-in translation abilities cannot help. An enterprise policy (GenAILocalFoundationalModelSettings) is available to disable the underlying model downloading which would render this API unavailable.
Language Detector API
A JavaScript API for detecting the language of text, with confidence levels. An important supplement to translation is language detection. This can be combined with translation, for example, taking user input in an unknown language and translating it to a specific target language. Browsers today often already have language detection capabilities, and we want to offer them to web developers through a JavaScript API, supplementing the translation API. An enterprise policy (GenAILocalFoundationalModelSettings) is available to disable the underlying model downloading which would render this API unavailable.
Summarizer API
Summarizer API is a JavaScript API for producing summaries of input text, backed by an AI language model. Browsers and operating systems are increasingly expected to gain access to a language model. By exposing this built-in model, we avoid every website needing to download their own multi-gigabyte language model, or send input text to third-party APIs. The summarizer API in particular exposes a high-level API for interfacing with a language model in order to summarize inputs for a variety of use cases (GitHub), in a way that does not depend on the specific language model in question. An enterprise policy (GenAILocalFoundationalModelSettings) is available to disable the underlying model downloading which would render this API unavailable.
Escape < and > in attributes on serialization
Escape < and > in values of attributes on serialization. This mitigates the risk of mutation XSS attacks, which occur when value of an attribute is interpreted as a start tag token after being serialized and re-parsed.
Crash Reporting API: is_top_level and visibility_state
This feature adds is_top_level and visibility_state string fields to the crash reporting API body that gets sent to the default reporting endpoint for crash reports.
Fire the pushsubscriptionchange event upon resubscription
Fire the pushsubscriptionchange event in service workers when an origin for which a push subscription existed in the past, but which was revoked because of a permission change (from granted to deny/default), is re-granted notification permission. The event will be fired with an empty oldSubscription and newSubscription.
Multimedia
Add support for video frame orientation metadata to WebCodecs
Introduces rotation: int and flip: bool values to various video related interfaces in WebCodecs so that developers can work with frame sources that have orientation (For example, Android cameras, certain media). The VideoFrame interface grows the ability to create VideoFrames with arbitrary rotation and flip as well as accessors for this information on the VideoFrame object. The VideoDecoderConfig object gains rotation and flip fields that are emitted on decoded VideoFrame objects automatically. The VideoEncoder class gains mechanisms for passing rotation and flip information from encode() to the VideoDecoderConfig emitted as part of EncodedVideoChunkMetadata. If encode() is called with frames with different orientations a nonfatal exception will be thrown. configure() may be used to reset the allowed orientation.
Performance
Add prefetchCache and prerenderCache to Clear-Site-Dataheader
Two new values for the Clear-Site-Data header to help developers target clearing the prerender and prefetch cache: "prefetchCache" and "prerenderCache".
Speculation rules: target_hint field
This extends speculation rules syntax to allow developers to specify the target_hint field. This field provides a hint to indicate a target navigable where a prerendered page will eventually be activated. For example, when _blank is specified as a hint, a prerendered page can be activated for a navigable opened by window.open(). The field has no effect on prefetching. The specification allows this field to accept any strings that are valid as navigable target name or keyword as the value, but this launch supports only one of "_self" or "_blank" strings. If the hint is not specified, it's treated like "_self" is specified.
Security
Integrity Policy for scripts
Subresource-Integrity (SRI) enables developers to make sure the assets they intend to load are indeed the assets they are loading. But there's no current way for developers to be sure that all of their scripts are validated using SRI. The Integrity-Policy header gives developers 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 violation report.
Service Worker
ServiceWorker support for Speculation Rules Prefetch
This feature enables ServiceWorker-controlled prefetches, that is a speculation rules prefetch to URLs controlled by a Service Worker. Previously, the prefetch is cancelled upon detecting a controlling Service Worker, thus subsequent navigation to the prefetch target is served by the non-prefetch path. This feature will enable the prefetch request to go through the Service Worker's fetch handler and the response with the Service Worker interception is cached in the prefetch cache, resulting in a subsequent navigation being served by the prefetch cache. Use the enterprise policy PrefetchWithServiceWorkerEnabled to control this feature.
Deprecations and removals
WebGPU: Deprecate GPUAdapter isFallbackAdapter attribute
Deprecates the GPUAdapter isFallbackAdapter boolean attribute from WebGPU, which is redundant with the GPUAdapterInfo isFallbackAdapter boolean attribute. This upcoming removal is a minor breaking change as support for fallback adapters has not yet been implemented in any browser, thereby resulting in both isFallbackAdapter attributes consistently returning a falsy value.
Deprecate asynchronous range removal for Media Source Extensions
The Media Source standard long ago changed to disallow ambiguously defined behavior involving asynchronous range removals:
- SourceBuffer.abort() no longer aborts SourceBuffer.remove() operations.
- Setting MediaSource.duration can no longer truncate currently buffered media.
Exceptions will be thrown in both of these cases now. Safari and Firefox have long shipped this behavior, Chromium is the last browser remaining with the old behavior. Use counters show that around 0.001%-0.005% of page loads hit the deprecated behavior. If a site hits this issue, playback may now break. Usage of abort() cancelling removals is increasing, so it's prudent to resolve this deprecation before more incompatible usage appears.
Original source - May 27, 2025
- Date parsed from source:May 27, 2025
- First seen by Releasebot:May 26, 2026
Chrome 137
Google Chrome releases Chrome 137 Stable with broad web platform upgrades, including new CSS and SVG capabilities, Selection API and WebAssembly improvements, WebGPU enhancements, stronger privacy protections, enterprise IP reporting, and new origin trial APIs for AI writing and rewriting.
Stable release date: May 27th, 2025
Unless otherwise noted, the following changes apply to Chrome 137 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
CSS and UI
CSS if() function
CSS if() function
CSS if() function provides a concise way to express conditional values. It accepts a series of condition-value pairs, delimited by semicolons. The function evaluates each condition sequentially and returns the value associated with the first true condition. If none of the conditions evaluate to true, the function returns an empty token stream. This lets you express complex conditional logic in a simple and concise way.
Example:
div { color: var(--color); background-color: if(style(--color: white): black; else: white); } .dark { --color: black; } .light { --color: white; }CSS reading-flow, reading-order properties
The reading-flow CSS property controls the order in which elements in a flex, grid, or block layout are exposed to accessibility tools and focused using tab keyboard focus navigation.
The reading-order CSS property allows authors to manually-override the order within a reading flow container. It is an integer with default value of 0.
Learn more about these properties in Use CSS reading-flow for logical sequential focus navigation, and try out some examples.
Ignore letter spacing in cursive scripts
This feature adds logic to ignore the letter-spacing setting for cursive scripts as specified by the developer, in line with the specification, to ensure that letter spacing does not disrupt word structure and aims to produce better user experience for users relying on cursive scripts.
With this feature, Chrome ensures that cursive scripts will be readable and properly spaced, even if the fonts don't have advanced typographic features.
The scripts this applies to in Chromium are Arabic, Hanifi Rohingya, Mandaic, Mongolian, N'Ko, Phags Pa, and Syriac as these scripts are considered cursive as per the specification.
Selection API getComposedRanges and direction
This feature ships two new API methods for the Selection API:
- Selection.direction which returns the selection's direction as either none, forward, or backward
- Selection.getComposedRanges() which returns a list of 0 or 1 composed StaticRange
A composed StaticRange is allowed to cross shadow boundaries, which a normal Range cannot.
For example:
const range = getSelection().getComposedRanges({shadowRoots: [root]});If the selection crosses a shadow root boundary that isn't provided in the shadowRoots list, then the endpoints of the StaticRange will be rescoped to be outside that tree. This makes sure Chrome doesn't expose unknown shadow trees.
Support offset-path: shape()
Support offset-path: shape(), to allow using responsive shapes to set the animation path.
Support the transform attribute on SVGSVGElement
This feature enables the application of transformation properties—such as scaling, rotation, translation, and skewing—directly to the root element using its transform attribute. This enhancement lets you manipulate the entire SVG coordinate system or its contents as a whole, providing greater flexibility in creating dynamic, responsive, and interactive vector graphics. By supporting this attribute, the element can be transformed without requiring additional wrapper elements or complex CSS workarounds, streamlining the process of building scalable and animated web graphics.
System accent color for accent-color property
This lets you use the operating system's accent color for form elements. By using the accent-color CSS property, you can ensure that form elements such as checkboxes, radio buttons, and progress bars automatically adopt the accent color defined by the user's operating system. This has been supported on macOS since 2021, and is now supported on Windows and ChromeOS.
Allow to reference an external document's root element by omitting the fragment.
This feature streamlines the SVG element by loosening referencing requirements. Before Chrome 137, you had to explicitly reference fragments within the SVG document. If no fragment ID is given won't be able to resolve the target and nothing will be rendered or referred.
For example: a element referencing an external file with fragment identifier:
<svg> <use xlink:href="myshape.svg#icon"></use> </svg>In this example, #icon is the fragment identifier pointing to an element with id="icon" within myshape.svg.
Without a fragment identifier:
<svg> <use xlink:href="myshape.svg"></use> </svg>With this feature, omitting fragments or just giving the external svg file name will automatically reference the root element, eliminating the need for you to alter the referenced document just to assign an ID to the root. This enhancement simplifies this manual editing process and improves efficiency.
Canvas floating point color types
Introduces the ability to use floating point pixel formats (as opposed to 8-bit fixed point) with CanvasRenderingContext2D, OffscreenCanvasRenderingContext2D, and ImageData.
This is necessary for high precision applications (for example, medical visualization), high dynamic range content, and linear working color spaces.
view-transition-name: match-element
The match-element value generates a unique ID based on the element's identity and renames the same for this element. This is used in Single Page App cases where the element is being moved around and you want to animate it with a view transition.
Payments
Align error type thrown for payment WebAuthn credential creation: SecurityError becomes NotAllowedError
Correct the error type thrown during WebAuthn credential creation for payment credentials. Due to a historic specification mismatch, creating a payment credential in a cross-origin iframe without a user activation would throw a SecurityError instead of a NotAllowedError, which is what is thrown for non-payment credentials.
This is a breaking change, albeit a niche one. Code that previously detected the type of error thrown (for example, e instanceof SecurityError) is affected. Code that just generally handles errors during credential creation (for example, catch (e)) will continue to function correctly.
Web APIs
Blob URL Partitioning: Fetching/Navigation
As a continuation of Storage Partitioning, Chrome has implemented 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, Chrome now enforces noopener 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.
Note: This change can be temporarily reverted by setting the PartitionedBlobURLUsage policy. The policy will be deprecated when the other storage partitioning related enterprise policies are deprecated.
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 to identify the cause of the unresponsiveness and fix it more easily. The JavaScript call stack is included in the crash reporting API when the reason is unresponsive.
Document-Isolation-Policy
Document-Isolation-Policy lets a document enable crossOriginIsolation for itself, without having to deploy COOP or COEP, and regardless of the crossOriginIsolation status of the page. The policy is backed by process isolation. Additionally, the document non-CORS cross-origin subresources will either be loaded without credentials or will need to have a CORP header.
Ed25519 in web cryptography
This feature adds support for Curve25519 algorithms in the Web Cryptography API, namely the signature algorithm Ed25519.
HSTS tracking prevention
Mitigates user tracking by third-parties using 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 in order to track users across the web.
WebAssembly
JavaScript promise integration
JavaScript Promise Integration (JSPI) is an API that allows WebAssembly applications to integrate with JavaScript Promises.
It allows a WebAssembly program to act as the generator of a Promise, and it allows the WebAssembly program to interact with Promise-bearing APIs.
In particular, when an application uses JSPI to call a Promise-bearing (JavaScript) API, the WebAssembly code is suspended; and the original caller to the WebAssembly program is given a Promise that will be fulfilled when the WebAssembly program finally completes.
WebAssembly Branch Hints
Improves the performance of compiled WebAssembly code by informing the engine that a particular branch instruction is very likely to take a specific path.
This allows the engine to make better decisions for code layout (improving instruction cache hits) and register allocation.
WebGPU
GPUTextureView for externalTexture binding
A GPUTextureView is now allowed to be used for an externalTexture binding when creating a GPUBindGroup.
copyBufferToBuffer overload
The GPUCommandEncoder copyBufferToBuffer() method now includes a simpler way to copy entire buffers using a new overload with optional offsets and size parameters.
Enterprise
IP address logging and reporting
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 through the Chrome Enterprise Reporting connector.
This is available for Chrome Enterprise Core customers.
Origin trials
Full frame rate render blocking attribute
Adds a new render blocking token full-frame-rate to the blocking attributes. When the renderer is blocked with the full-frame-rate token, the renderer will work at a lower frame rate so as to reserve more resources for loading.
Pause media playback on not-rendered iframes
Adds a media-playback-while-not-rendered permission policy to allow embedder websites to pause media playback of embedded iframes which aren't rendered—that is, have their display property set to none. This should allow developers to build more user-friendly experiences and to also improve the performance by letting the browser handle the playback of content that is not visible to users.
Rewriter API
The Rewriter API transforms and rephrases input text in requested ways, backed by an on-device AI language model. Developers may use this API to remove redundancies within a text in order to fit into a word limit, rephrase messages to suit the intended audience or to be more constructive if a message is found to use toxic language, rephrasing a post or article to use simpler words and concepts and more.
Writer API
The Writer API can be used for writing new material given a writing task prompt, backed by an on-device AI language model. Developers will be able to use this API to generate textual explanations of structured data, composing a post about a product based on reviews or product description, expanding on pro and con lists into full views and more.
Original source - Apr 29, 2025
- Date parsed from source:Apr 29, 2025
- First seen by Releasebot:May 26, 2026
Chrome 136
Google Chrome ships Chrome 136 with broad web platform upgrades, stronger privacy protections, richer CSS and canvas support, new media and WebRTC capabilities, Fluent scrollbars on Windows and Linux, and FedCM and WebAuthn updates for modern sign-in and passkey flows.
Unless otherwise noted, the following changes apply to Chrome 136 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
HTML and DOM
Language support for Canvas Text Drawing Styles
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 developers direct control over the language for the text drawing and metrics.CSS and UI
The dynamic-range-limit property
Enables a page to limit the maximum brightness of HDR content.
Partition :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.
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 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.
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.
Rename string attr() type to raw-string
The CSS Working Group has resolved to replace string attr() type with raw-string.
Therefore from Chrome 136 attr(data-foo string) becomes 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.
Web APIs
Dispatch click events to captured pointer
If a pointer is captured while the pointerup event is being dispatched, the click event is now 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 attaching of information about which functions should be eager parsed and compiled in JavaScript files.
The information is encoded as magic comments.
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 using 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.
Protected audience: text conversion helpers
Protected Audience bidding and scoring scripts that interface with WebAssembly need to efficiently convert string-typed data to (and from) byte arrays (for example, to pass strings into and out of WebAssembly with the "memory" ArrayBuffer). This provides two standalone functions, protectedAudience.encodeUtf8, and protectedAudience.decodeUtf8 to perform these tasks about an order of magnitude more efficiently than doing it in JavaScript.
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.
Speculation rules: tag field
This 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.
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.Privacy and security
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.
Reduce fingerprinting in Accept-Language header information
Reduces the amount of information the Accept-Language header value string exposes in HTTP requests and in navigator.languages. Instead of sending a full list of the user's preferred languages on every HTTP request, Chrome now sends the user's most preferred language in the Accept-Language header.
Identity
FedCM updates
Allows FedCM to show multiple identity providers in the same dialog, by having all providers in the same get() call. This provides developers with a convenient way to present all supported identity providers to users.
Chrome 136 also removes support for add another account 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.
Web authentication conditional create (passkey upgrades)
WebAuthn conditional create requests let websites upgrade existing password credentials to a passkey.
Images and media
AudioContext Interrupted State
Adds an "interrupted" state to AudioContextState. This new state lets the User Agent pause playback during exclusive audio access (VoIP) or when a laptop lid is closed.
Captured surface control
A Web API that lets web applications:
- Forward wheel events to a captured tab.
- Read and change the zoom level of a captured tab.
CapturedSurfaceResolution
Expose pixel ratio of the captured surface while screensharing.
This feature helps applications to conserve their system resources or adapt the quality over bandwidth trade-off according to the physical and logical resolutions of the captured surface.
H265 (HEVC) codec support in WebRTC
After this change, HEVC will join VP8, H.264, VP9, and AV1 as supported codecs in WebRTC. Support will be queryable using the MediaCapabilities API.
H26x Codec support updates for MediaRecorder
Chromium's 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 Chromium M130. 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.
Use DOMPointInit for getCharNumAtPosition, isPointInFill, isPointInStroke
This change brings Chromium code in line with the latest W3C specification for SVGGeometryElement and SVGPathElement in terms of use of DOMPointInit over SVGPoint for getCharNumAtPosition, isPointInFill, isPointInStroke.
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.
Browser changes
Fluent scrollbars
This feature modernizes the Chromium 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 Chromium's Linux scrollbar design has historically been aligned with what ships on Windows. How to expose enabling overlay Fluent scrollbars is still being decided.
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.
Enable web applications to 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 instance, 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.
A new confidence field on the PerformanceNavigationTiming object will enable developers to discern if the navigation timings are representative for their web application.
Update of Canvas text rendering implementation
This is not a web-exposed change.
The implementation of CanvasRenderingContext2D measureText(), fillText(), and strokeText() has a drastic change. This might affect performance, so we'd like to run an origin trial so canvas-heavy applications can try out the new implementation.
Deprecations and removals
Remove HTMLFencedFrameElement.canLoadOpaqueURL()
The HTMLFencedFrameElement method canLoadOpaqueURL() was replaced with navigator.canLoadAdAuctionFencedFrame() in 2023, and calling it has resulted in a deprecation console warning ever since pointing to the new API. The method is removed from Chrome 136.
Original source
Curated by the Releasebot team
Releasebot is an aggregator of official product update announcements from hundreds of software vendors and thousands of sources.
Our editorial process involves the manual review and audit of release notes procured with the help of automated systems.
Similar to Google Chrome with recent updates:
- Claude updates98 release notes · Latest Jun 9, 2026
- Claude Code updates343 release notes · Latest Jun 11, 2026
- ChatGPT updates176 release notes · Latest Jun 10, 2026
- Anthropic updates46 release notes · Latest Jun 9, 2026
- Codex updates182 release notes · Latest Jun 11, 2026
- OpenAI updates98 release notes · Latest Jun 8, 2026