Edit

Microsoft Edge 149 web platform release notes (Jun. 2026)

The following are the new web platform features and updates in Microsoft Edge 149, which releases on Jun. 4, 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 gap decorations

Style the gaps in Grid and Flexbox container layouts, similar to column-rule in multiple-column layout. Use gap decorations to visually separate items without resorting to workarounds such as pseudo-elements or extra wrapper elements.

See also:

Clip text overflow on user interaction

When a user interacts with text that has text-overflow: ellipsis set (such as during editing or caret navigation), the text temporarily switches from ellipsis to clip (in which the truncation can happen in the middle of a character). This allows the user to see and interact with the hidden overflow content.

This behavior applies to all editable and non-editable elements. Form controls (<textarea>, <input>) already support this behavior.

See also:

image-rendering: crisp-edges

The image-rendering property now supports the crisp-edges value.

Use image-rendering: crisp-edges to scale an image in a way that preserves contrast and edges, without smoothing colors or introducing blur.

See also:

path-length CSS property for SVG elements

Use the new path-length CSS property to set the pathLength attribute value on SVG geometry elements, including:

  • <path>
  • <circle>
  • <rect>
  • <line>
  • <polyline>
  • <polygon>
  • <ellipse>

The path-length CSS property allows you to manipulate an SVG's pathLength attribute value via stylesheets, inline styles, and animations.

CSS declarations override the SVG presentation attribute following standard CSS precedence rules. The initial value is none.

See also:

path(), shape(), rect(), and xywh() in shape-outside

You can now use the path(), shape(), rect(), and xywh() shape functions in the CSS shape-outside property to define float exclusion shapes.

See also:

Removed border-color: gray from user agent stylesheet for <table>

The erroneous border-color: gray rule has been removed from the browser's user agent stylesheet for the <table> element. Table borders now correctly default to currentColor, matching the HTML specification and other browsers.

See also:

Scope system accent color to installed web apps

The accent-color: auto CSS value for form controls now applies the operating system's accent color only within installed web app contexts. On regular web pages, form controls use a browser-default accent color instead.

This change aligns the behavior of accent-color: auto with the AccentColor and AccentColorText CSS system color keywords, which are also scoped to installed web app contexts, to reduce fingerprinting.

See also:

User-action pseudo-classes top-layer boundary

The :hover, :active, and :focus-within pseudo-classes now match on parent elements only up to the first top-layer element in the chain of parent elements.

For example, consider this HTML:

<main>
  <div popover>
    <button></button>
  </div>
</main>
<script>document.querySelector('[popover]').showPopover();</script>

When the user hovers over the <button> element, the :hover pseudo-class matches the <button> and the <div popover> elements, but doesn't match the <main> element, because the <div popover> is a top-layer element.

Top-layer elements are visually rendered outside of their parent context, so changing parent styles when a top-layer element is hovered over or activated is undesirable.

See also:

Web APIs

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

Disable SVG filters on cross-origin iframes and plugins

SVG filters are no longer applied to the following:

  • Cross-origin or restricted iframes (such as sandboxed iframes).
  • Embedded plugins (such as PDFs).

This prevents potential security issues from cross-origin content being processed through SVG filter effects.

See also:

Intl.Locale variants

The Intl.Locale object now exposes a variants property. You can also now pass a variants string in the options of the Intl.Locale constructor.

The variants of a locale represent additional language preferences that are not covered by the language, region, and script fields of a language ID.

See also:

OpaqueRange for form control text

Use OpaqueRange to represent a live span of text within a form control's value, such as a <textarea> or text-based <input>.

OpaqueRange enables the following for inline suggestions, highlights, and anchored popovers:

  • Operations such as getBoundingClientRect() and getClientRects().
  • Integration with the CSS Custom Highlight API.

OpaqueRange preserves encapsulation by exposing only value offsets, and returns null for startContainer and endContainer.

See also:

Migrate a PWA to a new origin

You can now seamlessly migrate an installed Progressive Web App (PWA) to a new, same-site origin, preserving user trust and permissions.

When a user installs a PWA, its identity is bound to its web origin (for example, app.example.com). Previously, changing the origin forced users to manually uninstall and reinstall the app. This feature eliminates that disruption.

See also:

Distinguish payment handler errors in a payment request

A payment handler that's accessed via the Payment Request API can now return distinct errors for "user cancelled" versus "internal payment app error".

Use this distinction to build better flows for your users. For example, when an internal error occurs, retry or fall back to a different payment method, while properly stopping the flow if the user cancels.

  • If the promise that's passed to PaymentRequestEvent.respondWith is rejected with an OperationError, your PaymentRequest.show() promise receives an OperationError.
  • If the promise that's passed to PaymentRequestEvent.respondWith is rejected with a value other than OperationError, your PaymentRequest.show() promise receives an AbortError (user cancel).

See also:

Get notified when the scrollBy and scrollTo methods complete

Programmatic scrolling methods, such as scrollBy and scrollTo, now return a Promise object that resolves when the scroll completes. Use this promise to run code after a smooth-scroll finishes, without relying on a timer or scroll-event polling.

