Web features explorer

📅 September 2026 release notes

Newly available

The following features are newly available:

  • alpha(): The alpha() CSS function computes a relative color value by adjusting the opacity of an origin color.
  • Animation accessors: The animation property of an AnimationEvent or TransitionEvent object is the Animation object that represents the animation (and thus the element) that fired an animation event.
  • ariaNotify(): The ariaNotify() method of Element and Document requests assistive technology software, if activated, to announce a message to the user. This can help make dynamic content changes more accessible to users.
  • Asynchronously iterable streams: Asynchronous iteration of a stream allows you to use for await … of loops to iterate through a stream's incoming data.
  • autocorrect: The autocorrect global HTML attribute controls whether to automatically correct spelling or punctuation errors for user input.
  • light-dark() image values: The light-dark() CSS function accepts, in addition to colors, two <image> values, such as a gradient or URL, and uses one depending on the current color scheme.
  • overflow-anchor: The overflow-anchor CSS property sets an element as a possible scroll anchor, reducing unintended scrolling when document changes occur above the current scrollport. This is enabled by default where supported.
  • progress(): The progress() CSS function returns a ratio for the relative position of one value between two other values, clamped between 0 and 1. You can use it to interpolate a value for other calculations.
  • Top-level await: The await keyword, when used at the top level of a module (outside of an async function), delays parent module execution until after a promise fulfills.
  • JavaScript promise integration (WebAssembly): The JavaScript promise integration (JSPI) suspends a WebAssembly module when it calls a JavaScript method that returns a promise. The module resumes when the promise is resolved. You can use this to call asynchronous Web APIs from synchronous WebAssembly.

Widely available

The following features are now widely available:

  • AbortSignal.any(): The AbortSignal.any() static method combines an iterable of abort signals into a single signal, with the abort reason taken from the first signal to abort.
  • Array grouping: The Object.groupBy() and Map.groupBy() static methods group values of arrays and iterables based on a function that returns a key for each value.
  • checkVisibility(): The checkVisibility() method checks if an element is potentially visible, with optional parameters for the kinds of visibility to check. For example, it checks whether the element has the style display: none, but can also check for visibility: hidden.
  • paint-order: The paint-order CSS property sets the z-order of strokes, fills, and (in SVG content) markers. For example, paint-order: markers stroke fill; draws the markers, then stroke on top of markers, then fill on top of both markers and stroke.
  • Promise.withResolvers(): The Promise.withResolvers() static method is an alternative to the Promise() constructor that returns both the promise and resolution functions. You can use this to access resolve and reject outside the scope of the executor function.
  • Transferable ArrayBuffer: The transfer() and transferToFixedLength() methods of ArrayBuffer move a buffer from one context to another (for example, to a worker).
  • Extended constant expressions (WebAssembly): The i32.add, i32.sub, i32.mul, i64.add, i64.sub, and i64.mul operations extend constant expressions to include arithmetic.
  • white-space-collapse: The white-space-collapse CSS property sets whether new line characters are shown as line breaks, and whether multiple consecutive spaces are all displayed or combined.

New in Chrome

The following features are now available in Chrome:

  • Responsive iframes: The frame-sizing CSS property sets the size of an <iframe> element to that of it contents, to avoid scrolling in the iframe. Embedded documents allow this with the <meta name="responsive-embedded-sizing"> element and request resizing in the embedding page by calling window.requestResize().
  • Iterator includes(): The includes() method of an Iterator object returns true when an item yielded by the iterator is the same as a given value. It's similar to the includes() method of arrays.
  • Iterator join(): The join() method of an Iterator object returns a string concatenation of all the iterator's items, separated by commas or a given separator string. It's similar to the join() method of arrays.
  • Iterator.zip() and Iterator.zipKeyed(): The Iterator.zip() and Iterator.zipKeyed() static methods return new iterators that aggregate items from multiple iterables. You can use them to iterate jointly, to get all of the items at the same position in each iterable.
  • scroll-axis-lock: The scroll-axis-lock property controls whether scrolling is locked to one dimension at a time or freely follows movement in two dimensions. By default, browsers may lock the scroll axis, ignoring minor perpendicular scrolling, when scrolling is nearly vertical or horizontal.

New in Chrome Android

The following features are now available in Chrome Android:

  • Responsive iframes: The frame-sizing CSS property sets the size of an <iframe> element to that of it contents, to avoid scrolling in the iframe. Embedded documents allow this with the <meta name="responsive-embedded-sizing"> element and request resizing in the embedding page by calling window.requestResize().
  • Iterator includes(): The includes() method of an Iterator object returns true when an item yielded by the iterator is the same as a given value. It's similar to the includes() method of arrays.
  • Iterator join(): The join() method of an Iterator object returns a string concatenation of all the iterator's items, separated by commas or a given separator string. It's similar to the join() method of arrays.
  • Iterator.zip() and Iterator.zipKeyed(): The Iterator.zip() and Iterator.zipKeyed() static methods return new iterators that aggregate items from multiple iterables. You can use them to iterate jointly, to get all of the items at the same position in each iterable.

