Edit

Share via


Microsoft Edge 138 web platform release notes (Jun. 2025)

The following are the new web platform features and updates in Microsoft Edge 138, which releases on June 26, 2025.

To stay up-to-date and get the latest web platform features, download a preview channel of Microsoft Edge (Beta, Dev, or Canary); go to Become a Microsoft Edge Insider.

Detailed contents:

Edge DevTools

See What's New in Microsoft Edge DevTools.

WebView2

See Release Notes for the WebView2 SDK.

Web platform features

CSS features

CSS stretch sizing keyword

The stretch keyword, for CSS sizing properties such as width and height, allows elements to grow to exactly fill their containing block's available space. The stretch sizing keyword is similar to the value 100%, except that the resulting size is applied to the element's margin box instead of to the box that's indicated by box-sizing.

The stretch keyword allows the element to keep its margins, while still being as large as possible. This is an unprefixed version of -webkit-fill-available.

See also:

CSS abs() and sign() functions

The abs(A) function returns the absolute value of A, of the same type as the input:

  • If A's numeric value is positive or 0⁺, abs(A) outputs A.
  • Otherwise, abs(A) outputs -1 * A.

The sign(A) function 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⁺.
  • 0⁻ if A's numeric value is 0⁻.

The return CSS type is <number>, made consistent with the input calculation's type.

See also:

CSS environment variable for OS-level font scale

The preferred-text-scale CSS environment variable exposes a user's preferred font scale to CSS.

Previously, it was not practical for a page to detect if the user had changed their preferred font size via the operating system's preferences.

See also:

CSS sibling-index() and sibling-count() functions

sibling-index() and sibling-count() can be used as integers in CSS property values to style elements based on their position among sibling elements, or on the total number of siblings. These functions can be used inside calc() expressions, or can be used directly as integer values.

For example, you can use the sibling-index() function inside a calc() expression to set the left margin of a list item based on its position among its siblings:

li {
  margin-inline-start: calc(1rem * sibling-index());
}

See also:

Interpolation progress: CSS progress() function

The progress() CSS math function returns a <number> that represents the position of a value between a progress start value and progress end value.

progress() can be useful in cases such as fluid typography.

See also:

Nested view transitions

Nested view transitions allow view transitions to generate a nested pseudo-element tree rather than a flat pseudo-element tree, which allows certain view transitions to appear more like their original elements.

Some CSS features rely on the relationship between elements in the DOM tree, such as:

  • Clipping from the overflow, clip-path, or border-radius properties.
  • 3D effects from the transform, transform-style, or perspective properties.
  • Masking and effects from the opacity, mask-image, or filter properties.

The visual output of these effects depend on the DOM tree structure, and a view transition that flattens the DOM tree can cause these effects to not work as expected.

See also:

Web APIs

Prompt and Writing Assistance API developer previews

The Prompt API and Writing Assistance APIs are now available as developer previews in Edge Canary and Dev channels.

These APIs give you access to a powerful small language model, Phi-4-mini, that is built into the Edge browser.

Use these APIs to try out prompt engineering, summarize and modify content, or generate text.

See also:

New prefetchCache and prerenderCache values for the Clear-Site-Data header

The Clear-Site-Data HTTP header now supports the new prefetchCache and prerenderCache values.

Previously, the only way to clear the prefetch and prerender cache was by using cache value of the Clear-Site-Data HTTP header. With the increased adoption of the Speculation Rules API, developers need a way to specifically clear the prefetch or prerender cache, or both, without disrupting other session information, such as history or cookies.

See also:

Video frame orientation metadata in WebCodecs

Various video-related interfaces in WebCodecs now have rotation and flip values:

  • The VideoFrame interface can now create object instances that have arbitrary rotation and flip values.
  • The VideoDecoderConfig object now has rotation and flip fields that are emitted on decoded VideoFrame objects automatically.
  • The VideoEncoder class now has a mechanism for passing rotation and flip information from encode() to the VideoDecoderConfig that's emitted as part of EncodedVideoChunkMetadata.

Previously, developers had no way of knowing when they received video frames that had a non-default orientation.

See also:

New is_top_level and visibility_state fields in Crash Reporting API reports

Crash reports that are sent to default endpoints by the Crash Reporting API now have the is_top_level and visibility_state string fields.

The is_top_level and visibility_state fields are contextual bits of information about crashing frames in a crash report.

See also:

Disallow plain text pre-rendering over HTTP

To make pre-rendering consistent with pre-fetch, plain text pre-rendering now only works over HTTPS.

Previously, plain text pre-rendering was permitted over both HTTP and HTTPS connections.

See also:

Escape < and > in HTML attributes when serializing

The < and > characters in HTML element attribute values are now escaped when serializing HTML. This mitigates the risk of mutation XSS attacks, which occur when the value of an attribute is interpreted as a start tag token after being serialized and re-parsed.

Integrity-Policy header for subresource integrity of scripts

The new Integrity-Policy header enables you to assert that every resource of a given type needs to be integrity-checked. If a resource of the specified type is attempted to be loaded without integrity metadata, that attempt fails, and produces a violation report.

See also:

Predictable reported storage quota

