From 9accd91b1ca23b126137b1a531d289ab0eac229b Mon Sep 17 00:00:00 2001 From: captainbrosset Date: Thu, 5 Mar 2026 00:28:32 +0000 Subject: [PATCH 01/17] New web platform release notes for 147 --- .../web-platform/release-notes/147.md | 687 ++++++++++++++++++ 1 file changed, 687 insertions(+) create mode 100644 microsoft-edge/web-platform/release-notes/147.md diff --git a/microsoft-edge/web-platform/release-notes/147.md b/microsoft-edge/web-platform/release-notes/147.md new file mode 100644 index 0000000000..09b5ea7292 --- /dev/null +++ b/microsoft-edge/web-platform/release-notes/147.md @@ -0,0 +1,687 @@ +--- +title: Microsoft Edge 147 web platform release notes (Apr 2026) +description: Microsoft Edge 147 web platform release notes (Apr 2026) +author: MSEdgeTeam +ms.author: msedgedevrel +ms.topic: conceptual +ms.service: microsoft-edge +ms.date: +--- +# Microsoft Edge 147 web platform release notes (Apr 2026) + + +The following are the new web platform features and updates in Microsoft Edge 147, which releases on April 9, 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](https://www.microsoft.com/edge/download/insider). + +**Detailed contents:** + +* [Edge DevTools](#edge-devtools) +* [WebView2](#webview2) +* [CSS/SVG/Web API features](#csssvgweb-api-features) + + * [CSS border-shape](#css-border-shape) + + * [CSS contrast-color()](#css-contrast-color) + + * [CSS update: decoupling of Width and Style properties](#css-update-decoupling-of-width-and-style-properties) + + * [CSSPseudoElement interface](#csspseudoelement-interface) + + * [Clip Text overflow at user interaction](#clip-text-overflow-at-user-interaction) + + * [Correctly set dropEffect for dragEnter, dragLeave and dragOver events](#correctly-set-dropeffect-for-dragenter-dragleave-and-dragover-events) + + * [Element-scoped view transitions](#element-scoped-view-transitions) + + * [Get Secure Payment Confirmation Capabilities](#get-secure-payment-confirmation-capabilities) + + * [IDNA ContextJ rules](#idna-contextj-rules) + + * [JSON and style support for link rel=modulepreload](#json-and-style-support-for-link-rel-modulepreload) + + * [Local Network Access restrictions on Service Worker WindowClient.navigate()](#local-network-access-restrictions-on-service-worker-windowclient-navigate) + + * [Local network access restrictions for WebSockets](#local-network-access-restrictions-for-websockets) + + * [Local network access restrictions for WebTransport](#local-network-access-restrictions-for-webtransport) + + * [Manifest localization](#manifest-localization) + + * [Math.sumPrecise](#math-sumprecise) + + * [Pointer event suppression on drag start](#pointer-event-suppression-on-drag-start) + + * [Pseudo target on events](#pseudo-target-on-events) + + * [Request.isReloadNavigation attribute](#request-isreloadnavigation-attribute) + + * [Respect autocorrect="off" for Windows touch keyboard in TSF](#respect-autocorrect-off-for-windows-touch-keyboard-in-tsf) + + * [Support path attribute on SVG <textpath> element](#support-path-attribute-on-svg-textpath-element) + + * [Timeline Named Range "scroll"](#timeline-named-range-scroll) + + * [Update Device Memory API limits](#update-device-memory-api-limits) + + * [Web Serial API on Android](#web-serial-api-on-android) + + * [Web app scope system accent color](#web-app-scope-system-accent-color) + + * [WebRTC Datachannel: Always negotiate data channels](#webrtc-datachannel-always-negotiate-data-channels) + + * [WebXR Layers](#webxr-layers) + + * [WebXR Plane Detection](#webxr-plane-detection) + + * [XML Parsing in Rust for non XSLT scenarios](#xml-parsing-in-rust-for-non-xslt-scenarios) + +* [Deprecated or removed features](#deprecated-or-removed-features) + + * [Remove Inline XSLT for production of SVG](#remove-inline-xslt-for-production-of-svg) + + +* [Origin trials in Microsoft Edge](#origin-trials-in-microsoft-edge) + +* [Chromium origin trials](#chromium-origin-trials) + + * [Digital Credentials API - Issuance Support](#digital-credentials-api-issuance-support) + + * [PrerenderUntilScript](#prerenderuntilscript) + + * [Enhanced Canvas TextMetrics](#enhanced-canvas-textmetrics) + + * [WebNN](#webnn) + + * [WebAppInstallation](#webappinstallation) + + * [WebAudio Configurable Render Quantum](#webaudio-configurable-render-quantum) + + * [UserMediaElement](#usermediaelement) + + * [Local Network Access from Non-Secure Contexts](#local-network-access-from-non-secure-contexts) + + * [focusgroup](#focusgroup) + + + + +## Edge DevTools + +See [What's new in Microsoft Edge DevTools](../../devtools/whats-new/whats-new.md). + + + + +## WebView2 + +See [Release notes for the WebView2 SDK](../../webview2/release-notes/index.md). + + + + +## CSS features + +The following new Cascading Style Sheets (CSS) features are included in Microsoft Edge. + +## Web APIs + +The following new Web API features are included in Microsoft Edge. + +**TODO: MOVE THE BELOW FEATURES IN THE CORRECT H2 HEADINGS ABOVE.** + + + + +#### CSS border-shape + +CSS border-shape enables creating non-rectangular borders, with any arbitrary shape (polygon, circle, shape(), etc). + +Though border-shape accepts the same shapes as clip-path, it is fundamentally different: border-shape defines the shape of the border, decorates it, and clips only the inside. + +border-shape has two variants: one variant that strokes a shape, and another variant that fills between two shapes. + +See also: +* []() + + + +#### CSS contrast-color() + +This function is used to meet contrast requirements for accessibility. + +The contrast-color() function can be used anywhere in CSS where a color value is expected. It takes a color value argument, and returns either 'black' or 'white' depending on which of them gives the highest contrast against the color argument. + + +See also: +* []() + + + +#### CSS update: decoupling of Width and Style properties + +Chrome will soon align with updated [CSS specifications](https://www.w3.org/TR/css-2025/) regarding the behavior of `border-width`, `outline-width`, and `column-rule-width` properties. Previously, if the corresponding `border-style`, `outline-style`, or `column-rule-style` was set to `none` or `hidden`, the computed width of these properties would be forced to `0px`, regardless of the specified value. + +With this change, the computed values of `border-width`, `outline-width`, and `column-rule-width` will always reflect the author-specified values, independent of the `*-style` property. Additionally, the resolved values (as returned by `getComputedStyle()`) for `outline-width` and `column-rule-width` will also reflect the specified values. + +The change aligns Chrome with Firefox and WebKit, which have already implemented this behavior. + +See also: +* []() + + + +#### CSSPseudoElement interface + +CSSPseudoElement interface is a way to represent a pseudo-element in JS. + +CSSPseudoElement is returned from Element.pseudo(type), where `type` is currently: ::after, ::before, ::marker. +CSSPseudoElement is a proxy object that represents a pseudo-element, so, unlike a pseudo-element, CSSPseudoElement always exists. + +CSSPseudoElement has the following attributes/methods: +- The type attribute is a string representing the type of the pseudo-element. +- The element attribute is the ultimate originating element of the pseudo-element. +- The parent attribute is the originating element of the pseudo-element (Either Element of CSSPseudoElement for nested pseudo-elements). +- The pseudo(type) method to retrieve nested pseudo-elements. + +See also: +* []() + + + +#### Clip Text overflow at user interaction + +When a user interacts (editing or caret navigation) with text which has ‘text-overflow: ellipsis’ set, the text switches temporarily from ellipsis to clip allowing the user to see and interact with the hidden overflow content. This feature applies to all editable and non-editable elements. For form controls (textarea, input), the behavior is already supported. + +See also: +* []() + + + +#### Correctly set dropEffect for dragEnter, dragLeave and dragOver events + +The drag and drop specifications require the dataTransfer's object "dropEffect" attribute to have certain predetermined values on dragEnter, dragOver and dragLeave. Drag enter and drag over should have a dropEffect based on the current effectAllowed, and drag leave should always have a "none" dropEffect. Currently, Chrome doesn't adhere to these rules. With the launch of this feature, Chrome will start respecting the specification and assigning the correct values to this attribute so that web developers can start relying on it. + +See also: +* []() + + + +#### Element-scoped view transitions + +Exposes element.startViewTransition() on arbitrary HTML elements. The element establishes a scope for the transition, which means that the transition pseudo-elements are affected by ancestor clips and transforms, and multiple transitions on separate elements can run concurrently. + +See also: +* []() + + + +#### Get Secure Payment Confirmation Capabilities + +Adds a new static method to the Payment Request that allows web developers to get the capabilities of the browser's implementation of Secure Payment Confirmation. + +This helps web developers to easily know what capabilities are available for Secure Payment Confirmation so they can decide whether or not they want to use Secure Payment Confirmation with those capabilities. + +See also: +* []() + + + +#### IDNA ContextJ rules + +IDNA is the mechanism for non-ASCII characters in domain names, encoding a URL like http://네이버.한국/ as http://xn--950bt9s8xi.xn--3e0b707e/ (a redirect to naver.com). + +The processing is defined by https://www.unicode.org/reports/tr46/#Processing and is invoked by https://url.spec.whatwg.org/#idna. + +The URL spec sets the CheckJoiners flag, which enables the ContextJ rules in IDNA2008: +https://www.rfc-editor.org/rfc/rfc5892.html#appendix-A.1 +https://www.rfc-editor.org/rfc/rfc5892.html#appendix-A.2 + +This disallows ZWNJ (U+200C ZERO WIDTH NON-JOINER) and ZWJ (U+200D ZERO WIDTH JOINER) in most places in URLs. + +The implementation is to simply pass the UIDNA_CHECK_CONTEXTJ option to ICU, where this rule is implemented: +https://source.chromium.org/chromium/chromium/src/+/main:third_party/icu/source/common/uts46.cpp;l=1137-1204;drc=8a1988938d4298fbe8fb499b1a59fe4b04a21b15 + +This would fix over 200 subtests in WPT relating to IDNA, which already pass in Firefox and Safari: +https://chromium-review.googlesource.com/c/chromium/src/+/6990929 +https://wpt.fyi/results/url/IdnaTestV2.window.html + +All of the IdnaTestV2 cases that would regress from shipping ICU 77 (https://chromestatus.com/feature/5143313833000960) would also be fixed again by this change. + +See also: +* []() + + + +#### JSON and style support for link rel=modulepreload + +Adds support for JSON and style module types as destinations. is already supported in Chromium (see https://chromestatus.com/feature/5762805915451392), but it currently only supports preloading script-like module scripts. This feature addresses a functionality gap, as JSON and CSS module scripts are supported in Chromium elsewhere but are not supported as destinations. Style modules can be preloaded with and JSON modules can be preloaded with . + +See also: +* []() + + + +#### Local Network Access restrictions on Service Worker WindowClient.navigate() + +Local Network Access (LNA) restrictions have been recently added in the last few months to restrict web sites from unilaterally making requests to local networks and local devices (https://chromestatus.com/feature/5152728072060928). This was added for Service Worker-initiated fetch requests, but was not done for navigations done by service workers through WindowClient.navigate + +This launch closes this hole by adding LNA restrictions to WindowClient.navigate() calls, using the WindowClient as the initiator of the navigation to determine if the navigation is an LNA request. + +This only applies if the WindowClient being navigated is a subframe; Chrome does not currently enforce any LNA restrictions on main frame navigations. + +See also: +* []() + + + +#### Local network access restrictions for WebSockets + +Local Network Access(LNA) restrictions are being expanded to include WebSockets. WebSockets connections to local address will now start triggering permission prompts. + +All of the current LNA enterprise policies will still apply to the LNA WebSockets restrictions (LocalNetworkAccessAllowedForUrls, +LocalNetworkAccessBlockedForUrls, and LocalNetworkAccessRestrictionsTemporaryOptOut). + +More information about LNA can be found at https://developer.chrome.com/blog/local-network-access + + + +See also: +* []() + + + +#### Local network access restrictions for WebTransport + +Restricts the ability to make requests to the user's local network using WebTransport, gated behind a permission prompt. + +A local network request is any request from a public website to a local IP address or loopback, or from a local website (e.g. intranet) to loopback. Gating the ability for websites to perform these requests behind a permission reduces the ability of sites to use these requests to fingerprint the user's local network. + +This permission is restricted to secure contexts. + +This work is adding to the Local Network Access Restrictions work here: https://chromestatus.com/feature/5152728072060928 + +See also: +* []() + + + +#### Manifest localization + +Supports localization of manifest members so apps can adapt their names, descriptions, icons, and shortcuts to the user’s language and region. Developers provide localized values in the web app manifest, and the browser automatically selects the appropriate resources based on the user’s language settings, introducing language support across different markets. + +See also: +* []() + + + +#### Math.sumPrecise + +A TC39 proposal to add a method to sum multiple values to JavaScript. + +Add an iterable-taking `Math.sumPrecise` method which returns the sum of the values in the iterable using a more precise algorithm than naive summation. + +See also: +* []() + + + +#### Pointer event suppression on drag start + +According to the HTML spec, when a drag starts the user agent should +send the appropriate events to the drag source to indicate that the +pointer event stream has ended, and that it shouldn't expect any +more events from this pointer [1]. This code had been partially implemented +for mouse events and fully implemented for touch drags on Android. With the work in this feature, we aim to fully satisfy this spec requirement on all other platforms. +Practically, this means that after a drag has started the drag source will now receive the `pointercancel`, `pointerout` and `pointerleave` events to indicate that the current event stream has finished. + +[1] Pointer event spec definition of pointer stream suppression: +https://w3c.github.io/pointerevents/#suppressing-a-pointer-event-stream + +See also: +* []() + + + +#### Pseudo target on events + +Specific events are now extended to have `.pseudoTarget` that is either CSSPseudoElement (if interaction has been with pseudo-element) or null. + +This allows to have more specific information on the event origin, e.g. that not just an ultimate originating element (Event.target) has been clicked, but more specifically that it was ::after. Note that the Event.target is unchanged so event only has extra info on pseudo-element interaction. + +The events are UIEvent, AnimationEvent, TransitionEvent. + +mouseover, mouseout, mouseenter, mouseleave and their pointer* counterparts are not yet supported. + +See also: +* []() + + + +#### Request.isReloadNavigation attribute + +Adds the read-only boolean attribute isReloadNavigation to the Fetch API's Request interface. This attribute indicates whether the current navigation request was initiated as a user-triggered reload (e.g., using the refresh button, location.reload(), or history.go(0)). This signal is primarily exposed on the Request object within a Service Worker's FetchEvent. + +https://chromium-review.googlesource.com/c/chromium/src/+/7137783 + +See also: +* []() + + + +#### Respect autocorrect="off" for Windows touch keyboard in TSF + +The HTML autocorrect attribute allows web authors to control whether autocorrection should be applied to user input in editable elements including ,