Firefox Tomorrow
Stable 149.0

Firefox 149.0

Tuesday, March 24, 2026 68 changes 6 categories

TL;DR

8 new features, 1 fix, 59 other changes. Highlight: View two pages side-by-side in a single window with the new Split View feature that makes it easier to compare information, research topi…

New 8 items
  1. 01

    View two pages side-by-side in a single window with the new Split View feature that makes it easier to compare information, research topics or work across two pages at once. To create a split view, select one or two tabs and choose Add to Split View or Open in Split View.

  2. 02

    Firefox now offers a free built-in VPN . Whether you’re using public Wi-Fi while traveling, searching for sensitive health information, or shopping for something personal, this feature gives you a simple way to stay protected. Once you sign in and turn it on, you can hide your location and IP address by routing it through a secure proxy while you browse in Firefox. You will get 50 GB of protection every month, with the option to turn it on or off for specific websites. This feature is progressively rolling out in the US, UK, Germany and France starting today. Enterprise note: This feature is not available in enterprise environments and is not being rolled out to users with enterprise policies. While it can currently be enabled manually, administrators will have the ability to disable it via enterprise policy starting April 7. In the meantime, organizations can use the BlockAboutConfig policy to prevent manual enablement. This feature is part of a progressive roll out. What is a progressive roll out? Certain new Firefox features are released gradually. This means some users will see the feature before everyone does. This approach helps to get early feedback to catch bugs and improve behavior quickly, meaning more Firefox users overall have a better experience.

  3. 03

    Many PDF files will now load significantly faster thanks to hardware acceleration.

  4. 04

    Firefox now automatically blocks notifications and permanently revokes permissions for any website flagged as malicious by SafeBrowsing . This prevents unsafe sites from sending background notifications to users, commonly used for ads, spam or phishing.

  5. 05

    You can now add a Share button to your toolbar via Customize Toolbar , making it easy to share the current tab using your Windows or macOS system sharing options.

  6. 06

    Address Autofill is enabled for users in Australia, India, Italy, Poland and Austria.

  7. 07

    Explore more of the web with new on-device translation support for Bosnian, Norwegian Bokmål, Serbian and Thai — plus improved accuracy for Croatian.

  8. 08

    Tab notes feature that lets you attach a short note to a web page is now available in Firefox Labs. You can use notes to remember why you opened a page, what you planned to do next or any details you want to revisit later. Please give notes a try and share your feedback on what works well and what can be improved.

Fixed 1 item
  1. 01

    Increased robustness of HTTP/3 upload performance for unstable network conditions.

Changed 5 items
  1. 01

    The TrustPanel combines the privacy and security panels accessed from the address bar to give the user one place to check the Privacy and Security settings of the current page. Learn more .

  2. 02

    Security has been strengthened by tightening the requirements for JavaScript files that can be loaded in the parent process, providing additional defense in depth against potential threats.

  3. 03

    On Linux, Firefox will now default to the XDG portal file picker if available, rather than the GTK3 one, which is usually better integrated with the user's desktop environment, and more powerful.

  4. 04

    Firefox error pages have a fresh new look, with updated visuals that better match the overall feel of Firefox. The redesigned pages create a more cohesive experience while making it clearer what went wrong.

  5. 05

    On Windows, Firefox will use the modern Windows.Devices.Geolocation API for geolocation instead of Windows 7 location API.

Security 1 item
  1. 01

    Various security fixes .

Developer 21 items
  1. 01

    Developer Information

  2. 02

    The toolbar of the Storage Inspector now has a button to delete all entries of the currently selected storage.

  3. 03

    Besides each CSS declaration related to a computed value shown in the Computed view there's now an icon to jump to it in the Rules view .

  4. 04

    With the release of Firefox 149, we are pleased to welcome the developers who contributed their first code change to Firefox in this release, 25 of whom were brand new volunteers! Please join us in thanking each of these diligent and enthusiastic individuals, and take a look at their contributions: aaryamannsingh3: 1968250

  5. 05

    Adds initial support for split view. This support covers:

  6. 06

    Inclusion of the split view ID in tabs.query , tabs.onUpdated , and tabs.Tab

  7. 07

    Documentation of the behavior when tabs.move or tabs.remove include tabs in a split view. ( Firefox bug 1993037 )

  8. 08

    Adds support for tabId as a top-level parameter in action.isEnabled and browserAction.isEnabled . This change provides for compatibility with the Chrome implementation of action.isEnabled . ( Firefox bug 2013477 )

  9. 09

    A user gesture is no longer required for action.openPopup and browserAction.openPopup to open a popup. This feature was available behind the extensions.openPopupWithoutUserGesture.enabled preference from Firefox 108. This change aligns Firefox's behavior with Chrome and Safari. ( Firefox bug 1799344 )

  10. 10

    If windowId is passed in action.openPopup or browserAction.openPopup , the window must be focused (active) for the popup to open. To open a popup in an unfocused window windows.update(windowId, { focused: true }) must be called first. This change aligns Firefox behavior with Chrome. ( Firefox bug 2011516 )

  11. 11

    The implementation of structuredClone has changed to instantiate objects in the this realm instead of the caller's realm. For backwards compatibility, the global scope of content scripts now includes its own structuredClone method that shadows the window.structuredClone method. For more information, see structuredClone in Sharing objects with page scripts ( Firefox bug 2017797 ).

  12. 12

    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.

  13. 13

    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 .

  14. 14

    <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 ).

  15. 15

    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 ).

  16. 16

    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 ).

  17. 17

    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 ).

  18. 18

    @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 ).

  19. 19

    base-select value for appearance CSS property : dom.select.customizable_select.enabled and layout.css.appearance-base.enabled The base-select value for the appearance CSS property, relevant only to the <select> element and ::picker(select) pseudo-element, allows you to fully style them. Currently only styling of the <select> element is supported. Styling of the ::picker(select) pseudo-element will be added in future versions. This feature is part of the Customizable Select elements work. Two preferences need be enabled to use it. ( Firefox bug 1974787 ).

  20. 20

    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 ).

  21. 21

    JPEG XL image support: Rust-based decoder (Nightly only): 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 ).

