Chrome Release Summary

Chrome version: 158 157 156 155 154 153 152 151
+151

Chrome 158

Enabled (21) | Origin Trial (0) | Behind a flag (0) | Deprecated (0) | Removed (0)

Enabled by default in 158

This release of Chrome had 21 new features.

CSS Custom Highlight Universal Selector ::highlight(*)

Introduces a universal selector for custom highlights, ::highlight(*), which matches the highlight pseudo-elements of all custom highlights regardless of their name. The * argument contributes zero specificity, so its declarations act as a base style that rules naming a specific highlight override through the cascade. #

This feature was specified in this Spec.

CSS flow-start and flow-end alignment keywords

Introduce the flow-start/end keywords as value aliases for the existing flex-start/end keywords as resolved in the CSSWG. These are needed for alignment in the case of placement reversals. flow-start in CSS Grid-Lanes would indicate the starting edge of the container at which placement begins, which is useful in the case where placement is reversed (`fill-reverse`, `track-reverse`, discussed in this CSSWG issue: [css-grid-3][masonry] item-flow row vs. column in masonry layouts · Issue #12803 · w3c/csswg-drafts). Because these are acting as value aliases, we expect flex-start/end to follow the logical directions in Grid Lanes, as well, which will expand the definition of these keywords from only applying special behavior in flexbox to applying to any layout mode whose logical start/end is different from its physical start/end. For serialization, if either flex-start/end or flow-start/end is used, the returned serialized value should be flow-start/end. #

This feature was specified in this Spec.

HTML install element

Chrome can now trigger a request for the browser to install a web app, given a manifest URL and optional manifest ID. The <install> element enables cross-origin web app installation without JavaScript and provides a better developer experience than handling `beforeinstallprompt` events. The element is launching in parallel with `navigator.install()`, the imperative entry point to the same installation capability. Admins can control this in two ways: 1. Enterprise policy, [WebAppInstallByUserEnabled](https://chromeenterprise.google/policies/#WebAppInstallByUserEnabled), can disable user web app installs broadly, including installs initiated via `navigator.install()` and <install>. 2. [Permissions policy](https://www.w3.org/TR/permissions-policy/), web-app-installation, can allow or disallow use of this feature on origins that the enterprise controls (for example, internal sites/iframes). #

This feature was specified in this Spec.

Resources

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

Samples: https://microsoftedge.github.io/Demos/pwa-install-elementhttps://kbhlee2121.github.io/pwa/web-install-manifest-url/only-elements.html

Media element pseudo-classes

The :playing, :paused, :seeking, :buffering, :stalled, :muted, and :volume-locked CSS pseudo-classes match <audio> and <video> elements based on their state. This is one of the focus areas in https://wpt.fyi/interop-2026. #

This feature was specified in this Spec.

MediaSession: Return Promise<undefined> from setMicrophoneActive() and setCameraActive()

Updates navigator.mediaSession.setMicrophoneActive() and navigator.mediaSession.setCameraActive() to return a Promise<undefined> instead of undefined, matching the W3C Media Session specification. In a fully active document, the returned promise resolves with undefined; if the associated document is not fully active, it returns a promise rejected with an InvalidStateError DOMException. #

This feature was specified in this Spec.

OfflineAudioContext incremental rendering

This feature adds an incremental rendering mechanism to OfflineAudioContext so that the audio graph data can be incrementally processed rather than allocating the whole audio buffer up front. By incrementally delivering the data using data chunks, there is no need to have high memory requirements for the user's machine when processing high amounts of data. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://gabrielsanbrito.github.io/demo_pages/oac-incremental-rendering

Permissions Policy: focus-without-user-activation

Gives embedders control over programmatic focus from embedded content via the `focus-without-user-activation` permissions policy. When the policy is denied for the initiating frame, programmatic focus changes (from `element.focus()`, `autofocus`, `window.focus()`, and the focusing steps for dialogs and popovers) are blocked unless that frame has transient user activation or focus is already within its subtree. This does not prevent dialogs or popovers from opening. User-initiated focus such as clicking or tabbing is never affected. Chromium's existing restriction on autofocus in cross-origin iframes is unchanged: the policy can further restrict autofocus, but allowing it does not enable autofocus in a cross-origin frame. The policy can be set via a `Permissions-Policy` HTTP response header or the iframe `allow` attribute. Focus delegation is supported: a parent frame that has focus can programmatically pass focus to a child iframe, even if the child has the policy denied, and once a frame has focus it can move focus within its own subtree. #

This feature was specified in this Spec.

Prerendering cross-origin iframes

Prerenders cross-origin iframes with an opt-in response header. Browsers will now prerender all cross-origin frames if the top-level frame's HTTP response includes the Supports-Loading-Mode: prerender-cross-origin-frames. #

This feature was specified in this Spec.

SVG textPath side attribute

Allows authors to choose which side of a path SVG text follows using the side attribute on the textPath element. Setting side="right" effectively reverses the path direction for text layout, making it easy to place text inside or outside a circular path without duplicating or manually reversing the path data. #

This feature was specified in this Spec.

Scroll snap for single-axis scroll containers

This feature lets a single-axis scroll container (for example, one with overflow: auto clip) handle scroll snap area propagation and alignment separately for each axis. Single-axis scroll containers are now supported (https://chromestatus.com/feature/5067363861004288). Without this feature, such a container captures a snap area on both axes, even the axis it can't scroll. The snap area then can't align on that axis. With this feature, if a snap area sets alignment on both axes, the single-axis container handles only the axis it scrolls. The other axis goes up to the nearest ancestor scroll container that scrolls in that direction. #

This feature was specified in this Spec.

Source Specific Multicast for Direct Sockets API

Adds Source-Specific Multicast (SSM) support to the Direct Sockets API, allowing Isolated Web Apps to optionally specify a source address when joining multicast groups to receive UDP packets only from that source. Without a source address, joinGroup() uses Any-Source Multicast (ASM), which receives packets from any source sending to the group. SSM is essential to using multicast outside of private networks, simplifying packet routing, and filtering traffic at the network level by source address, which mitigates spoofing and denial-of-service attacks. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://blockcast.network/livehttps://chromewebstore.google.com/detail/multicast-gateway-beacon/djikmiecejmojgcglkfmihhkfgekjlaj

Spec-compliant XML MIME type detection

To fully align with Web standards, Chrome is updating how it detects [XML MIME](https://www.rfc-editor.org/info/rfc7303/) types. Chrome will now recognize valid MIME types whose subtype ends in `+xml` as XML across Chrome and Android WebView, including non-application types such as `text/example+xml` and `image/example+xml`. For these responses, `PerformanceResourceTiming.contentType` returns application/xml. The value for image/svg+xml remains unchanged. Enterprise web applications that rely on previous `contentType` values may observe behavior changes. Chrome Actor also uses this shared XML classification for dangerous MIME type navigation checks, so it may block navigations to additional non-application +xml responses. Admins should check whether their applications depend on these MIME types or the previous `contentType` values. #

This feature was specified in this Spec.

Web Install API

Starting in Chrome 158, the new Web Install API allows websites to prompt users to install a web app, given a manifest URL and optional manifest ID. The `navigator.install()` method enables cross-origin web app installation and provides a better developer experience than handling `beforeinstallprompt` events. This API is launching in parallel with the `<install>` element, a declarative entry point to the same installation capability. Admins can control this in two ways: 1. Enterprise policy, [WebAppInstallByUserEnabled](https://chromeenterprise.google/policies/#WebAppInstallByUserEnabled), would disable user web app installs broadly, including installs initiated via `navigator.install()` and `<install>`. Or 2. [Permissions policy](https://www.w3.org/TR/permissions-policy/), web-app-installation, can allow or disallow use of this feature on origins that the enterprise controls (for example, internal sites/iframes). #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/12nSXJLm8mW0gWZ_yjlXfrV8r9gwJliVt4WVa-209-KA/edit?tab=t.0

Samples: https://microsoftedge.github.io/Demos/pwa-install-apihttps://kbhlee2121.github.io/pwa/web-install-manifest-url/index.html

WebTransport anticipated concurrent incoming streams

Allows WebTransport applications to indicate how many incoming streams they expect to have open at once. Constructor hints configure the initial QUIC stream allowance, reducing the risk that a server that needs high stream concurrency is blocked by the initial stream limit. #

This feature was specified in this Spec.

WebTransport congestion control

Adds the congestionControl constructor option and read-only attribute to WebTransport. Applications can request "default", "throughput", or "low-latency" behavior, allowing the user agent to select suitable congestion-control behavior for each session. #

This feature was specified in this Spec.

WebTransport draining

WebTransport.draining is a promise that resolves when the server indicates that the WebTransport session will be gracefully retired. Applications can use this signal to establish a replacement session while existing streams and the current session remain usable. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/w3c/webtransport/blob/main/explainer.md#11-handling-session-draining

No linked samples

WebTransport keying material export

Adds WebTransport.exportKeyingMaterial(), which allows an application to derive cryptographic keying material bound to an established WebTransport session. The method accepts application provided binary label and context values and a requested output length and returns a Promise<Uint8Array>. Chromium supports label and context values up to 255 bytes and output lengths from 1 through 4096 bytes. For WebTransport over HTTP/3, Chromium includes the WebTransport CONNECT stream ID in the TLS exporter context. This ensures that separate WebTransport sessions derive different keying material even when they share the same underlying HTTP/3 connection. #

This feature was specified in this Spec.

WebTransport receive stream

Adds the standardized WebTransportReceiveStream interface, a ReadableStream subclass used for incoming unidirectional streams and the readable side of bidirectional streams. Its getStats() method returns per-stream byte counters: bytesReceived reports bytes received from the network, while bytesRead reports bytes delivered to the application. #

This feature was specified in this Spec.

WebTransport reliability attributes

Adds the WebTransport.reliability instance attribute and static WebTransport.supportsReliableOnly attribute. These APIs indicate whether the user agent supports WebTransport over exclusively reliable connections and whether an established session supports unreliable transport such as datagrams. In Chromium, reliability initially returns "pending" and changes to "supports-unreliable" after an HTTP/3 WebTransport connection is established.  Since Chromium does not currently support HTTP/2 fallback,  WebTransport.supportsReliableOnly returns false; any successfully established session uses HTTP/3 and supports unreliable datagrams. #

This feature was specified in this Spec.

closest-corner and farthest-corner radii for circle() and ellipse() basic shapes

The circle() and ellipse() CSS basic-shape functions accept the closest-corner and farthest-corner radius keywords, in addition to the existing closest-side and farthest-side. These keywords resolve to the Euclidean distance from the shape center to the nearest or farthest corner of the reference box, matching the long-standing behavior of radial-gradient(). They work in clip-path, shape-outside, and offset-path, so the same shape syntax accepted by gradients now works for shapes. CL: https://chromium-review.googlesource.com/c/chromium/src/+/7767079 #

This feature was specified in this Spec.

object-fit and object-position apply to SVG documents in <object> and <embed>

SVG documents loaded through <object> or <embed> are sized and positioned inside the element's content box according to the CSS object-fit and object-position properties, the same way <img> content is. Previously Chrome ignored both properties for embedded SVG documents and always stretched the document viewport to the whole content box. #

This feature was specified in this Spec.

Origin Trials in-progress in 158

This release of Chrome had 0 new origin trials.

Flagged features in 158

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

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 158

This release of Chrome had 0 features deprecated.

Removed features in 158

This release of Chrome had 0 features removed.