Chrome Release Summary

Chrome version: 151, 150, 149, 148, 147, 146, 145, 144, 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0

Chrome 148

Enabled (20) | Origin Trial (9) | Behind a flag (8) | Deprecated (0) | Removed (0)

Enabled by default in 148

This release of Chrome had 20 new features.

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: <style> #container { container-name: --foo; } @container --foo { input { background-color: green; } } <style> <div id="container"> <div><input></div> </div> Previously, @container required some query in addition to the name. #

This feature was specified in this Spec.

Content type in Resource Timing

Adds the contentType field to PerformanceResourceTiming to hold a string corresponding to the content type of the fetched resource as returned by the server. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://github.com/abinpaul1/resource-timing/blob/explainer-content-type/Explainers/Content-Type.md#api-changes-and-example-code

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. #

This feature was specified in this 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 allows pages to perform asynchronous work that requires JavaScript after a page unloads, without needing to rely on a service worker. #

This feature was specified in this Spec.

Get Secure Payment Confirmation Capabilities

Adds a new static method to the Payment Request that allows web developers to get the capabilities of the browser's implementation of Secure Payment Confirmation. This helps web developers to easily 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. #

This feature was specified in this Spec.

Resources

Docs: https://www.w3.org/wbs/83744/spc-mvp-2025/resultshttps://github.com/w3c/secure-payment-confirmation/issues/290#issuecomment-3806454419https://www.w3.org/2026/01/29-wpwg-minutes.html#3919https://www.w3.org/2026/02/26-wpwg-minutes.html#bbkdetect

Samples: https://rsolomakhin.github.io/pr/spc-capabilities

IDNA ContextJ rules

IDNA is the mechanism for non-ASCII characters in domain names, encoding a URL like http://네이버.한국/ as http://xn--950bt9s8xi.xn--3e0b707e/ (a redirect to naver.com). The processing is defined by https://www.unicode.org/reports/tr46/#Processing and is invoked by https://url.spec.whatwg.org/#idna. The URL spec sets the CheckJoiners flag, which enables the ContextJ rules in IDNA2008: https://www.rfc-editor.org/rfc/rfc5892.html#appendix-A.1 https://www.rfc-editor.org/rfc/rfc5892.html#appendix-A.2 This disallows ZWNJ (U+200C ZERO WIDTH NON-JOINER) and ZWJ (U+200D ZERO WIDTH JOINER) in most places in URLs. The implementation is to simply pass the UIDNA_CHECK_CONTEXTJ option to ICU, where this rule is implemented: https://source.chromium.org/chromium/chromium/src/+/main:third_party/icu/source/common/uts46.cpp;l=1137-1204;drc=8a1988938d4298fbe8fb499b1a59fe4b04a21b15 This would fix over 200 subtests in WPT relating to IDNA, which already pass in Firefox and Safari: https://chromium-review.googlesource.com/c/chromium/src/+/6990929 https://wpt.fyi/results/url/IdnaTestV2.window.html All of the IdnaTestV2 cases that would regress from shipping ICU 77 (https://chromestatus.com/feature/5143313833000960) would also be fixed again by this change. #

This feature was specified in this Spec.

Lazy loading for video and audio elements

Adds the loading attribute to <video> and <audio> elements, allowing developers to defer media resource loading until the element is near the viewport using loading="lazy". This matches the existing lazy loading behavior for <img> and <iframe> elements, improving page load performance and reducing data usage. CL: https://chromium-review.googlesource.com/c/chromium/src/+/7511253 #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://scottjehl.com/posts/lazy-media

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. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://googlechrome.github.io/samples/pwa-testing/manifest-localization-test

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. Support for this feature in Blink means, activating a compile flag in HarfBuzz that processes the version 2 additional fields of the avar table to extend axis variations processing. Avar2 works by using the same familiar concepts of font variations, but applying the variable delta values to the design axis specifications itself. Plus, it allows doing this over a range of multiple axes. As an example, it allows the creation of "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 allows coordinating 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. #

