files/en-us/mozilla/firefox/releases/149/index.md
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.
<!-- Authors: Please uncomment any headings you are writing notes for -->[!NOTE] The release notes for this Firefox version are still a work in progress.
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).font-family: math property is now supported, and applied to {{mathmlelement('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).The {{CSSXRef("shape-outside")}} CSS property now supports the xywh() function as a value. This allows you to define a shape for inline content to wrap around, using distances from the left (x) and top (y) edges of the containing block and a width (w) and height (h). (Firefox bug 1983187).
The {{CSSXRef("vertical-align")}} CSS property is now a shorthand property for {{CSSXRef("alignment-baseline")}}, {{CSSXRef("baseline-shift")}} and {{CSSXRef("baseline-source")}} properties. (Firefox bug 1830771).
options.resizeQuality parameter is now supported by {{domxref("Window.createImageBitmap()")}} and {{domxref("WorkerGlobalScope.createImageBitmap()")}}.
In addition, the methods now allow both resize options (options.resizeWidth or options.resizeHeight) and image bitmap parameters (sx, sy, sw, and sh) to be set at the same time — previously setting both returned the unscaled source bitmap.
(Firefox bug 2010125).The HTMLSelectElement.showPicker() method is now supported for a list of options defined in a {{htmlelement("datalist")}}.
This allows the browser picker for a <datalist> to be programmatically launched when triggered by user interaction (Firefox bug 1998668).
The {{domxref("CloseWatcher")}} interface is now supported. This allows developers to implement components that can be closed using device-native mechanisms, such as the <kbd>Esc</kbd> on Windows or the <kbd>Back</kbd> key on Android, in the same way as built-in components such as dialogs and popovers. (Firefox bug 1966073).
DOM methods now allow wider range of characters for element and attribute names. Previously, DOM methods were far more restrictive, but now they allow the same set of characters as the HTML parser. The affected methods are: {{domxref("Document/createAttribute","createAttribute()")}}, {{domxref("Document/createAttributeNS","createAttributeNS()")}}, {{domxref("Document/createElement","createElement()")}} and {{domxref("Document/createElementNS","createElementNS()")}} of the {{domxref("Document")}} interface, {{domxref("Element/toggleAttribute","toggleAttribute()")}}, {{domxref("Element/setAttribute","setAttribute()")}}, {{domxref("Element/setAttributeNS","setAttributeNS()")}} of the {{domxref("Element")}} interface, {{domxref("DOMImplementation/createDocument","createDocument()")}} of the {{domxref("DOMImplementation")}} interface, and {{domxref("CustomElementRegistry/define","define()")}} and {{domxref("CustomElementRegistry/whenDefined","whenDefined()")}} of the {{domxref("CustomElementRegistry/whenDefined","whenDefined()")}} interface. (Firefox bug 1773312).
The {{domxref("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 {{domxref("RTCPeerConnection")}}.
Previously, captureStream() was available only as the non-standard mozCaptureStream() method.
(Firefox bug 2017708).
{{domxref("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 {{domxref("MediaStream")}} sources. (Firefox bug 2010427).
The {{domxref("HTMLMediaElement.captureStream()", "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).
tabId as a top-level parameter in {{WebExtAPIRef("action.isEnabled")}} and {{WebExtAPIRef("browserAction.isEnabled")}}. This change provides for compatibility with the Chrome implementation of action.isEnabled. (Firefox bug 2013477)extensions.openPopupWithoutUserGesture.enabled preference from Firefox 108. This change aligns Firefox's behavior with Chrome and Safari. (Firefox bug 1799344)winedowId is passed in {{WebExtAPIRef("action.openPopup")}} or {{WebExtAPIRef("browserAction.openPopup")}}, the window must be focused (active) for the popup to open. To open a popup in an unfocused window {{WebExtAPIRef("windows.update","windows.update(windowId, { focused: true })")}} must be called first. This change aligns Firefox behavior with Chrome. (Firefox bug 2011516)moz-extension: documents with {{WebExtAPIRef("tabs.executeScript")}}, {{WebExtAPIRef("tabs.insertCSS")}}, {{WebExtAPIRef("tabs.removeCSS")}}, {{WebExtAPIRef("scripting.executeScript")}}, {{WebExtAPIRef("scripting.insertCSS")}}, and {{WebExtAPIRef("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 {{WebExtAPIRef("runtime.onMessage")}} listener in the document's script, then sending a message to trigger execution of the required code.about:config preference called extensions.webextensions.pageActionIconDarkModeFilter.enabled and setting it to false.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 {{cssxref("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 {{cssxref(":buffering")}}, {{cssxref(":muted")}}, {{cssxref(":paused")}}, {{cssxref(":playing")}}, {{cssxref(":seeking")}}, {{cssxref(":stalled")}}, and {{cssxref(":volume-locked")}} allow you to style {{htmlelement("audio")}} and {{htmlelement("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).