From MozillaWiki
< Labs‎ | Jetpack‎ | Reboot‎ | JEP
Jump to: navigation, search

JEP 105 - Life-cycle

  • Champion: Aza Raskin -
  • Peeps: Dietrich Ayala, Myk Melez
  • Status: Implementation in Progress
  • Bug Ticket: bug 549324
  • Type: API


This JEP describes an API for handling the life-cycle of add-ons. In particular, it provides callback APIs for responding to various install and uninstall events.


All methods involving introspection and interaction with an add-on's environment live in the "self" module.

let self = require("self");

self.onInstall( function )

self.onUpgrade( function )

self.onUninstall( function )

The onInstall handler gets called on the first run of an extension. If an extension is uninstalled and reinstalled it gets called again (as the act of uninstalling removes all data associated with the add-on). onUpgrade get's called when an extension is upgraded.

Nothing is passed to the onInstall handler. An object which contains version info for the add-on prior to being updated gets passed to onUpgrade.

The onUninstall handler is called when the add-on is uninstalled, giving add-ons the opportunity to clean up files, preferences, annotations or to flip the bird at the user on the way out.

Enable/Disable There's no need for explicit support for enabling and disabling of add-ons here. When an add-on is disabled, any callbacks the code registered with require("unload").when() or require("unload").ensure() are automatically called, and when an addon is enabled, its code is re-evaluated and its exports.main() is called.

Use Cases

  • Show a welcome page/tutorial when you install an add-on.
  • Show a set of tooltips for the UI that an extension has added, in vivo to the interface.
  • Give a survey when you uninstall an add-on.
  • Clean up preferences, files, annotations, when you uninstall an add-on.