Microsoft Edge 133 web platform release notes (Feb. 2025)

The following are the new web platform features and updates in Microsoft Edge 133, which releases on February 6, 2025.

To stay up-to-date and get the latest web platform features, download an Insiders version of Microsoft Edge, such as Canary, Dev, or Beta; see Become a Microsoft Edge Insider.

Detailed contents:

Edge DevTools

For Edge DevTools, see What's New in Microsoft Edge DevTools.

WebView2

For WebView2, see Release Notes for the WebView2 SDK.

Web platform features

Enabled features

Animation.overallProgress

Adds an overallProgress property to the Animation JavaScript class.

This property provides a convenient and consistent representation of how far along an animation has advanced across its iterations and regardless of the nature of its timeline.

Atomics.pause

Adds the Atomics.pause method, to hint to the CPU that the current code is executing a spinlock.

CSP hash reporting for scripts

Complex web applications often need to keep a record of the subresources that they download, for security purposes. In particular, upcoming industry standards and best practices (such as PCI-DSS v4) require that web applications keep an inventory of all the scripts they download and execute.

This feature builds on Content Security Policy (CSP) and the Reporting API to report the URLs and hashes of all the script resources that the document loads.

CSS :open pseudo-class

The :open pseudo-class matches <dialog> and <details> when they are in their open state, and matches <select> and <input> when they are in modes which have a picker and the picker is showing.

CSS scroll state container queries

Use container queries to style descendants of containers based on their scroll state.

The query container is either a scroll container, or an element affected by the scroll position of a scroll container. The following states can be queried:

  • stuck: A sticky positioned container is stuck to one of the edges of the scroll box.
  • snapped: A scroll snap aligned container is currently snapped horizontally or vertically.
  • scrollable: Whether a scroll container can be scrolled in a queried direction.

A new container-type: scroll-state lets containers to be queried.

For example:

#sticky {
  position: sticky;
  container-type: scroll-state;
}

@container scroll-state(stuck: top) {
  #sticky-child { font-size: 75% }
}
CSS advanced attr() function

Implement the augmentation to attr() that's specified in CSS Level 5, which allows types besides <string>, and allows usage in all CSS properties (besides pseudo-element content).

Example:

<style>
  div {
     background-color: attr(data-foo type(<color>), red);
  }
</style>
<div data-foo="blue">test</div>
CSS text-box, text-box-trim, and text-box-edge properties

To achieve optical balance of text content, the text-box-trim and text-box-edge properties, along with the text-box shorthand property, make finer control of vertical alignment of text possible.

The text-box-trim property specifies the sides to trim (above or below). The text-box-edge property specifies how the edge should be trimmed.

These properties allow you to control vertical spacing precisely, by using the font metrics.

ideographic and ideographic-ink, two values for the text-box-edge property for Chinese, Japanese, and Korean (CJK) characters are deferred to a future release.

DOM state-preserving Move

This feature adds a DOM primitive (moveBefore) that allows moving an element around in a DOM tree, without resetting the element's state. This function is available on ParentNode nodes, such as Element, Document, and DocumentFragment.

When moving an element instead of removing or inserting an element, state such as the following is preserved:

  • <iframe> elements remain loaded.
  • The active element retains focus.
  • Popovers and dialogs remain open.
  • CSS transitions and animations continue to run.
Expose the attributionsrc attribute on <area>

For Attribution Reporting, the attributionsrc attribute was already unintentionally processed on <area> elements, due to code shared with <a>, which intentionally supported that attribute.

For completeness, the attribute on <area> is exposed with identical syntax and semantics to <a>, and without changing the previous processing. When an <area> tag with an attributionsrc attribute is navigated, the foreground request may register navigation sources and, if the attribute is non-empty, one or more background requests will likewise be able to register navigation sources.

Expose coarsened cross-origin renderTime in element timing and Largest Contentful Paint (LCP) regardless of the Timing-Allow-Origin (TAO) header

All element-timing and LCP performance entries would have a non-zero renderTime, even if they are cross-origin without a Timing-Allow-Origin header. All presentation timestamps (renderTime, paint timing start time, and event timing end time) will be coarsened to a multiple of 4ms, to reduce the risk of reading cross-origin image information.

The FileSystemObserver interface

The FileSystemObserver interface notifies websites of changes to the file system. Sites observe changes to files and directories, to which the user has previously granted permission, in the user's local device (as specified in WICG/file-system-access) or in the Bucket File System (as specified in whatwg/fs), and are notified of basic change info, such as the change type.

Multiple import maps

Import maps currently must load before any ES module, and there can only be a single import map per document. That makes import maps fragile and potentially slow to use in real-life scenarios: any module that loads before import maps breaks the entire app, and in apps with many modules, import maps become a large blocking resource, because the entire map for all possible modules needs to load first.

This feature enables multiple import maps per document, by merging import maps in a consistent and deterministic way.

Popover invoker and anchor positioning improvements

This change corresponds to the following related set of changes:

  1. Add an imperative way to set invoker relationships between popovers: popover.showPopover({source}).
  2. Invoker relationships create implicit anchor element references.
A popover nested inside an invoker shouldn't re-invoke it

Clicking on a nested popover doesn't re-invoke the same popover.

In the following example, clicking the button properly activates the popover. However, clicking on the popover itself after that should not close the popover. Previously, the popover was closed this case, because the popover click bubbled up to the <button> and activated the invoker, which closed the popover.

<button popovertarget=foo>Activate
  <div popover id=foo>Clicking me shouldn't close me</div>
</button>
Resource timing: revert responseStart change and introduce firstResponseHeadersStart

