Firefox 149 release notes for developers (Beta)

This article provides information about the changes in Firefox 149 that affect developers. Firefox 149 is the current Beta version of Firefox and ships on March 24, 2026.

Note: The release notes for this Firefox version are still a work in progress.

Changes for web developers

HTML

  • The popover global attribute now supports the hint value. Popovers with the hint value will not close auto popovers when they are displayed, but will close other hint popovers. (Firefox bug 1867743).

MathML

  • The CSS font-family: math property is now supported, and applied to <math> elements by default. This ensures that websites can use an appropriate math font and/or MathML without having to know what fonts are present on the underlying OS. (Firefox bug 2014703).

CSS

APIs

DOM

Media, WebRTC, and Web Audio

  • The HTMLMediaElement.captureStream() method is now supported. This returns an object that streams the real-time capture of the content in the element. The stream can be used, for example, as a source for a WebRTC RTCPeerConnection. Previously, captureStream() was available only as the non-standard mozCaptureStream() method. (Firefox bug 2017708).

  • MediaElementAudioSourceNode now respects the media element's volume when capturing audio for all types of sources (as required by the specification). Previously, setting the volume of the element did not affect the captured audio for MediaStream sources. (Firefox bug 2010427).

  • The HTMLMediaElement.mozCaptureStream() method now captures raw audio from the source without applying the media element's volume, regardless of the type of source the media element is playing (as required by the specification). Prior to this change, the media element's volume affected the volume of the captured stream. (Firefox bug 2010427).

WebDriver conformance (WebDriver BiDi, Marionette)

General

  • Updated the screenshot implementations for both the WebDriver BiDi and WebDriver classic protocols to correctly return an error when the requested screenshot area exceeds the maximum supported dimensions, rather than silently clipping it. (Firefox bug 1994148).
  • Updated the Actions implementation for both the WebDriver BiDi and WebDriver classic protocols to allow a scroll action of input source type wheel to scroll more than the visual viewport dimensions. (Firefox bug 1962355).

WebDriver BiDi

  • Added support for automatic user prompt handling, which can be configured through capabilities with the session.new command. (Firefox bug 1905086).
  • Added the browser.setDownloadBehavior command, which lets clients allow or prohibit the downloads and also set a custom download folder. This behavior can be configured per session or per user contexts. (Firefox bug 1989022).
  • Added the script.realmCreated and script.realmDestroyed events for worker realms (for dedicated, shared and service workers). (Firefox bug 1936770).
  • Fixed an issue where the browsingContext.userPromptOpened and browsingContext.userPromptClosed events incorrectly reported the top-level context ID instead of the iframe's context ID on Android. (Firefox bug 2007385).
  • Fixed the serialization for DOM nodes to stop exposing User Agent specific shadow roots. (Firefox bug 2016673).
  • Updated the logic of applying different settings to new browsing contexts to make sure that in the case of creating a browsing context with the window.open command, emulations, viewport overrides and preload scripts apply before the command returns. (Firefox bug 1985997, Firefox bug 2005546, and Firefox bug 2005558).

Marionette

  • Improved several WebDriver classic commands to handle implicit and pageLoad timeouts in line with the script timeout, allowing null values to disable the timeouts. (Firefox bug 2008345).

Changes for add-on developers

  • The ability of extensions to dynamically execute code in their moz-extension: documents with tabs.executeScript, tabs.insertCSS, tabs.removeCSS, scripting.executeScript, scripting.insertCSS, and scripting.removeCSS is deprecated. (Firefox bug 2011234) The feature is no longer available in Firefox Nightly, and the beta and release versions of Firefox provide a warning in the tab's console. This restriction will apply to all versions of Firefox 152 and later. (Firefox bug 2015559) As an alternative, an extension can run code in its documents dynamically by registering a runtime.onMessage listener in the document's script, then sending a message to trigger execution of the required code.
  • The implicit CSS filter applied to page action SVG icons on dark themes is deactivated in Nightly builds (Firefox bug 2001318) and will be deactivated in other Firefox editions from version 152 (Firefox bug 2016509). You can test page action SVG icons with the CSS filter disabled in other Firefox editions by creating a boolean about:config preference called extensions.webextensions.pageActionIconDarkModeFilter.enabled and setting it to false.

Experimental web features

These features are shipping in Firefox 149 but are disabled by default. To experiment with them, search for the appropriate preference on the about:config page and set it to true. You can find more such features on the Experimental features page.

  • <attr-type> values in attr() CSS function: layout.css.attr.enabled

    The attr() CSS function now supports <attr-type> values. This allows you to specify how an attribute value is parsed into a CSS value and take those values directly from data-*. (Firefox bug 1986631 & Firefox bug 1998245).

  • color-mix() accepts multiple color arguments: layout.css.color-mix-multi-color.enabled

    The color-mix() CSS function now supports multiple <color> values, rather than just two. This allows you to mix many colors and set the percentages of each. (Firefox bug 2007772).

  • Media-based pseudo-classes: dom.media.pseudo-classes.enabled

    The media-based pseudo-classes :buffering, :muted, :paused, :playing, :seeking, :stalled, and :volume-locked allow you to style <audio> and <video> elements based on their current state, such as playing or paused. (Firefox bug 1707584, Firefox bug 2014512).

  • alpha & colorspace attributes in color input elements (Nightly only): dom.forms.html_color_picker.enabled

    The HTML <input type="color"> element supports alpha & colorspace attributes. (Firefox bug 1919718).

  • @container style() queries (Nightly): layout.css.style-queries.enabled

    The @container CSS at-rule supports style() queries. This allows you to check if a container has a valid CSS declaration, a CSS property, or a custom property, and apply styles to its children accordingly. (Firefox bug 2014404).

  • CSS Typed Object Model Level 1: layout.css.typed-om.enabled

    The CSS Typed Object Model Level 1 specification is being implemented. In this release, support for the to() method of the CSSNumericValue interface was added, allowing the conversion of a CSS numeric value from one unit to another. (Firefox bug 1278697).

  • JPEG XL image support: Rust-based decoder: image.jxl.enabled

    The previous C++ JPEG XL image decoder has been replaced with a new Rust-based implementation that uses the jxl-rs library. (Firefox bug 1986393).