New in Edge

The following features are now available in Edge:

  • Responsive iframes: The frame-sizing CSS property sets the size of an <iframe> element to that of it contents, to avoid scrolling in the iframe. Embedded documents allow this with the <meta name="responsive-embedded-sizing"> element and request resizing in the embedding page by calling window.requestResize().
  • Iterator includes(): The includes() method of an Iterator object returns true when an item yielded by the iterator is the same as a given value. It's similar to the includes() method of arrays.
  • Iterator join(): The join() method of an Iterator object returns a string concatenation of all the iterator's items, separated by commas or a given separator string. It's similar to the join() method of arrays.
  • Iterator.zip() and Iterator.zipKeyed(): The Iterator.zip() and Iterator.zipKeyed() static methods return new iterators that aggregate items from multiple iterables. You can use them to iterate jointly, to get all of the items at the same position in each iterable.

New in Firefox

The following features are now available in Firefox:

  • attr(): The attr() CSS function, in the context of any property, returns the value of an attribute of an HTML element, with the option to return it as a specific type or unit. You can set a default value for missing or invalid attributes.
  • Retriable module loading: You can retry importing a module that failed to import previously. Failed module imports, through the import JavaScript statement, the import() JavaScript syntax, or dynamically created <script src="…" type="module"> HTML elements, aren't cached.
  • at-rule(): The at-rule() function, when used with @supports, checks if a CSS at-rule is supported. For example @supports at-rule(@starting-style) checks if the @starting-style at-rule is supported.

New in Firefox for Android

The following features are now available in Firefox for Android:

  • attr(): The attr() CSS function, in the context of any property, returns the value of an attribute of an HTML element, with the option to return it as a specific type or unit. You can set a default value for missing or invalid attributes.
  • Retriable module loading: You can retry importing a module that failed to import previously. Failed module imports, through the import JavaScript statement, the import() JavaScript syntax, or dynamically created <script src="…" type="module"> HTML elements, aren't cached.
  • at-rule(): The at-rule() function, when used with @supports, checks if a CSS at-rule is supported. For example @supports at-rule(@starting-style) checks if the @starting-style at-rule is supported.

New in Safari

The following features are now available in Safari:

  • Anchor positioning: Anchor positioning places an element based on the position of another element. For example, you can place a tooltip next to the content it references.
  • Anchor positioning transforms: Anchor positioned elements take CSS transforms on their anchor elements into account.
  • Case-sensitive attribute selector: The s identifier in a CSS attribute selector matches attribute values case-sensitively in document languages like HTML where attribute values are case-insensitive.
  • color-mix() with three or more colors: The color-mix() CSS function accepts three or more colors.
  • Customizable <select>: The <select> element's appearance, including the button, selected option, picker dropdown, and options, can be customized using CSS.
  • ReadableStream.from(): The ReadableStream.from() static method converts an iterable or async iterable object, such as an array or async generator function, into a readable stream.
  • Service workers static routing: The service worker install event's addRoutes method declares resource paths that should either be fetched from the network or the cache, to bypass the service worker and improve performance.
  • stretch: The stretch CSS keyword expands a box as needed to fit its contents until the maximum size is reached, without preserving the content's preferred aspect ratio.
  • text-autospace: The text-autospace CSS property sets whether and how to insert spaces in inter-script text (such as when mixing Latin and Chinese characters) and around punctuation.
  • WebOTP: The OTPCredential API represents a one-time-password (OTP).

New in Safari on iOS

The following features are now available in Safari on iOS:

  • Anchor positioning: Anchor positioning places an element based on the position of another element. For example, you can place a tooltip next to the content it references.
  • Anchor positioning transforms: Anchor positioned elements take CSS transforms on their anchor elements into account.
  • Case-sensitive attribute selector: The s identifier in a CSS attribute selector matches attribute values case-sensitively in document languages like HTML where attribute values are case-insensitive.
  • color-mix() with three or more colors: The color-mix() CSS function accepts three or more colors.
  • Customizable <select>: The <select> element's appearance, including the button, selected option, picker dropdown, and options, can be customized using CSS.
  • ReadableStream.from(): The ReadableStream.from() static method converts an iterable or async iterable object, such as an array or async generator function, into a readable stream.
  • Service workers static routing: The service worker install event's addRoutes method declares resource paths that should either be fetched from the network or the cache, to bypass the service worker and improve performance.
  • stretch: The stretch CSS keyword expands a box as needed to fit its contents until the maximum size is reached, without preserving the content's preferred aspect ratio.
  • text-autospace: The text-autospace CSS property sets whether and how to insert spaces in inter-script text (such as when mixing Latin and Chinese characters) and around punctuation.
  • WebOTP: The OTPCredential API represents a one-time-password (OTP).