Edit

Share via


Microsoft Edge 146 web platform release notes (Mar. 2026)

The following are the new web platform features and updates in Microsoft Edge 146, which releases on March 12, 2026.

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.

CSS features

The following new Cascading Style Sheets (CSS) features are included in Microsoft Edge.

CSS update: decoupling of Width and Style properties

The behavior of border-width, outline-width, and column-rule-width properties has been updated to align with the latest CSS specifications.

Previously, if the corresponding border-style, outline-style, or column-rule-style property was set to none or hidden, the computed width would be forced to 0px, regardless of the value that you specified.

Now, the computed values of border-width, outline-width, and column-rule-width always reflect your specified values, independent of the corresponding *-style property. The resolved values that are returned by getComputedStyle() for outline-width and column-rule-width also reflect the values that you specified.

See also:

Scroll-triggered animations

Scroll-triggered animations let you control animations based on the scroll position. You can play, pause, or reset an animation when a certain scroll position is reached.

This feature eliminates the need to use JavaScript to manually detect when an element is in view and then trigger animations. Instead, you can define scroll-based animations declaratively in CSS, which allows the browser to optimize performance by running the animations on a worker thread.

See also:

hanging and each-line keywords for text-indent

The text-indent property now supports two optional keywords:

  • hanging: Indents all lines except the first line.
  • each-line: Applies indentation to each line that's after a forced line break, instead of indenting only the first line.

These keywords give you more control over how text indentation is applied in different scenarios.

See also:

Timeline named range "scroll"

In scroll-driven animations, view timelines now support a "scroll" named range, in addition to the existing named ranges ("entry", "exit", "cover", "contain").

The new "scroll" range refers to the full extent of the scroll container, rather than only the portion of the scroll container in which the animation subject is visible. This gives you more control over when animations start and stop within the scrollable area.

See also:

trigger-scope

The trigger-scope property lets you control the scope of animation trigger names, similar to how anchor scoping works with the anchor-scope property.

Trigger names that are declared by properties such as timeline-trigger are global by default, which can lead to naming conflicts. Use trigger-scope to limit the visibility of trigger names to a specific scope, to prevent triggering unintended animations.

meta name="text-scale" element

The <meta name="text-scale" content="scale"> meta element makes your page's default font size scale with the user's operating system and browser text scale settings.

This is useful if your page uses font-relative units, such as rem or em. This <meta> element tells the browser that your page is built to scale well with different text-size preferences, so that the browser can disable its own text auto-sizing mechanisms.

Web APIs

The following new Web API features are included in Microsoft Edge.

MIME type parameters are preserved in data URLs

When you use data URLs, MIME type parameters (such as charset or boundary) are now preserved in the Content-Type header.

This change aligns data URL handling with the specification of the Fetch API and ensures that parameter information in data URLs is not lost during processing.

See also:

Intl.Locale.prototype.variants

The Intl.Locale.prototype.variants property returns the variants associated with a locale as a string of dash-separated identifiers.

You can also now pass "variants" in the options object when constructing an Intl.Locale.

See also:

Iterator sequencing

The Iterator.concat() method creates a new iterator by combining multiple iterators in sequence.

You can pass any number of iterables to Iterator.concat(), and the resulting iterator will yield values from each iterable in order.

See also:

You can now use <link rel="modulepreload"> to preload JSON and CSS modules in addition to JavaScript modules.

Specify the module type using the as attribute:

  • <link rel="modulepreload" as="style" href="..."> for CSS modules.

  • <link rel="modulepreload" as="json" href="..."> for JSON modules.

This brings feature parity across different module types for preloading.

See also:

Playback Statistics API for WebAudio

The AudioContext.playbackStats property provides statistics about your web audio playback, such as:

  • Average latency.
  • Minimum/maximum latency.
  • Underrun duration.
  • Underrun count.

Use this API to monitor audio quality and detect glitches in your audio playback.

