Including addons

    Melon provides an automated system for including extensions in your project. The addons are downloaded and included during the download build step. Addons can be included in the project config (melon.json).

    {
      // Your options here
      "addons": {
        "ublock": {
          "id": "uBlock0@raymondhill.net",
          "url": "https://github.com/gorhill/uBlock/releases/download/1.39.0/uBlock0_1.39.0.firefox.xpi"
        }
      }
    }
    

    Note that the id is the gecko application id specified in the manifest.json.

    {
      // ...
    
      "browser_specific_settings": {
        "gecko": {
          "id": "uBlock0@raymondhill.net",
          "strict_min_version": "60.0"
        }
      }
    
      // ...
    }
    

    Specifying location in customizable ui

    By default, when an addon with a toolbar button, it will placed next to the hamburger menu. However, you may want to place it somewhere else. To do this, you must change the customizable ui in a similar way to how you would to remove pocket.

    You are going to want to open engine/browser/components/customizableui/CustomizableUI.jsm. At the top, you want to import the ExtensionCommon module.

    const { makeWidgetId } = ChromeUtils.import(
      'resource://gre/modules/ExtensionCommon.jsm'
    ).ExtensionCommon
    

    Then, at the top add a constant with the id of the addon at the top of the file, for example:

    const kUBlockOriginID = 'uBlock0@raymondhill.net'
    

    Now, you can go down to the navbarPlacements array (around line 240) and add

    `${makeWidgetId(kUBlockOriginID)}-browser-action`,
    

    To the array where you want the icon to appear, for example:

    let navbarPlacements = [
      'back-button',
      'forward-button',
      'stop-reload-button',
      Services.policies.isAllowed('removeHomeButtonByDefault')
        ? null
        : 'home-button',
      'spring',
      `${makeWidgetId(kUBlockOriginID)}-browser-action`,
      'urlbar-container',
      'spring',
      'save-to-pocket-button',
      'downloads-button',
      AppConstants.MOZ_DEV_EDITION ? 'developer-button' : null,
      'fxa-toolbar-menu-button',
    ].filter((name) => name)
    

    Finally, export the changes you have made:

    melon export-file browser/components/customizableui/CustomizableUI.jsm