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.

Name Description Register
SharedArrayBuffers in non-isolated pages on Desktop platforms Allows using SharedArrayBuffer objects in pages that aren't cross-origin isolated. Register
Incoming Call Notifications Allows installed PWAs to send incoming call notifications with a ringtone and accept/reject buttons. Register
Proofreader API Corrects grammar, spelling, and punctuation errors in text using a built-in language model. See also Proofreader API. Register
Prompt API Prompts a built-in language model from your website or extension JavaScript code. See also Prompt API. Register
Prompt API sampling parameters The topK and temperature sampling parameters let you optimize model behavior per language model session. Register
WebAssembly custom descriptors Stores data associated with source-level types more efficiently, in custom descriptor objects. Register
<usermedia> HTML element A browser-controlled HTML element for requesting camera or microphone access, replacing JavaScript-based permission requests. Register
Soft navigation heuristics Exposes soft-navigation heuristics for collecting performance metrics in single-page apps. Register
Enhanced Canvas TextMetrics Expands the TextMetrics Canvas API with selection rectangles, bounding-box queries, and glyph-cluster operations. Register
WebNN Build and execute hardware-accelerated machine-learning models directly in your web app. Register
focusgroup HTML attribute Standardizes keyboard navigation for composite widgets such as toolbars, tabs, menus, and radio groups. Register
URL and eval hashes in CSP script-src Introduces url- and eval- hashes for script-src CSP directives, replacing hostname-based allowlists and unsafe-eval. Register
Web Install API Allows a website to install another website as a web app by using navigator.install(). Register
<install> HTML element Declaratively install other websites as web apps by using the <install> element. Register
HTML in canvas Enables rendering HTML in canvas with new drawing methods and the paint event. Register
Digital Credentials API - Issuance Support Triggers issuance of user credentials from a credential issuer server to a digital wallet application. Register
prerender_until_script Speculation Rules API action A Speculation Rules API action that prerenders a page but switches to prefetching when a script executes. Register
WebAudio Configurable Render Quantum Lets you specify a custom render quantum size when creating an AudioContext or OfflineAudioContext. Register
Prerender activation by form submission Allows prerender rules in the Speculation Rules API to be activated by form submissions. Register
CPU Performance API Exposes information about the user's device capabilities, for use with the Compute Pressure API. Register
Connection allowlists Restricts connections from a document or worker to a server-distributed allowlist of endpoints. Register
Prerendering cross-origin iframes Prerenders cross-origin iframes via an opt-in response header, instead of delaying them until page activation. Register
Container Timing Monitors when an annotated DOM container is displayed and has finished its initial paint. Register
Separate style and layout durations in the Long Animation Frame API Adds styleDuration, forcedStyleDuration, layoutDuration, and forcedLayoutDuration properties for deeper CSS performance analysis. Register
Declarative CSS Module Scripts Shares declarative stylesheets with shadow roots, including declarative shadow roots, using inline style modules. Register
Autofill Event Detects when browser autofill updates form controls, for adapting custom UI and validation. Register

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.