This feature was previously called AudioContext.playoutStats. The feature has been renamed to AudioContext.playbackStats, to align with the final Web Audio API specification. The old name is still available as a deprecated alias, for backward compatibility.

See also:

Preserving dropEffect values from dragover to drop events

When using the Drag and Drop API, the dropEffect value that's set in a dragover event is now preserved and available in the subsequent drop event.

Previously, the browser would overwrite the dropEffect value with its own negotiated operation, which prevented you from controlling the visual feedback and the final operation that's performed.

See also:

Sanitizer API

The Sanitizer API provides a simple and safe way to remove unsafe HTML content from user-supplied HTML strings.

Use this API to sanitize HTML input and reduce the risk of XSS (cross-site scripting) attacks when displaying user-generated content.

See also:

path attribute on SVG <textPath> element

The <textPath> SVG element now supports a path attribute, which lets you define text path geometry inline, by using SVG path data.

Instead of always needing to reference a separate <path> element by using the href attribute, you can now include the path data directly in the <textPath> element's path attribute.

When both path and href are specified, the path attribute takes precedence.

See also:

Web app scope system accent color

The accent-color: auto CSS property is now scoped to only work within installed web apps. This aligns with the existing AccentColor and AccentColorText CSS system color keywords.

Previously, when accent-color was set to auto, form controls would adopt the system accent color in all contexts (both web pages and installed web apps). This change ensures that system accent colors are only available in installed web app contexts. This provides more consistent developer and user expectations, while adhering to fingerprinting restrictions.

See also:

Device Memory API limits

The Device Memory API now reports updated values that better reflect modern device capabilities:

  • Android devices: 1, 2, 4, or 8 GB

  • Other platforms: 2, 4, 8, 16, or 32 GB

These new values replace the outdated values (0.25, 0.5, 1, 2, 4, 8 GB). This reduces fingerprinting risk, and provides better segmentation for high-end devices.

See also:

WebGPU Compatibility mode

WebGPU Compatibility mode adds an opt-in, lightly restricted subset of the WebGPU API, that's capable of running older graphics APIs such as OpenGL and Direct3D11.

By opting into this mode and following its constraints, you can extend the reach of your WebGPU application to many older devices that don't have the modern, explicit graphics APIs that core WebGPU requires.

  • For a simple app, the only required change is to set the featureLevel option to "compatibility" when calling requestAdapter().

  • For a more advanced app, some modifications might be necessary, to accommodate for the Compatibility mode's restrictions. However, because Compatibility mode uses a subset of the WebGPU API, your app will also work on browsers that don't support Compatibility mode.

See also:

WebGPU: Texture and Sampler let binding

In WGSL, a let declaration can now store an object of type texture or sampler, thanks to the texture_and_sampler_let language feature.

This allows for:

  • More flexible shader code organization.
  • Reusing texture and sampler bindings.

WebGPU: Transient attachments

Use the new TRANSIENT_ATTACHMENT GPU texture usage flag to create render pass attachments that can stay in tile memory. This avoids VRAM traffic, and potentially avoids VRAM allocation for the textures.

When a texture is declared as transient (or "memoryless"), the GPU knows that the contents of that texture are only needed temporarily within the current render pass.

Since the texture contents are discarded after the render pass, the driver might not need to allocate space for that texture in the main VRAM. Even without hardware support for transient attachments, this hint can be used to reuse texture allocations between passes, reducing peak memory usage.

See also:

Always negotiate data channels in WebRTC

The new alwaysNegotiateDataChannels option for RTCPeerConnection allows you to negotiate data channels in the SDP offer before creating a data channel. The data channel m-line is placed before any audio or video m-lines.

Use this option when creating a peer connection, to ensure that data channels are always negotiated:

const pc = new RTCPeerConnection({
  alwaysNegotiateDataChannels: true
});
const offer = await pc.createOffer();

See also:

Populate targetURL during file handling

When a Progressive Web App (PWA) is launched via file handling, the LaunchParams.targetURL property is now properly populated in the launch queue.