Resource timing:

  • responseStart returns the first response, either early hints (interim) or final.
  • The final response headers (2xx/4xx/5xx) time is exposed as finalResponseHeadersStart.
Storage access headers

Offers an alternate way for authenticated embeds to opt in for unpartitioned cookies. These headers indicate whether unpartitioned cookies are (or can be) included in a given network request. These headers also allow servers to activate storage-access permissions that they've already been granted. Providing an alternative way to activate the storage-access permission allows usage by non-iframe resources, and can reduce latency for authenticated embeds.

Support creating a ClipboardItem with Promise<DOMString>

ClipboardItem is the input to the async clipboard write method. The ClipboardItem constructor now accepts string values in addition to BLOBs. ClipboardItemData can be a BLOB; a string; or a Promise that resolves to either a BLOB or a string.

Web Authentication API: the getClientCapabilities() method of PublicKeyCredential

The getClientCapabilities() method enables determining which WebAuthn features are supported by the user's client. This method returns a list of supported capabilities, allowing you to tailor authentication experiences and workflows based on the client's specific functionality.

WebAssembly memory64 proposal

The memory64 proposal adds support for linear WebAssembly memories larger than 2^32 bits. This proposal provides no new instructions, but instead extends the existing instructions to allow 64-bit indexes for memories and tables.

WebGPU: 1-component vertex formats (and unorm8x4-bgra)

Adds additional vertex formats that weren't present in the initial release of WebGPU, due to lack of support, or old macOS versions that are no longer supported by any browser. The 1-component vertex formats let the application request only the necessary data, when previously, the application had to request at least 2x more data for 8-bit and 16-bit data types. The unorm8x4-bgra format makes it slightly more convenient to load BGRA-encoded vertex colors while keeping the same shader.

X25519 algorithm of the Web Cryptography API

The X25519 algorithm provides tools to perform key agreement by using the X25519 function that's specified in RFC7748. The X25519 algorithm identifier can be used in the SubtleCrypto interface to access the implemented operations: generateKey, importKey, exportKey, deriveKey, and deriveBits.

popover=hint

The Popover API specifies the behavior for two values of the popover attribute: auto and manual. This feature describes a third value, popover=hint. Hints, which are most often associated with tooltip-type behaviors, have slightly different behaviors. The main difference is that a hint is subordinate to autos when opening nested stacks of popovers. So, it is possible to open an unrelated hint popover while an existing stack of auto popovers stays open. The canonical example is that a <select> picker is open (popover=auto) and a hover-triggered tooltip (popover=hint) is shown. That action does not close the <select> picker.

Deprecated and removed features

Deprecate WebGPU limit maxInterStageShaderComponents

The maxInterStageShaderComponents limit is being removed, due to a combination of factors:

  • Redundancy with maxInterStageShaderVariables: This limit already serves a similar purpose: controlling the amount of data passed between shader stages.

  • Minor discrepancies: There are slight differences in how the two limits are calculated, but these differences are minor, and can be effectively managed within the maxInterStageShaderVariables limit.

  • Simplification: Removing maxInterStageShaderComponents streamlines the shader interface and reduces complexity for developers. Instead of managing two separate limits (that both apply simultaneously, but with subtle differences), you can focus on maxInterStageShaderVariables, which is more appropriately named, and comprehensive.

Previously, when a resource was prefetched by using <link rel=prefetch>, its cache semantics (specifically, max-age and no-cache) were ignored for the first use within 5 minutes, to avoid refetching. Now, this special case has been removed, and normal HTTP cache semantics are used.

This means that to benefit from <link rel=prefetch>, you need to include appropriate caching headers (that is, Cache-Control or Expires).

This also affects the nonstandard <link rel=prerender>.

This fixes a bug with speculation rules prefetch, where non-2xx responses were cached. This doesn't require caching headers for speculation rules prefetch, because such headers are intended for navigational prefetching, and thus have different caching needs than the normal HTTP cache.

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

Digital Goods API

Expires on March 31, 2025.

The Digital Goods API allows a web application to get information about its digital products and the user's purchases managed by a digital store. The user agent abstracts connections to the store, and the Payment Request API is used to make purchases.

Web App LocalFolder Access

Expires on March 31, 2025.

Allows Microsoft Store-installed Progressive Web Apps (PWAs) to access file content that was previously stored in the WinRT ApplicationData.LocalFolder folder by an earlier, UWP version of the application.

HTML+IDL handwriting attribute

Expires on June 14, 2025.

Granular per-document and per-element control over which content should allow or disallow handwriting input.

Acquisition Info API

Expires on June 30, 2025.

Supports 3P acquisition attribution for Progressive Web Apps (PWAs) that were acquired through an app store or directly from the browser.

New Chromium origin trials

Reference Target for Cross-Root ARIA

Expires on 6/10/2025.

The Reference Target API allows ID-based references, particularly from

DisableThirdPartyStoragePartitioning3

Expires on 9/16/2025.

This is a general-purpose deprecation trial that allows a top-level site to opt into unpartitioned storage, service workers, and communication APIs, for third-party contexts that are embedded in its site. This gives sites more time for testing and migrating to solutions that don't require partitioned storage.

Background Page Freeze Opt-Out

Expires on 9/16/2025.

This trial allows a page to opt-out from background page freezing. In Chromium 133, a tab that was backgrounded for more than 5 minutes may be frozen if it is CPU-intensive and Energy Saver is active, unless opted-out. An origin trial opt-out is provided while new Web APIs are being developed, to opt-out pages for specific use cases.

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.