MDN’s new design is in Beta! A sneak peek:

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 (AMO) for desktop Firefox and Firefox for Android.

Starting from Firefox 57, WebExtensions will be the only supported extension type. Desktop Firefox and Firefox for Android will not load other extension types.

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 WebExtensions 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.


Use the Home.panels API to add custom panels to the browser's home page.

Method Overview

void register(in string id, in function optionsCallback)
void unregister(in string id)
void install(in string id)
void uninstall(in string id)
void update(in string id)
void setAuthenticated(in string id, in boolean isAuthenticated)


Layout types

Constant Description
Layout.FRAME A single view that appears as the content of the panel. The default (and only supported) panel layout.

View types

Constant Description
View.LIST Display items in a list.
View.GRID Display items in a grid.

Item types

Constant Description
Item.ARTICLE Title and description of are the focus of the item. The default article for View.LIST views.
Item.IMAGE A large image is the focus of the item. The default image for View.GRID views.
Item.ICON Experimental: an icon (optional), a title (optional), a background image or a background color are the focus of the item. Used in conjunction with View.GRID to build "speed dial" panels.

ItemHandler types

Constant Description
ItemHandler.BROWSER Item URL opens in the browser. The default URL for all views.
ItemHandler.INTENT Item URL launches an Android intent.

Panel options

When registering a panel, you must pass in an optionsCallback function that returns an object with these attributes.

Attribute Type Required Description
title string yes Title for the panel.
layout Layout no Specifies the way views are presented in a panel.
views array yes The views to display in a panel.
oninstall function no Callback function called when panel is installed.
onuninstall function no Callback function called when panel is uninstalled.
auth object no Specifies authentication UI.

View options

Attributes that can be specified by objects in the views array.

Attribute Type Required Description
type View yes Specifies the way the view displays items.
dataset string yes Unique ID of the dataset the view displays.
backImageUrl string no Image to display as "back" button when a filter is applied.
itemType Item no Specifies the layout of individual items.
itemHandler ItemHandler no Specifies action for item URLs.
empty object no Specifies UI to show when there is no data available. If this is not specified, a default image and text appears in the view.
onrefresh function no Callback for pull-to-refresh to update dataset. save() must be called on the HomeStorage for this dataset to end refresh animation. If no callback is specified, pull-to-refresh is disabled for this view.
header object no

New in Firefox 42.

The object that specifies a header image for GRID view types. Header images are positioned at the top of the page and extend across the entire page width.

The header object contains two properties:

  • image_url: URL pointing to the image to display in the header
  • url: URL to open when the header image is clicked.

Auth options

Attributes that can be specified in a panel's auth object.

Attribute Type Required Description
authenticate function yes Callback that is called when the user clicks a button to try to authenticate.
messageText string yes Text to display above authentication button.
buttonText string yes Text to display in authentication button.
imageUrl string no Image to display above authentication text.

Empty view options

Attributes that can be specified in a view's empty object.

Attribute Type Required Description
text string no Text to display in empty view.
imageUrl string no Image to display above text. This image is displayed in a 90dp square (90px on mdpi devices, 180px on xhdpi devices).



Registers a panel. An installed panel must always be registered during startup. This method does not add a panel to about:home.

void register(
  in string id,
  in function optionsCallback
A unique id for this add-on.
A function that returns an options object for this panel.


Unregisters a panel.

void unregister(
  in string id
A unique id for this add-on.


Adds a panel to the set of active panels on about:home.

void install(
  in string id
A unique id for this add-on.


Removes a panel from the set of active panels on about:home.

void uninstall(
  in string id
A unique id for this add-on.


Updates a panel. It does so by re-running the options callback from the panel registration.

void update(
  in string id
A unique id for this add-on.


Sets the authentication state of a panel.

void setAuthenticated(
  in string id,
  in boolean isAuthenticatd
A unique id for this add-on.
Whether or not the panel is authenticated.


const PANEL_ID = "";
const DATASET_ID = "";

function optionsCallback() {
  return {
    title: "My Panel",
    views: [{
      type: Home.panels.View.LIST,
      dataset: DATASET_ID,
      // optional, only used if there's a filter applied after clicking on an item
      backImageUrl: "myBackIcon.png",
      // optional, defaults to BROWSER (can also specify INTENT to launch an intent)
      itemHandler: Home.panels.ItemHandler.BROWSER

    // optional, defaults to FRAME (only supported layout for v1)
    layout: Home.panels.Layout.FRAME,

    // optional, used to show authentication UI (added in Firefox 32)
    auth: {
      authenticate: function authenticate() {
        // do some stuff to authenticate the user
        Home.panels.setAuthenticated(PANEL_ID, true);
      messageText: "Please log in to this panel",
      buttonText: "Log in"

Home.panels.register(PANEL_ID, optionsCallback);

See also

Some demo add-ons are available on Github:

Document Tags and Contributors

 Last updated by: rebloor,