Web Platform 32 items
  1. 01

    showPicker() now supports text-based <input> elements with an associated <datalist> , displaying the autofill dropdown. See documentation .

  2. 02

    The functions xywh() and rect() were previously implemented for the clip-path and offset-path properties. They are now also available for the shape-outside property.

  3. 03

    The math value of the CSS font-family is now supported and used by default for MathML's <math> element. It enables Web developers to indicate special fonts with advanced math features should be used. Firefox will rely on the serif font for mathematics defined in Firefox preferences.

  4. 04

    Added support for the HTML attribute popover="hint" .

  5. 05

    Enabled media element pseudo-classes , such as :playing , :paused …

  6. 06

    Enabled the spec-compliant HTMLMediaElement.captureStream() API.

  7. 07

    Added support for closing popovers & dialogs with the Android Back Button, and implemented the CloseWatcher API for handling this in script.

  8. 08

    The new Reporting API provides a generic reporting mechanism for web applications to use to make reports available based on various platform features (for example Content Security Policy, Permissions-Policy or feature deprecation reports) in a consistent manner.

  9. 09

    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 ).

  10. 10

    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 ).

  11. 11

    The shape-outside CSS property now supports the xywh() and rect() functions as values. These functions were previously already implemented for the clip-path and offset-path properties, and are now also available for shape-outside . ( Firefox bug 1983187 ).

  12. 12

    The vertical-align CSS property is now a shorthand property for alignment-baseline , baseline-shift and baseline-source properties. ( Firefox bug 1830771 ).

  13. 13

    The <container-query> part of the @container at-rule condition is now optional. This allows matching against containers based solely on their names. ( Firefox bug 2016474 ).

  14. 14

    The "islamic-umalqura" calendar is now supported by Intl . This string will be in the list of calendars returned by Intl.supportedValuesOf() , and can be set as the options.calendar parameter in the DateTimeFormat() constructor . ( Firefox bug 2011505 ).

  15. 15

    The options.resizeQuality parameter is now supported by Window.createImageBitmap() and 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 ).

  16. 16

    The Reporting API is now supported for reporting Content Security Policy (CSP) and Integrity-Policy violations. This API allows CSPViolationReport and IntegrityViolationReport objects to be reported in violating pages using a ReportingObserver (reports can be filtered on the type property: "csp-violation" or "integrity-violation" ). A serialized version of the report objects can also be sent to a reporting server specified in the corresponding HTTP header — endpoint names and corresponding URLs must first be defined in the Reporting-Endpoints or Report-To HTTP response headers. ( Firefox bug 1976074 , Firefox bug 2008916 ).

  17. 17

    Up to Firefox 148, structuredClone.call(iframe.contentWindow) incorrectly created objects in the caller's realm instead of the iframe's realm. The implementation now instantiates objects in the this realm, so the method's behavior more closely matched the specification ( Firefox bug 2017797 ).

  18. 18

    The HTMLSelectElement.showPicker() method is now supported for a list of options defined in a <datalist> . This allows the browser picker for a <datalist> to be programmatically launched when triggered by user interaction ( Firefox bug 1998668 ).

  19. 19

    The CloseWatcher interface is now supported. This allows developers to implement components that can be closed using device-native mechanisms, such as the Esc on Windows or the Back key on Android, in the same way as built-in components such as dialogs and popovers . ( Firefox bug 1966073 ).

  20. 20

    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: createAttribute() , createAttributeNS() , createElement() and createElementNS() of the Document interface, toggleAttribute() , setAttribute() , setAttributeNS() of the Element interface, createDocument() of the DOMImplementation interface, and define() and whenDefined() of the whenDefined() interface. ( Firefox bug 1773312 ).

  21. 21

    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 ).

  22. 22

    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 ).

  23. 23

    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 ).

  24. 24

    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 ).

  25. 25

    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 ).

  26. 26

    Added support for automatic user prompt handling, which can be configured through capabilities with the session.new command. ( Firefox bug 1905086 ).

  27. 27

    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 ).

  28. 28

    Added the script.realmCreated and script.realmDestroyed events for worker realms (for dedicated, shared and service workers). ( Firefox bug 1936770 ).

  29. 29

    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 ).

  30. 30

    Fixed the serialization for DOM nodes to stop exposing User Agent specific shadow roots. ( Firefox bug 2016673 ).

  31. 31

    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 ).

  32. 32

    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 ).