Add-ons/developer/communication
Evolution in Add-on Development
WebExtensions are becoming the standard for add-on development in Firefox. At the same time, multiprocess Firefox (aka Electrolysis, or e10s) is also rolling out. These changes impact developers of XUL/XPCOM and SDK add-ons (some more than others), so we've created resources here to help ease the transitions.
This page contains timelines, migration paths, tutorials, and more. If you're a new developer and would like create an add-on, please head over to MDN.
Find out if you are affected
- Look up your add-on with the compatibility checker to see if it's impacted.
- Use this diagram to see which migration group applies to you.
- Read through the migration descriptions below.
What's New
- We're helping to make it easier to port to WebExtensions with Embedded WebExtensions in Firefox 51.
- Porting guides that map SDK and XUL APIs to available WebExtensions APIs
- How-to guides covering common add-on developer cases, like intercepting web requests and adding a button to the toolbar
Timelines & Roadmap
- See a graph of upcoming multiprocess Firefox (e10s) changes, organized by Firefox release dates.
- Check out our Trello page to see what the add-ons team is working on in the next three months.
Migration paths for developers affected by the changes
1) Has SDK add-on using low level APIs
Developers who created an SDK add-on using low-level APIs, which break with Multi-process Firefox (aka Electrolysis or e10s).
Migration Path
If your add-on code accesses web content using a low-level SDK APIs like window/utils or tabs/utils, then you will likely be affected.
Multi-process Firefox is currently going through a phased roll-out few months, so we urge you to test your add-ons for compatibility.
- If it breaks in Multi-process Firefox, your users will be impacted, and you will need to update your add-on. You can find documentation on how to make them compatible here.
- If it does not break in Multi-process Firefox, you will should add the
multiprocesspermission in package.json.
There are people on hand to assist you every Tuesday in the #addons channel at irc.mozilla.org. We're here to help!
~~Attention SDK developers~~
As of March 2016, SDK add-ons that were built using the cfx tool (Jetpack version 1.17 and lower) need to be repackaged using the newer jpm tool in order to continue being compatible with Firefox. jpm will be supported for as long as the SDK is.
2) Has SDK add-on using legacy APIs
Developers who created an SDK add-on, but uses either XPCOM or other legacy APIs.
Migration Path
Developers in this group potentially have to update their add-on twice--once for e10s compatibility (if using low-level APIs), and again for WebExtensions compatibility (because it uses legacy APIs).
- Use only high-level APIs - High-level APIs are e10s compatible and are more likely to have an equivalent WebExtensions API. You will have to migrate again once WebExtensions are fully ready, but it should be pretty easy to do in this case.
- Move to WebExtensions - Check the SDK/WebExtensions comparison chart to see if the APIs you need are available, and see what else we're doing to mitigate the impact of this transition. If you have a WebExtensions API you'd like to see implemented, file them here.
3) Has SDK add-on using only high level APIs
Developers who used the SDK for their add-ons using only high-level APIs. Might have played around with the Chrome extension API in the past.
Migration Path
- As of March 2016, SDK add-ons that were built using the cfx tool (Jetpack version 1.17 and lower) need to be repackaged using the newer jpm tool in order to continue being compatible with Firefox.
- If you already do that, your add-on will probably continue to work without problems, but we recommend you start looking into WebExtensions.
- Check the SDK/WebExtensions comparison chart to see if the APIs you need are available, and see what else we're doing to mitigate the impact of this transition. If you have a WebExtensions API you'd like to see implemented, file them here.
4) Has XUL or XPCOM add-on
Developers who created add-ons that don't rely on the SDK or WebExtensions.
Migration Path
The transition to WebExtensions impacts add-ons built on APIs like XUL and XPCOM most of all. We expect to remove support for these technologies in Firefox add-ons by the end of 2017. We hope this will give us enough time to help you migrate and provide WebExtension APIs that are suitable for replacing the features you might lose once we stop supporting these APIs.
If you’ve already updated your add-on for Multiprocess Firefox (e10s) compatibility, thank you for clearing this hurdle. To prepare for XUL/XPCOM deprecation, there are two available options, each with pros and cons:
- Migrate to the Add-ons SDK - since WebExtensions is in development and the first release is scheduled for March 2016, one option you have is to migrate to the SDK.
- Pros: the APIs provided by the SDK are well-documented and are fully functional. Migrating to WebExtensions later on will be easier.
- Cons: you will need to to stick to high-level APIs, which are e10s compatible and are more likely to have an equivalent WebExtensions API. You will have to migrate again once WebExtensions are fully ready, though it may be easier if you’ve already migrated to the SDK. Check the SDK/WebExtensions comparison chart to see if the APIs you need are available. If you have a WebExtensions API you'd like to see implemented, file them here.
- Migrate to WebExtensions - to avoid having to migrate to SDK and then again to WebExtensions, you can migrate directly to WebExtensions.
- Pros: you only have to migrate once.
- Cons: WebExtensions may not have all the APIs you need. Check the XUL/XPCOM-WebExtensions comparison chart to see if the APIs you need are available, and see what else we're doing to mitigate the impact of this transition. If you have a WebExtensions API you'd like to see implemented, file them here.
Managing the Impact
- Embedded WebExtensions - In Firefox 51, you can embed a WebExtensions add-on inside an existing SDK or bootstrapped add-on. This is especially useful to developers of SDK or bootstrapped add-ons who want to start migrating to WebExtensions and take advantage of new APIs like Native Messaging, but can’t fully migrate yet. It’s also useful for developers who want to complete data migration towards WebExtensions, and who want to take parts of their add-on that are not compatible with multiprocess Firefox and make them compatible.
- Tell us which APIs you need - If you have a WebExtensions API you'd like to see implemented, take a look at the new APIs criteria.
- WebExtensions Experiments (formerly Native.js) - We will soon announce a way to develop and experiment with APIs that go beyond what Chrome provides.
It is possible that not all add-ons will be able to migrate to WebExtensions without having to drop any features. But we want to work with you to get as many add-ons migrated as possible with the functionality you created intact. We invite you to contribute to its evolution, and we look forward to working with you.
Add-on Developer Communication Calendar
This calendar includes public meetings, scheduled blog posts, office hours, release milestones that affect add-on developers, and more. Links to add it to your own calendar: iCal | HTML
Blog Posts and Other Resources
WebExtensions
Blog Posts
- Sep 29, 2016: WebExtensions in Firefox 51
- Sep 13, 2016: WebExtensions and parity with Chrome
- Aug 25, 2016: WebExtensions in Firefox 50
- Aug 12, 2016: WebExtensions Taking Root
- July 27, 2016: Linting and Automatically Reloading WebExtensions
- July 21, 2016: New WebExtensions Guides and How-tos on MDN
- July 14, 2016: WebExtensions support on AMO
- June 9, 2016: WebExtensions in Firefox 49
- May 9, 2016: Results of the WebExtensions API Survey
- Apr 29, 2016: WebExtensions in Firefox 48
- Apr 14, 2016: Developing Extensions With Web-ext 1.0
- Mar 30, 2016: Tinkering with WebExtensions
- Mar 14, 2016: Advantages of WebExtensions for Developers
- Mar 11, 2016: WebExtensions in Firefox 47
- Feb 2, 2016: WebExtensions in Firefox 46
- Jan 9, 2016: WebExtensions First Impressions
- Dec 21, 2015: WebExtensions in Firefox 45
Other Resources
- Embedded WebExtensions let you embed a WebExtensions add-on inside an existing SDK or bootstrapped add-on
- Comparison with the Add-on SDK
- Comparison with XUL/XPCOM extensions
- How-to guides covering common add-on developer cases, like intercepting web requests and adding a button to the toolbar
- Browser compatibility table for all WebExtensions APIs
- Example add-ons created with WebExtensions APIs
Multiprocess (e10s) Firefox
Blog Posts
- Sep 7, 2016: Help make add-ons multiprocess compatible with Add-on Compatibility Reporter
- Aug 2, 2016: Multi-process Firefox and Add-ons: A Call to Action for Extension Developers
- June 17, 2016: Multi-process Firefox and AMO
- Apr 11, 2016: The “Why” of Electrolysis
- Nov 23, 2015: Test your add-ons for Multi-process Firefox compatibility
Other Resources
Migrating from XUL/XPCOM
Blog Posts
- Sep 28, 2016: How Video DownloadHelper Became Compatible with Multiprocess Firefox
- Apr 26, 2016: Migrating Popup ALT Attribute from XUL/XPCOM to WebExtensions
Other Resources
Get in Touch
- IRC:
- #teamaddons: team chat
- #addons: support for extensions, themes, plugins and addons.mozilla.org
- #amo: addons.mozilla.org bugs and development
- #amo-editors: add-on reviews and policy
- #extdev: extension development
- #themedev: theme development
- #webextensions: web extensions
- Mailing List: dev-addons
- Blog: https://blog.mozilla.org/addons/
- Forum: https://discourse.mozilla-community.org/c/add-ons