WebExtensions support on AMO

It’s been possible to submit WebExtensions add-ons to addons.mozilla.org (AMO) since February, but I wanted to take a moment to highlight some of the improvements we’ve made since then that make it much easier to get your Chrome or Opera add-on into AMO.

These features have all been deployed to AMO over the last couple of months and are available for use.

New linter

We are now using the add-ons linter for WebExtensions which means that when we parse a WebExtensions add-on, we are running through a new JavaScript-powered linter, instead of the Python one. This parsing occurs each time you upload a new add-on or a new version of an add-on.

It uses eslint to parse the JavaScript and a schema to verify that the WebExtensions manifest is correct. Because we’ve started to implement functionality in the new add-ons linter that didn’t exist in the old version, more things will be showing up as warnings.

As an example, if you request a permission in the manifest that Firefox doesn’t support, you’ll get a warning:


Relaxed upload criteria

If you’ve developed and add-on for Chrome or Opera, we’d like you to upload it to AMO. For this reason, we’ve relaxed a few criteria around AMO. Once you’ve verified that an add-on works correctly using about:debugging, you should then be able to upload it to AMO quite easily. We’ve hopefully made this easier through the following steps:

Optional add-on id

If your WebExtension does not have an id specified in the manifest.json, then AMO will generate an id for your add-on and add it to the add-on signing process. You can then get the add-on id from AMO and re-use that in later API calls, if needed.

The command line tool web-ext also supports optional ids.


AMO will now accept an add-on as a zip file or a crx file. It will still only emit xpi files that Firefox and other Mozilla projects can consume. In the case of a crx file, the extra data added by the Chrome store will be stripped out of the file.

We recommend using a tool like web-ext to generate the appropriate file for your add-on.

Comments in the manifest file

Although comments are not valid in a JSON file, Chrome supports comments in the manifest.json file. To keep compatibility with Chrome, the addons-linter and hence AMO now support comments in the manifest file, but only comments starting with a double slash (//).


Finally, AMO now supports translations in the manifest. This again follows the Chrome standard, so that:

//in manifest.json:
"default_locale": "en",
"name": "__MSG_appName__",

//in _locales/en/messages.json:
  "appName": {
    "message": "My Add-on",
    "description": "The name of the add-on."

//in _locales/de/messages.json:
  "appName": {
    "message": "Mein Add-on"

The manifest will be parsed and the translations automatically entered into AMO. You need to ensure that default_locale is set in the manifest for the localisations to be activated. On the first upload, AMO will process the translations:

Screenshot 2016-07-14 09.44.11

If you’d like to get involved then join our mailing list or check out our repositories on Github.

2 responses

  1. jon wrote on :

    im ready to leave firefox after 10 years of using it you guys said firefox 46 would be the start of web exts it wasnt and no where to find a web ext you then said firefox 47 would support them nope not at all and still no where to even find a web ext now your saying they will be in firefox 48 so i thought id download the nightly 50.0 thinking hey there might be web exts in that NONE and still NO WHERE to download them is this just a big practical joke to get under chromes skin.. i dont find it funny at all very very dissapointed in firefox right now as there is no sign anywhere of web exts that are supposedly ready ill stick with you guys until 48 comes out

  2. Mike wrote on :

    AMO should allow upload diferent version of extension with same UUID


    myextension@com e10s Firefox 47.0 – 51.0
    myextension@com noe10s Firefox 38.0 – 46.0
    myextension@com webextension Firefox 47.0 – 51.0

    Opera addon site made this when it changed for blink engine

    Navigator Extension (to blink)
    Opera Extension (to old opera)

    when user arrive with old opera its is redirected to Opera Extension (to old opera) and Navigator Extension (to blink) to new blink…

    Everytime firefox updates its addon engine we need create a new addon page, that is bad imo. We lost users tracking even when