Firefox 160 release notes for developers (Stable)
This article provides information about the changes in Firefox 160 that affect developers. Firefox 160 was released on November 10, 2026.
Changes for web developers
>HTML
No notable changes.
CSS
- The
::-webkit-input-placeholderpseudo-element is now supported as an alias of::placeholder, for compatibility with websites that use it to style the placeholder text of<input>and<textarea>elements. (Firefox bug 2083700).
JavaScript
No notable changes.
APIs
- The
WebTransport()constructor now accepts theheadersoption, which adds custom HTTP headers to the extendedCONNECTrequest that sets up the session. The headers that the server sends in its response are available in theWebTransport.responseHeadersproperty once the session is established. (Firefox bug 2081470, Firefox bug 2033220). - The
WebTransport.exportKeyingMaterial()method has been updated to match the current specification. Thecontextargument is now required, and a newoutputLengthargument specifies the number of bytes of keying material to derive. Previously, the method always returned 32 bytes. Code that omits either argument will need to be updated. (Firefox bug 2079306). - The
incomingMaxBufferedDatagramsandoutgoingMaxBufferedDatagramsproperties of theWebTransportDatagramDuplexStreaminterface are now supported. They replace the non-standardincomingHighWaterMarkandoutgoingHighWaterMarkproperties, which have been removed. These properties represent the maximum number of incoming datagrams that can be queued while waiting to be read, and the maximum number of outgoing datagrams that can be queued for sending before backpressure is applied. (Firefox bug 2023587). - The
WebTransport()constructor now supports thedatagramsReadableTypeoption. Setting it tobytesmakes the transport's stream of incoming datagrams,transport.datagrams.readable, a readable byte stream. You can then use aReadableStreamBYOBReaderto read each datagram into a buffer that you supply and reuse, instead of receiving a newUint8Arrayfor every datagram. (Firefox bug 2007755). - The
anticipatedConcurrentIncomingUnidirectionalStreamsandanticipatedConcurrentIncomingBidirectionalStreamsproperties of theWebTransportinterface are now supported, along with the correspondingoptionsproperties that can be used to set them in theWebTransport()constructor. These properties represent the maximum number of incoming unidirectional and bidirectional streams, respectively, that the application expects the server to have open at the same time. (Firefox bug 2007825). - On-device speech recognition using the Web Speech API is now available on desktop, enabling on-device real-time speech-to-text conversion in 40 languages. Recognition is not supported on Android, and neither is remote (cloud) recognition. (Firefox bug 2080908).
Removals
- The non-standard
MozScrolledAreaChangedevent is no longer dispatched to web pages. It used to be fired at the document when the size of the page's scrollable area changed. It is now available only to Firefox user interface. You can restore the event for web pages by setting thelayout.scrolled-area-changed.content.enabledpreference totrue. (Firefox bug 2079865).
Changes for add-on developers
runtime.PlatformInfonow returnsarchasarm64for ARM64 platforms. Previously, it returnedaarch64. This aligns the value returned by Firefox for ARM64 platforms with Chrome. (Firefox bug 2080310).
Experimental web features
These features are shipping in Firefox 160 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.
-
Render blocking:
dom.element.blocking.enabledThe
blocking="render"attribute and value is now supported for the<link>,<script>, and<style>HTML elements. This allows for rendering to be blocked until the element's stylesheet has loaded or its script has run, including for elements that don't block rendering by default, such as scripts and stylesheets added with JavaScript. (Firefox bug 1751383). -
Lazy loading for video and audio:
media.lazy_loading.enabledThe
loadingattribute of the<video>and<audio>elements, and theHTMLMediaElement.loadingproperty that reflects it, are now supported. Withloading="lazy", the browser defers loading the media, loading the video's poster image, and startingautoplayplayback until the element is near the viewport. (Firefox bug 2005072). -
Speculation rules:
Speculation-Rulesheader:dom.speculation_rules.enabledSupport for the
Speculation-RulesHTTP response header is enabled by default in Nightly. It lists the URLs of external files containing speculation rules, as an alternative to an inline<script type="speculationrules">element. The header applies to top-level documents only, and each file must be served with theapplication/speculationrules+jsonMIME type. (Firefox bug 2020709). -
CSSNumericValuearithmetic methods:layout.css.typed-om.enabledThe
add(),sub(),mul(), anddiv()methods of theCSSNumericValueinterface in the CSS Typed Object Model API are now supported in Nightly. They add, subtract, multiply, or divide numeric values, respectively; for example,CSS.px(10).add(CSS.px(5))adds two pixel values. The result is aCSSUnitValue(15pxin this example) when it can be simplified to a single unit, or a math expression such as aCSSMathSumwhen it can't be simplified (for example, when addingpxto%). (Firefox bug 2081689). -
Canvas 2D color space:
gfx.canvas.colorspace.enabledThe
colorSpaceoption ofHTMLCanvasElement.getContext()andOffscreenCanvas.getContext()is now supported for2dcontexts.CanvasRenderingContext2D.getContextAttributes()returns the selected color space. Image data also has a color space: theImageData.colorSpaceproperty returns it. ThecolorSpacesetting of theImageData()constructor and thecreateImageData()andgetImageData()methods sets it. The supported values are"srgb"and"display-p3". Pixel data isn't converted between color spaces yet, sogetImageData()returns the same pixels whichever color space is requested. (Firefox bug 1841326).