Previously, this property was null when a file launch was directed to an existing window.

Now, the URL from your manifest action field is available to the launchQueue consumer. This provides consistency with other launch triggers, such as shortcut launches and navigation capturing.

This allows you to better understand the intent of the launch, and handle specific routing logic even when the primary payload is a set of file handles.

See also:

Stop re-queueing LaunchParams on reload

The launchQueue no longer re-sends the last LaunchParams (including file handles) when a user reloads the page in a PWA.

Previously, a page refresh triggered the launch consumer again with data from the original launch, which often led to unexpected behavior.

For example, an app might prompt users with "Save changes?" or "Overwrite this file?", every time they refreshed the page.

This change ensures that a reload is treated as a standard navigation, rather than as a re-launch, and the launchQueue will only be populated when a new file launch event actually occurs.

See also:

Origin trials

The following are origin trials for new experimental APIs that are available in Microsoft Edge.

Origin trials let you try experimental APIs on your own live website for a limited time. To learn more about origin trials, see Use origin trials in Microsoft Edge.

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

Web Install API

Expires on July 14, 2026.

The Web Install API allows a website to install other websites as web apps on the user's device, by using navigator.install().

Digital Credentials API - Issuance Support

Expires on July 14, 2026.

The Digital Credentials API enables triggering the issuance of user credentials from a credential issuer server to a digital wallet application. For example, this API can be used to trigger the provisioning of a new driver's license, or a verified academic degree, from a government or university server to a user's digital wallet.

WebAssembly Custom Descriptors

Expires on June 16, 2026.

WebAssembly Custom Descriptors allows WebAssembly to store data that's associated with source-level types more efficiently, in new custom descriptor objects.

PrerenderUntilScript

Expires on September 8, 2026.

The PrerenderUntilScript origin trial introduces prerender_until_script, a new action for the Speculation Rules API that provides a middle ground between prefetch and prerender.

Use this action when you want the browser to prerender a page, but stop and switch back to prefetching after a specific script starts executing.

Enhanced Canvas TextMetrics

Expires on August 11, 2026.

The Enhanced Canvas TextMetrics origin trial expands the TextMetrics Canvas API to support:

  • Selection rectangles.
  • Bounding box queries.
  • Operations based on a glyph cluster.

This new functionality enables complex text-editing applications to have accurate selection, caret positioning, and hit testing. Also, cluster-based rendering facilitates sophisticated text effects, such as:

WebNN

Expires on July 14, 2026.

The WebNN origin trial lets you experiment with an abstraction layer over the ML acceleration capabilities provided by the platform.

WebNN helps you understand:

  • How well real-world models map to the operations that are supported by WebNN.

  • How well WebNN can map those operations to various hardware.

  • Explainer

  • Feedback

  • Register

WebAudio Configurable Render Quantum

Expires on September 8, 2026.

With the WebAudio Configurable Render Quantum origin trial, you can specify a renderSizeHint option when creating an AudioContext or OfflineAudioContext, to request a particular render quantum size.

UserMediaElement

Expires on July 14, 2026.

The UserMediaElement origin trial introduces the <usermedia> HTML element.

The <usermedia> HTML element is a browser-controlled element for requesting camera or microphone access.

Using a semantic HTML element instead of JavaScript:

  • Provides better clarity to users about the permission request.

  • Improves accessibility.

  • Prevents manipulative UI patterns.

  • Streamlines the workflow, by directly providing the media stream to your application. This eliminates the need for separate API calls.

  • Explainer

  • Feedback

  • Register

Local Network Access from non-secure contexts

Expires on May 19, 2026.

Local Network Access from non-secure contexts temporarily allows for access to resources on local networks to originate from non-secure contexts. This gives you more time to migrate Local Network Access requests so that they originate from a secure context.

For restrictions on Local Network Access, see New permission prompt for Local Network Access. This origin trial can only be enabled through HTTP header-provided origin tokens.

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.