See also:

Request.isReloadNavigation attribute

The isReloadNavigation attribute is now available on the Fetch API's Request interface. This attribute indicates whether the navigation request was initiated as a user-triggered reload, such as when the user clicks the Refresh button, or when the location.reload() or history.go(0) method runs.

The isReloadNavigation attribute is a read-only boolean.

Use this attribute in your Service Worker's FetchEvent handler to implement caching strategies, such as bypassing the cache or enforcing a network-first strategy specifically during a reload.

See also:

Service Worker router timing fields in Resource Timing and Navigation Timing APIs

The workerMatchedRouterSource and workerFinalRouterSource attributes are now available on the Resource Timing and Navigation Timing APIs.

  • Use the workerMatchedRouterSource attribute to identify which service worker static router rule was matched.

  • Use the workerFinalRouterSource attribute to identify the final source that was used for the request.

See also:

autocorrect="off" on Windows touch keyboard

The autocorrect attribute now works correctly on the Windows touch keyboard. Previously, the touch keyboard ignored the autocorrect="off" attribute value, and always autocorrected words.

To prevent the touch keyboard from replacing typed text, set the autocorrect="off" attribute value on:

  • An <input> element.
  • A <textarea> element.
  • Any element that has the contenteditable attribute set.

See also:

Defer clipboard data reads until the MIME type is specified

The Async Clipboard API now defers reading clipboard data from the operating system until you call getType(). When you call navigator.clipboard.read(), the browser returns an array of ClipboardItem objects, each with their available MIME types, but without the underlying data. The actual data is read only when you request a specific format.

const items = await navigator.clipboard.read(); // No data is read yet.
const text = await items[0].getType('text/plain'); // Only the 'text/plain' data is read here.

This reduces CPU usage, and improves the perceived responsiveness of the API call.

See also:

Close WebSocket connections on bfcache entry

An open WebSocket connection is now closed when a page enters the back/forward cache (bfcache), instead of preventing the page from being cached.

Previously, a page that had an active WebSocket connection couldn't be stored in the bfcache. With this change, more pages benefit from instant backward and forward navigation.

When your page enters the bfcache, the page receives a close event on each affected WebSocket. Listen for the pageshow event, and then reconnect when event.persisted is true.

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.

SharedArrayBuffers in non-isolated pages on Desktop platforms

Expires on May 19, 2026.

This origin trial allows you to use SharedArrayBuffer objects in pages that aren't cross-origin isolated. A cross-origin isolated page is a page that's not be able to load cross-origin content unless the resource explicitly allows it via a Cross-Origin-Resource-Policy header or CORS headers.

Incoming Call Notifications

Expires on May 19, 2026.

The Incoming Call Notifications API extends the Notifications API to allow an installed Progressive Web App (PWA) to send incoming call notifications.

Incoming call notifications have a ringtone and buttons that are styled to indicate accepting or rejecting a call.

This helps web apps create more engaging experiences by making it easier for users to recognize a calling notification and answer it.

Proofreader API

Expires on May 19, 2026.

The Proofreader API corrects grammar, spelling, and punctuation errors in text.

The Proofreader API uses a small language model (SLM) that's built into Microsoft Edge, from your website's JavaScript code, or from your browser extension's JavaScript code.

See also Correct grammar and spelling with the Proofreader API.

Prompt API

Expires on Jun. 16, 2026

Use the Prompt API to prompt a small language model (SLM) that's built into Microsoft Edge, from your website's JavaScript code, or from your browser extension's JavaScript code.

The Prompt API is an experimental web API.

Use the Prompt API to:

  • Generate and analyze text.
  • Create application logic based on user input.
  • Discover innovative ways to integrate prompt-engineering capabilities into your web app.

See also Prompt a built-in language model with the Prompt API.

Information about this origin trial:

WebAssembly custom descriptors

Expires on Jun. 16, 2026.

WebAssembly custom descriptors allow WebAssembly to store data that's associated with source-level types more efficiently, in custom descriptor objects.

<usermedia> HTML element

Expires on Jul. 14, 2026.

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.

Information about this origin trial:

Soft navigation heuristics

Expires on Jul. 28, 2026.

This origin trial exposes soft-navigation heuristics so that you can collect performance metrics for navigations in a single-page app.

A soft navigation is a same-document navigation that's driven by JavaScript, when using the History API or the Navigation API.

Soft navigations are triggered by a user gesture. A soft navigation modifies the DOM and the displayed URL.

Enhanced Canvas TextMetrics

Expires on Aug. 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:

  • Independent character animations.
  • Independent character styling.

Information about this origin trial:

WebNN

Expires on Aug. 11, 2026.

Use the WebNN API to build and execute machine-learning models directly in your web app.

Use hardware-accelerated neural networks by creating computational graphs that efficiently map to platform capabilities and device hardware.

focusgroup HTML attribute for keyboard navigation

Expires on Aug. 11, 2026.

Standardize keyboard navigation for composite widgets such as toolbars, tabs, menus, and radio groups, by using the focusgroup HTML attribute.