This feature was specified in this 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 [1]. 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. [1] Pointer event spec definition of pointer stream suppression: https://w3c.github.io/pointerevents/#suppressing-a-pointer-event-stream #

This feature was specified in this Spec.

Predictable reported storage quota

Chrome 138 will introduce a predictable storage quota from StorageManager's estimate API for sites that do not have unlimited storage permissions. It is possible to detect a user's browsing mode via the reported storage quota because the storage space made available is significantly smaller in incognito mode than in regular mode. This is a mitigation that prevents detection of a user's browsing mode via the storage API by reporting an artificial quota, equal to usage + min(10 GiB, disk rounded up to the nearest 1 GiB), in all browsing modes for sites with limited storage permissions. Sites with unlimited storage permissions will be unaffected. Enforced quota will also be unaffected. #

Prompt API

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 regex 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. This API has been shipped in [Chrome Extensions](https://chromewebstore.google.com/category/extensions). An enterprise policy [GenAILocalFoundationalModelSettings](https://chromeenterprise.google/policies/#GenAILocalFoundationalModelSettings) is available to disable the underlying model downloading, which would render this API unavailable. Enterprise admins can also set the [BuiltInAIAPIsEnabled](https://chromeenterprise.google/policies/#BuiltInAIAPIsEnabled) policy to block Built-In AI API usage, while still permitting other on-device GenAI features. Language support log: - Chrome M139 and earlier only supported English ('en') - Chrome M140 added support for Spanish and Japanese ('es' and 'ja') #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://chrome.dev/web-ai-demos/prompt-api-playgroundhttps://chrome.dev/web-ai-demos/prompt-api-weatherhttps://ai.etiennenoel.com/prompt-apihttps://ai.etiennenoel.com/multimodal-prompt-apihttps://www.clarkduvall.com/ai

SharedWorker on Android

For a long time, SharedWorker has been disabled on Android due to concerns about its unpredictable process lifecycle. We believed that SharedWorker instances might terminate unexpectedly, without noticing to users or web developers, which we considered unacceptable. However, a recent discussion on GitHub (https://github.com/whatwg/html/issues/11205) suggests that the unpredictable nature of SharedWorker's process lifecycle might not be as significant an issue as we once thought. Based on this, we plan to re-enable SharedWorker on Android while simultaneously investigating this behavior to ensure a stable and reliable experience. #

This feature was specified in this 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, as it allows eliminating the current rule if some condition is not met: ``` div { display: if(style(--layout: fancy): grid; else: revert-rule); } ``` #

This feature was specified in this 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. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/w3c/webauthn/wiki/Explainer:-WebAuthn-immediate-mediation

Samples: https://deephand.github.io/webauthn-immediate-demo

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 and/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 via a serial connection. Documentation: https://web.dev/serial/ Specification: https://wicg.github.io/serial/ #

WebGPU: `linear_indexing` feature

Functionality added 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). #

This feature was specified in this 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.addTranceiver('audio'); pc.createDataChannel('somechannel'); const offer = await pc.createOffer(); will create an offer that negotiates an application m-line follow by an audio m-line in the SDP. #

This feature was specified in this 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. #

This feature was specified in this Spec.

text-decoration-skip-ink: all

Add support for the `all` value for the CSS text-decoration-skip-ink property, as specified in https://drafts.csswg.org/css-text-decor-4/#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`, authors 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. #

This feature was specified in this Spec.

Origin Trials in-progress in 148

This release of Chrome had 9 new origin trials.

Agentic Federated Login

A set of FedCM extensions to help agentic browsers safely log users in to websites using their federated accounts.

Connection Allowlists

Connection Allowlists is a feature designed to provide explicit control over external endpoints by restricting connections initiated via the Fetch API or other web platform APIs from a document or worker. The proposed implementation involves the distribution of an authorized endpoint list from the server through an HTTP response header. Prior to the establishment of any connection by the user agent on behalf of a page, the agent will evaluate the destination against this allowlist; connections to verified endpoints will be permitted, while those failing to match the entries in the list will be blocked. More details on the proposal can be found here: https://github.com/WICG/connection-allowlists Design doc: https://docs.google.com/document/d/1B3LERUObjVDAKBNLpdIxbk8LC96rWUn1q8vtP9pPIuA/edit?usp=sharing Implementation Design: https://source.chromium.org/chromium/chromium/src/+/main:docs/connection_allowlist_design.md #

This feature was specified in this Spec.

Container Timing

The Container Timing API enables monitoring when annotated sections of the DOM are displayed on screen and have finished their initial paint. A developer will have the ability to mark subsections of the DOM with the containertiming attribute (similar to elementtiming for the Element Timing API) and receive performance entries when that section has been painted for the first time. This API will allow developers to measure the timing of various components in their pages. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/WICG/container-timing

Samples: https://github.com/WICG/container-timing/tree/main/examples/adding-contenthttps://github.com/WICG/container-timing/tree/main/examples/shadow-domhttps://github.com/WICG/container-timing/tree/main/examples/skeleton-layouthttps://github.com/WICG/container-timing/tree/main/examples/svghttps://github.com/WICG/container-timing/tree/main/examples/table

Declarative Shadow DOM shadowrootadoptedstylesheets

Allows for Declarative Shadow DOM (DSD) to specify adopted stylesheets at parse time. shadowrootadoptedstylesheets supports a space-separated list of specifiers that each get fetched (exactly like a JavaScript import) and added to adoptedStyleSheets in specified order. Developers are encouraged to preload the stylesheets referenced via <link rel="modulepreload" as="style">. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/ShadowDOM/explainer.md

No linked samples

HTML-in-canvas

HTML-in-canvas enables customizing the rendering of html using canvas with three new primitives: an attribute to opt-in canvas elements (layoutsubtree), methods to draw child elements (2d: drawElementImage, webgl: texElementImage2D, webgpu: copyElementImageToTexture), and a paint event which fires to handle updates. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://github.com/WICG/html-in-canvas?tab=readme-ov-file#demos

Long Animation Frames style duration

Add `styleDuration` and `forcedStyleDuration` information to the Long Animation Frame API, enabling developers to distinguish style and layout times. #

This feature was specified in this Spec.

OpaqueRange

`OpaqueRange` represents a live span of text within a form control’s value, such as a `<textarea>` or text-based `<input>`, so developers can work with value text using range-like APIs. It enables operations such as `getBoundingClientRect()`, `getClientRects()`, and integration with the CSS Custom Highlight API for UI such as inline suggestions, highlights, and anchored popovers. It preserves encapsulation by exposing only value offsets while returning `null` for `startContainer` and `endContainer`, so DOM endpoints and internal structure are not exposed. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://github.com/MicrosoftEdge/Demos/tree/main/opaque-range

Prompt API Sampling Parameters

Adds sampling parameters to the Prompt API. These control how tokens are sampled from the model, giving developers control over the "creativeness" or "randomness" of the output. Additionally, it adds attributes to the LanguageModel instance to read the set values, as well as a static LanguageModel function to get the default and max values of these parameters. The first implementation adds `temperature` and `topK` parameters. #

This feature was specified in this Spec.

Web app HTML install element

Allows a website to declaratively prompt users to install a web app. The element optionally accepts two attributes which allows installation of content from a different origin. #

Resources

Docs: https://docs.google.com/document/d/1rGvLhD4SR8Y9M1wVmqgyesPNkbZGU7HOqlttjEFJ5Vo/edit?tab=t.tmx19oox759l#heading=h.j3tt49hqiuck

Samples: https://liahiscock.github.io/PWA/WebInstall/element-store.htmlhttps://kbhlee2121.github.io/pwa/web-install/only-elements.html

Flagged features in 148

This release of Chrome had 8 are available behind a flag.

Agentic Federated Login

A set of FedCM extensions to help agentic browsers safely log users in to websites using their federated accounts.

Deprecate and remove: non-allowlisted Event interfaces from document.createEvent()

Remove support for creating non-allowlisted event interfaces from document.createEvent(). After this change, these will throw NOT_SUPPORTED_ERR as required by the specification. (However, events with usage above 0.01% or those deemed difficult to remove immediately will either be deprecated only) #

This feature was specified in this Spec.

OpaqueRange

`OpaqueRange` represents a live span of text within a form control’s value, such as a `<textarea>` or text-based `<input>`, so developers can work with value text using range-like APIs. It enables operations such as `getBoundingClientRect()`, `getClientRects()`, and integration with the CSS Custom Highlight API for UI such as inline suggestions, highlights, and anchored popovers. It preserves encapsulation by exposing only value offsets while returning `null` for `startContainer` and `endContainer`, so DOM endpoints and internal structure are not exposed. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://github.com/MicrosoftEdge/Demos/tree/main/opaque-range

Out of order streaming

Use <template for> and processing instruction ranges (<?marker>, <?start>, and <?end> to update existing parts of the document without JS. #

This feature was specified in this Spec.

Remove explicit border color UA stylesheet rule for tables

This change removes the erroneous `border-color: gray` CSS rule from the UA stylesheet for the `<table>` element. The spec does not contain this rule: https://html.spec.whatwg.org/multipage/rendering.html#tables-2 and it causes the borders to incorrectly not default to currentColor. Neither Firefox nor Webkit have this `gray` border color rule in their UA stylesheet, leading to interop problems. #

This feature was specified in this Spec.

Renewed HTML insertion&streaming methods

Expose multiple HTML setting methods that provide a coherent story for dynamically inserting markup into an existing document. - Positional methods (before/after/append/prepend/replaceWith) that take HTML as argument, effectively replacing insertAdjacentHTML. - Streaming methods (stream{Append}HTML{Unsafe}) which return a WritableStream - Sending {runScripts} as part of SetHTMLUnsafeOptions, mimicking createContextualFragment behavior. - Supporting createParserOptions in trusted types, allowing trusted types to override scripting mode and sanitizer. #

This feature was specified in this Spec.

Summarizer API performance preference

The current Summarizer (https://chromestatus.com/feature/5193953788559360) relies on large on-device models, which can imply high latency, high resource usage, and limited device compatibility. We propose adding a preference parameter to SummarizerCreateCoreOptions, enabling developers to explicitly balance model capabilities against performance and broader device support. #

This feature was specified in this Spec.

User action pseudo class top layer boundary

This feature represents the behavior described in this section of the CSS spec: https://www.w3.org/TR/selectors-4/#useraction-pseudos which says that :hover, :active, and :focus-within match on the parents of elements, but only up to the first top layer element in the parent chain. The change for Chromium is that last "up to the top layer" part of this behavior. Concretely, this means that in the following structure if the user hovers the `<button>`, then the `:hover` pseudo class will match the `<button>` and the popover, but will not match the `<main>` element. ``` <main> <div popover> <button></button> </div> </main> <script>document.querySelector('[popover]').showPopover();</script> ``` The rationale behind this change is that typically top layer elements are rendered "elsewhere", in a location that is disconnected from the parent element visually. So it typically does not make sense to change the styles of the parent element when the top layer element is hovered or activated, for example. The customizable select implementation shipped in Chromium has this logic hard-coded for the specific case of the select `::picker()` popover. That special case logic is being removed in favor of the more general behavior with this feature. #

This feature was specified in this Spec.

Deprecations and Removals

Deprecation policy

To keep the platform healthy, we sometimes remove APIs from the Web Platform which have run their course. There can be many reasons why we would remove an API, such as:

Some of these changes will have an effect on a very small number of sites. To mitigate issues ahead of time, we try to give developers advanced notice so they can make the required changes to keep their sites running.

Chrome currently has a process for deprecations and removals of API's, essentially:

You can find a list of all deprecated features on chromestatus.com using the deprecated filter and removed features by applying the removed filter. We will also try to summarize some of the changes, reasoning, and migration paths in these posts.

Deprecated features in 148

This release of Chrome had 0 features deprecated.

Removed features in 148

This release of Chrome had 0 features removed.