It has been a while since there has been a Jetpack-related post on this blog; 2014 has been a pretty busy year with several major Jetpack-related milestones completed in the last year or so and we wanted to post a summary of everything we’ve shipped this year.
Moving the SDK docs to MDN
The MDN migration was actually started late in 2013 but it was an important move so I wanted to call it out. For a long time the SDK docs were maintained in Github as markdown files and then hosted on addons.mozilla.org. This system had some downsides that moving to MDN solved:
- we could not update the docs easily
- the path to contributing to the docs was a long and winding road: submit a pull request to Github, then wait for the next Firefox release for the static docs to be updated.
A little over a year ago Will Bamberg, Erik Vold and myself spent an entire day importing the bulk of the existing docs into MDN, with Will doing the lion’s share of the work and cleanup. Since then we’ve been able to update the SDK’s documentation easily, quickly and without having to bug Mozilla IT folks. We’ve gotten documentation contribution from the community as well – the SDK landing page alone has eleven contributors.
Firefox 29 shipped last April with an all-new visual design, and along with it came that single largest addition of new apis to the Add-on SDK. Working with Firefox design guru Stephen Shorlander, the Jetpack team created modern, sensible, easy to use apis for toolbar buttons, toolbars and sidebars. Thanks in particular to Matteo Feretti, Erik Vold and Irakli Gozalishvili for their hard work.
Multiprocess ( ‘e10s’ ) support
In 2014 we were very fortunate to have Tomislav Jovanovic’s Google Summer of Code project approved. Tomislav ( aka ‘zombie’ ) did an amazing job of coordinating between the Jetpack and e10s teams to fix, well, basically all of our issues with this final multiprocess project. We could not have done it without him, I suspect.
JPM & ‘Native Jetpacks’
Or, ‘cfx is dead – long live jpm and npm!’
When the Jetpack team gathered as part of a Developer Tools team offsite in Paris in late 2013, we decided to tackle two key related issues:
- Third party modules should be as easy to publish and consume as they are with Node.js, leveraging npm.
- packaging and testing add-ons should be much simpler, borrowing from the workflow currently enjoyed by either node.js developers, or chrome extension developers.
The Python-based cfx tool created during the second age of Jetpack has long been the source of problems. It is complex in part because it was created in a time prior to the inclusion of the SDK in Firefox, and this complexity made it difficult to make changes to. As well, a persistent series of issues were reported against cfx due to problematic windows support.
We decided to start over and create a new tool for packaging and testing extensions from the command-line, as well as a new and more streamlined way of reloading and iterating on extensions in Firefox.
JPM & AMO compatibility
If you intend to publish your add-on on AMO and submit it for full review, we do not recommend using jpm until Firefox 37 hits the release channel – this is due to important changes in how jpm-based add-ons bootstrap themselves. In the meantime, we are prioritizing a few issues that cause problems for developers using the cfx tool provided with SDK 1.17 and jpm at the same time.
The Devtools SDK
The Devtools SDK project has been a major focus of work over the last 6-9 months, with lots of great work from Irakli Gozalishvili, Luca Greco and Jan Odvarko. With a mind to encouraging the kind of generativity we originally saw in the Firebug extension ecosystem, we’ve built new tool pane and theming apis that already form the basis for powerful extensions like Firebug 3 and Ember Inspector. Upcoming enhancements include a simple and devtools-friendly context menu api and an api called ‘Object Printers’ that allows developers to provide custom object representations in the tools.
Perhaps one of the biggest pieces of this effort is something we call ‘Director’ that will allow devtools extensions to transparently connect to any web pages or apps that the Firefox Developer Tools can connect to. This is a key capability – any tool that the community creates to support 3rd party web frameworks will automatically be a first class citizen, and will enjoy the same remote debugging capabilities the built-in tools do.
In 2014 we decided to deprecate three top-level modules:
- Widget has long been the source of many terrible bugs, and we found that usage was mainly limited to use cases now covered by the button apis introduced in Firefox 29. We’re removing the api in this bug.
- Addon Page’s main utility was to create a page like about:addons that had no top toolbar. This went away when we switched to Australis and the toolbar was made a requirement for any tab. This was removed for Firefox 35 in bug 1072081
- Context Menu barely survived the e10s project, thanks to the heroic efforts of Dave Townsend. It is however deprecated and once the new ‘context menu 2′ api rides the train into Firefox release channel we will set a definite timeline for removal.