The focusgroup attribute automatically handles the following, without requiring custom JavaScript code:

  • The roving tabindex behavior.
  • Navigation via arrow keys.
  • Focus memory; restores the last-focused element when re-entering the focusgroup.

Information about this origin trial:

URL and eval hashes in CSP script-src

Expires on Aug. 25, 2026.

This feature introduces url- hashes and eval- hashes to be used in script-src directives in Content Security Policy.

This enables you to write a strict CSP that only relies on hash-based and nonce-based policies, without having to use permissive hostname-based allowlists or unsafe-eval.

Web Install API

Expires on Aug. 25, 2026.

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

HTML in canvas

Expires on Aug. 25, 2026.

HTML in canvas enables customizing the rendering of HTML using canvas with three new primitives:

  • The layoutsubtree attribute to opt-in canvas elements.
  • Methods to draw child elements: drawElementImage for 2D, texElementImage2D for WebGL, and copyElementImageToTexture for WebGPU.
  • The paint event that fires to handle updates.

Information about this origin trial:

Digital Credentials API - Issuance Support

Expires on Sep. 8, 2026.

The Digital Credentials API enables triggering the issuance of user credentials from a credential issuer server to a digital wallet application.

For example, use the Digital Credentials API to:

  • Trigger the provisioning of a new driver's license from a government server to a user's digital wallet.
  • Trigger the provisioning of a new verified academic degree from a university server to a user's digital wallet.

Information about this origin trial:

prerender_until_script Speculation Rules API action

Expires on Sep. 8, 2026.

prerender_until_script is a new action for the Speculation Rules API. This new action provides a middle option in between the prefetch and the prerender actions.

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

WebAudio Configurable Render Quantum

Expires on Sep. 8, 2026.

By default, WebAudio processes audio in fixed blocks of 128 sample-frames (a render quantum). When your app's audio processing block size doesn't match this default, development becomes complex and processing becomes less efficient.

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

  • Pass an integer, to request a specific size.
  • Pass "default" (or omit the option), to use the default of 128 frames.
  • Pass "hardware", to let the browser pick an optimal size for the current configuration.

Information about this origin trial:

Prerender activation by form submission

Expires on Sep. 8, 2026.

This origin trial adds a new field to the Speculation Rules API, to allow prerender rules to be activated by form submissions.

CPU Performance API

Expires on Sep. 8, 2026.

The CPU Performance API exposes information about how powerful the user's device is.

This API targets web applications that use this information to provide an improved user experience, possibly in combination with the Compute Pressure API.

The Compute Pressure API provides information about the user device's CPU pressure and utilization, and allows the app to react to changes in CPU pressure.

Connection allowlists

Expires on Sep. 8, 2026.

Connection allowlists restrict connections that are initiated via the Fetch API or other web platform APIs from a document or worker to an allowlist of endpoints.

Distribute the authorized endpoint list from the server through an HTTP response header.

The browser evaluates each connection destination against the allowlist before connecting; connections to unlisted endpoints are blocked.

Prerendering cross-origin iframes

Expires on Sep. 22, 2026.

By default, navigational prerendering delays the loading of all cross-origin iframes until the prerendered page is activated. When cross-origin iframes are critical to your application, this delay can negate many of the benefits of prerendering.

This origin trial prerenders cross-origin iframes by using an opt-in response header. The browser prerenders all cross-origin frames if the top-level frame's HTTP response includes the Supports-Loading-Mode: prerender-cross-origin-frames header.

Prompt API sampling parameters

Expires on Oct. 6, 2026.

The Prompt API topK and temperature sampling parameters let you optimize model behavior for your specific use case.

The Prompt API sampling parameters apply per language model session.

Container Timing

Expires on Oct. 6, 2026.

The Container Timing API monitors when an annotated container of the DOM is displayed on screen and has finished its initial paint.

To receive performance entries when a container has been painted for the first time, mark each such subsection of the DOM with the containertiming attribute. This is similar to elementtiming for the Element Timing API.

Separate style and layout durations in the Long Animation Frame API

Expires on Oct. 6, 2026.

This origin trial adds the following properties to the Long Animation Frame API:

  • styleDuration
  • forcedStyleDuration
  • layoutDuration
  • forcedLayoutDuration

Use these properties to distinguish style and layout times, to gain a deeper understanding of CSS performance issues for each aspect of layout.

HTML <install> element

Expires on Oct. 6, 2026.

Declaratively install other websites as web apps by using the <install> element, and optional install_url and manifest_id attributes.

Declarative CSS Module Scripts

Expires on Oct. 6, 2026.

Declarative CSS Module Scripts extend the existing script-based CSS Module Scripts to share declarative stylesheets with shadow roots, including declarative shadow roots.

Define inline style modules with <style type="module" specifier="foo"> and then apply them to a declarative shadow DOM by referencing a specifier or URL, such as <template shadowrootmode="open" shadowrootadoptedstylesheets="foo">.

Autofill Event

Expires on Nov. 3, 2026.

Use the new autofill event to detect when browser autofill updates form controls.

This makes it easier to adapt custom UI, validation, or dependent form logic after autofill completes.

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.