The storage quota that's reported by the StorageManager's estimate() method for sites that don't have unlimited storage permissions is now the same across all browsing modes.

This mitigates an issue where it was previously possible to detect a user's browsing mode via the reported storage quota, because the storage space that's made available is significantly smaller in InPrivate mode than in regular mode.

The reported quota is now equal to the current storage usage plus the minimum value between 10 GiB and the device disk size rounded up to the nearest 1 GiB, in all browsing modes, for sites with limited storage permissions.

Sites that have unlimited storage permissions are unaffected.

See also:

pushsubscriptionchange event upon resubscription

The pushsubscriptionchange event is fired by a service worker when an origin is re-granted notification permission, after the origin's previous push subscription was revoked because of a permission change (from granted to deny or default).

The event is fired with an empty oldSubscription and newSubscription.

See also:

Speculation rules: target_hint field

The syntax for speculation rules has been extended to allow you to specify the target_hint field. The target_hint field provides a hint for the browser to know where a prerendered target will be displayed, such as in a new tab or window.

For example, when _blank is specified as a hint, a prerendered page can be rendered in a window that's opened by window.open().

target_hint currently supports the _self and _blank strings. If the hint is not specified, it's treated as _self.

The target_hint field has no effect on prefetching speculation rules.

See also:

Strict Same-origin policy for Storage Access API

The Storage Access API now follows the Same-origin policy.

By default, using document.requestStorageAccess() in a frame only attaches cookies to the requests that are made to the iframe's origin. The CookiesAllowedForUrls policy and storage access headers can still be used to unblock cross-site cookies.

See also:

Viewport Segments Enumeration API

The Viewport Segments Enumeration API allows you to adapt your website layout to target foldable devices.

A viewport segment defines the position and dimensions of a logically separate region of the viewport. A viewport segment is 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.

See also:

Web app scope extensions

The new "scope_extensions" web app manifest field enables a web app to extend its scope to other origins.

Example usage:

{
  "name": "Example",
  "display": "standalone",
  "start_url": "/index.html",
  "scope_extensions": [
    {"type" : "origin", "origin" : "https://example.com"}
  ]
}

The scope_extensions field allows a site that controls multiple subdomains and top-level domains to be presented as a single web app.

The scope_extensions field requires listed origins to confirm association with the web app by using a .well-known/web-app-origin-association configuration file:

{
  "https://sample-app.com/": {
    "scope": "/"
  }
}

See also:

Removed features

Asynchronous range removal for Media Source Extensions now throws exceptions

The following changes have been made to the Media Source Extensions specification, 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.

While these changes were made a long time ago, and Safari and Firefox have already implemented them, Chromium had not yet done so. Exceptions will now be thrown in both of these cases.

See also:

Remove the automatic SwiftShader fallback

Previously, if a WebGL context could not be created with the available GPU, Chromium would automatically fall back to using the SwiftShader software renderer. This automatic fallback behavior is now removed and the WebGL context creation will now fail instead of falling back to SwiftShader.

SwiftShader poses security risks and leads to a poor user experience when falling back from a high-performance GPU-backed WebGL to a CPU-backed implementation.

SwiftShader remains a useful tool for doing headless testing on a site. This use case is still supported by opting in, which you can do by running Microsoft Edge with the --enable-unsafe-swiftshader command-line argument.

See also:

Origin trials

The following are new experimental APIs which you can try on your own live website for a limited time.

To learn more about origin trials, see Use origin trials in Microsoft Edge.

To see the full list of available origin trials, see Microsoft Edge Origin Trials.

Microsoft Edge-only origin trials

Web app access to LocalFolder

Expires on July 31, 2025

Allows PWAs installed from the Microsoft Store to access file content that was previously stored in the WinRT ApplicationData.LocalFolder folder by an earlier UWP version of the same application.

Web app scope extensions

Expires on August 31, 2025

scope_extensions is a new web application manifest member that enables web apps to extend their scope to other origins.

Scope extensions allow web apps that rely on multiple subdomains and top-level domains to be presented as a single web app.

{
  "name": "Example app",
  "display": "standalone",
  "start_url": "/index.html",
  "scope_extensions": [
    {
      "type": "type",
      "origin": "https://example.com"
    }
  ]
}

The origins that are listed in the scope_extensions member must confirm that they are associated with the web app, by hosting a configuration file named .well-known/web-app-origin-association. The file must list the web app's origin:

{
  "https://sample-app.com/": {
    "scope": "/"
  }
}
Acquisition Info API

Expires on June 30, 2025.

The Acquisition Info API supports 3P acquisition attribution for PWAs that were acquired through an app store or directly from the browser.

MS High Contrast Deprecation

Expires on September 9, 2025.

Enables the legacy CSS -ms-high-contrast media query and the legacy -ms-high-contrast-adjust property.

See Deprecating support for -ms-high-contrast and -ms-high-contrast-adjust.

AriaNotify API

Expires on October 14, 2025.

The AriaNotify API enables developers to directly tell a screen reader what to read. In the simplest scenario, call ariaNotify("foo") on the document or an element.

See Creating a more accessible web with Aria Notify.

Note

Portions of this page are modifications based on work created and shared by Chromium.org and used according to terms described in the Creative Commons Attribution 4.0 International License.