Support for extensions using XUL/XPCOM or the Add-on SDK was removed in Firefox 57, released November 2017. As there is no supported version of Firefox enabling these technologies, this page will be removed by December 2020.
Add-ons using the techniques described in this document are considered a legacy technology in Firefox. Don't use these techniques to develop new add-ons. Use WebExtensions instead. If you maintain an add-on which uses the techniques described here, consider migrating it to use WebExtensions.
Starting from Firefox 53, no new legacy add-ons will be accepted on addons.mozilla.org (AMO) for desktop Firefox and Firefox for Android.
Starting from Firefox 57, only extensions developed using WebExtensions APIs will be supported on Desktop Firefox and Firefox for Android.
Even before Firefox 57, changes coming up in the Firefox platform will break many legacy extensions. These changes include multiprocess Firefox (e10s), sandboxing, and multiple content processes. Legacy extensions that are affected by these changes should migrate to use WebExtensions APIs if they can. See the "Compatibility Milestones" document for more information.
A wiki page containing resources, migration paths, office hours, and more, is available to help developers transition to the new technologies.
Modules in this section implement low-level APIs. These modules fall roughly into three categories:
fundamental utilities such as collection. Many add-ons are likely to want to use modules from this category.
building blocks for higher level modules, such as events and worker. You're more likely to use these if you are building your own modules that implement new APIs, thus extending the SDK itself.
privileged modules that expose powerful low-level capabilities such as window/utils and net/xhr. You can use these modules in your add-on if you need to, but should be aware that the cost of privileged access is the need to take more elaborate security precautions. In many cases these modules have simpler, more restricted analogs among the "High-Level APIs" (for example, windows or request).
These modules are still in active development, and we expect to make incompatible changes to them in future releases.
- Create CommonJS module loaders.
chromemodule gives an Add-on SDK add-on access to the Components object, which in turn gives it access to a large set of privileged low-level Firefox APIs.
- Constructor for a console instance.
- Functionality similar to Python's traceback module.
- Re-exports three objects from three other modules:
- Provides one of the building blocks for those modules that use content scripts to interact with web content, such as
- Provides functions to modify a page content.
- Used by SDK modules that can load web content and attach content scripts to it.
- Used in the internal implementation of SDK modules which use content scripts to interact with web content.
- Helper functions for inheritance.
- Provides an API for creating namespaces for objects, which effectively may be used for creating fields that are not part of objects public API.
- Implementation of promises to make asynchronous programming easier.
- Enables you to extend the Firefox Developer Tools.
event/coremodule allows the creation of APIs to broadcast and subscribe to events.
- Create objects that broadcast events.
- Creates Firefox frames (i.e. XUL
<iframe>elements) that are not displayed to the user.
- Provides helper functions for working with platform internals like frames and browsers.
- Provides access to the local filesystem with the NodeJS path module API.
- Provides streams for reading and writing bytes.
- Provides access to the local filesystem.
- Provides streams for reading and writing text.
- Functional helper methods.
- Functions for working with type detection.
- The SDK's module loader.
- Enables you to read content from a URI.
- Provides access to
- Create, modify, and retrieve bookmarks.
- Helper functions for working with favicons.
- Access the user's browsing history.
- Implement XPCOM objects, factories, and services.
- Listen to changes to the Preferences system in Firefox.
- Access the Preferences system in Firefox.
- Enables an SDK module loaded into a child process to access web content in the child process and communicate with modules in the main process.
- Enables you to load modules, and privileged parts of your add-on in general, into child processes.
- Modify styles using stylesheet files or CSS rules.
- Helper functions for working with stylesheets.
- An implementation of the node.js
- Access, set and clear environment variables.
- API for working with the application observer service.
- Access to information about Firefox's runtime environment.
- Register callbacks that are called when a module is unloaded.
- Information about the application on which your add-on is running.
- Functions for working with XUL
tabsand the XUL
- Implements the
assertinterface defined in the CommonJS Unit Testing specification version 1.1.
- Test harness setup and execution.
- An HTTP server for the Mozilla platform, which can be used in unit tests.
- Sets up unit tests.
- Helper methods used in the CommonJS Unit Testing suite.
- Add a button to the Firefox user interface.
- Add a toggle button to the Firefox user interface.
- Create UI component IDs.
- Enables you to create sidebars.
- Add a toolbar to the Firefox user interface.
- Helper functions for working with arrays.
- A simple list-like class and utilities for using it.
- Functions to deprecate code.
- Building blocks for composing lists.
- Test strings containing URLs against simple patterns.
- Functions for working with objects.
- Generate or parse UUIDs.
- Functions for working with browser windows.