[
    {
        "javascript_apis": [
            "pageAction.getTitle",
            "pageAction.onClicked",
            "pageAction.setIcon",
            "pageAction.setTitle",
            "pageAction.show",
            "tabs.insertCSS",
            "tabs.onUpdated",
            "tabs.query",
            "tabs.removeCSS"
        ],
        "name": "apply-css",
        "description": "Adds a page action to the toolbar. Click the button to apply a red border using injected CSS. Click the button again to remove the CSS."
    },
    {
        "javascript_apis": [
            "extension.getURL",
            "runtime.onMessage",
            "tabs.executeScript",
            "tabs.query",
            "tabs.reload",
            "tabs.sendMessage"
        ],
        "name": "beastify",
        "description": "Adds a browser action icon to the toolbar. Click the button to choose a beast. The active tab's body content is then replaced with a picture of the chosen beast."
    },
    {
        "javascript_apis": [
            "bookmarks.create",
            "bookmarks.remove",
            "bookmarks.search",
            "browserAction.onClicked",
            "browserAction.setIcon",
            "tabs.onActivated",
            "tabs.onUpdated",
            "tabs.query"
        ],
        "name": "bookmark-it",
        "description": "Adds a bookmark button to the toolbar. Click the button to toggle a bookmark for the current page."
    },
    {
        "javascript_apis": [],
        "name": "borderify",
        "description": "Adds a solid red border to all webpages matching mozilla.org."
    },
    {
        "javascript_apis": [
            "alarms.clearAll",
            "alarms.create",
            "alarms.onAlarm",
            "pageAction.hide",
            "pageAction.onClicked",
            "pageAction.show",
            "tabs.get",
            "tabs.onActivated",
            "tabs.onUpdated",
            "tabs.query",
            "tabs.update"
        ],
        "name": "chill-out",
        "description": "Show a page action after a period of inactivity. Show cat gifs when the page action is clicked."
    },
    {
        "javascript_apis": [
            "commands.getAll",
            "commands.onCommand"
        ],
        "name": "commands",
        "description": "Demonstrates using the commands API to set up a keyboard shortcut. The shortcut created is accessed using Ctrl+Shift+Y (Command+Shift+Y on a Mac)."
    },
    {
        "javascript_apis": [
            "contextMenus.create",
            "contextMenus.onClicked",
            "contextMenus.remove",
            "contextMenus.update",
            "i18n.getMessage",
            "runtime.lastError",
            "tabs.executeScript"
        ],
        "name": "context-menu-demo",
        "description": "Demonstrates adding and manipulating context menu items using the contextMenus API."
    },
    {
        "javascript_apis": [
            "contextualIdentities.query",
            "tabs.create",
            "tabs.query",
            "tabs.remove"
        ],
        "name": "contextual-identities",
        "description": "List, create, and remove contextual identities."
    },
    {
        "javascript_apis": [
            "cookies.get",
            "cookies.onChanged",
            "cookies.remove",
            "cookies.set",
            "extension.getURL",
            "runtime.onMessage",
            "tabs.executeScript",
            "tabs.onUpdated",
            "tabs.query",
            "tabs.sendMessage"
        ],
        "name": "cookie-bg-picker",
        "description": "Allows the user to customize the background color and tiled pattern on sites the visit, and also saves their preferences via a cookie, reapplying them whenever they revisit a site they previously customized."
    },
    {
        "javascript_apis": [
            "runtime.onMessage",
            "runtime.sendMessage",
            "storage.local"
        ],
        "name": "embedded-webextension-bootstrapped",
        "description": "Demonstrates how to use an embedded WebExtension to port from a bootstrapped extension."
    },
    {
        "javascript_apis": [
            "notifications.create",
            "runtime.connect",
            "runtime.onConnect",
            "runtime.onMessage",
            "runtime.sendMessage",
            "storage.local"
        ],
        "name": "embedded-webextension-sdk",
        "description": "Demonstrates how to use an embedded WebExtension to port from an SDK-based add-on."
    },
    {
        "javascript_apis": [],
        "name": "emoji-substitution",
        "description": "Replaces words with emojis."
    },
    {
        "javascript_apis": [],
        "name": "eslint-example",
        "description": "Demonstrates how to configure a WebExtension with eslint."
    },
    {
        "javascript_apis": [
            "browserAction.onClicked",
            "runtime.openOptionsPage",
            "storage.local"
        ],
        "name": "favourite-colour",
        "description": "An example options page, letting you store your favourite colour."
    },
    {
        "javascript_apis": [
            "omnibox.onInputChanged",
            "omnibox.onInputEntered",
            "omnibox.setDefaultSuggestion",
            "tabs.create",
            "tabs.update"
        ],
        "name": "firefox-code-search",
        "description": "Demonstrates how to use the omnibox API."
    },
    {
        "javascript_apis": [
            "browserAction.onClicked",
            "browsingData.remove",
            "notifications.create",
            "storage.local"
        ],
        "name": "forget-it",
        "description": "Demonstrates how to use the browsingData API."
    },
    {
        "javascript_apis": [
            "browserAction.onClicked",
            "identity.getRedirectURL",
            "identity.launchWebAuthFlow",
            "notifications.create"
        ],
        "name": "google-userinfo",
        "description": "Demonstrates how to use the identity API."
    },
    {
        "javascript_apis": [
            "history.deleteUrl",
            "history.search",
            "pageAction.show",
            "tabs.onUpdated",
            "tabs.query"
        ],
        "name": "history-deleter",
        "description": "History API demo: deletes history items for a given domain"
    },
    {
        "javascript_apis": [
            "downloads.erase",
            "downloads.getFileIcon",
            "downloads.open",
            "downloads.removeFile",
            "downloads.search"
        ],
        "name": "latest-download",
        "description": "Shows the last downloaded item, and lets you open or delete it."
    },
    {
        "javascript_apis": [
            "cookies.getAll",
            "tabs.query"
        ],
        "name": "list-cookies",
        "description": "This extensions list the cookies in the active tab."
    },
    {
        "javascript_apis": [
            "runtime.sendMessage"
        ],
        "name": "mocha-client-tests",
        "description": "This example shows two methods of testing a WebExtension: running tests from within the add-on, and running tests from the command line using Karma"
    },
    {
        "javascript_apis": [
            "browserAction.onClicked",
            "runtime.connectNative"
        ],
        "name": "native-messaging",
        "description": "Example of native messaging, including a Python application and a WebExtension which exchanges messages with it."
    },
    {
        "javascript_apis": [
            "storage.local",
            "webNavigation.onCompleted"
        ],
        "name": "navigation-stats",
        "description": "Demonstration of the webNavigation API, showing basic stats about which pages you've visited."
    },
    {
        "javascript_apis": [
            "extension.getURL",
            "i18n.getMessage",
            "notifications.create",
            "runtime.onMessage",
            "runtime.sendMessage"
        ],
        "name": "notify-link-clicks-i18n",
        "description": "Shows a localized notification when the user clicks on links."
    },
    {
        "javascript_apis": [
            "browserAction.onClicked",
            "tabs.create"
        ],
        "name": "open-my-page-button",
        "description": "Adds a browser action icon to the toolbar. When the browser action is clicked, the add-on opens a page that was packaged with it."
    },
    {
        "javascript_apis": [],
        "name": "page-to-extension-messaging",
        "description": "Demonstrates how a web page and a content script can exchange messages. Visit https://mdn.github.io/webextensions-examples/content-script-page-script-messaging.html for the demo."
    },
    {
        "javascript_apis": [
            "storage.local"
        ],
        "name": "quicknote",
        "description": "Allows the user to make quick notes by clicking a button and entering text into the resulting popup. The notes are saved in storage."
    },
    {
        "javascript_apis": [],
        "name": "react-es6-popup",
        "description": "This is an example of creating a browser action popup UI in React and ES6 JavaScript."
    },
    {
        "javascript_apis": [],
        "name": "selection-to-clipboard",
        "description": "Demonstrates how to write to the clipboard from a content script"
    },
    {
        "javascript_apis": [
            "tabs.create",
            "tabs.duplicate",
            "tabs.getZoom",
            "tabs.highlight",
            "tabs.move",
            "tabs.onMoved",
            "tabs.onRemoved",
            "tabs.query",
            "tabs.reload",
            "tabs.remove",
            "tabs.setZoom"
        ],
        "name": "tabs-tabs-tabs",
        "description": "Demonstrates tab manipulation: opening, closing, moving, zooming tabs."
    },
    {
        "javascript_apis": [
            "topSites.get"
        ],
        "name": "top-sites",
        "description": "Demonstration of the topSites API."
    },
    {
        "javascript_apis": [
            "extension.getBackgroundPage",
            "webRequest.onBeforeSendHeaders"
        ],
        "name": "user-agent-rewriter",
        "description": "Demonstrates using the webRequest API to rewrite the User-Agent HTTP header."
    },
    {
        "javascript_apis": [
            "runtime.onMessage",
            "runtime.sendMessage"
        ],
        "name": "webpack-modules",
        "description": "Demonstrates how to use webpack to package npm modules in a WebExtension."
    },
    {
        "javascript_apis": [
            "windows.create",
            "windows.getAll",
            "windows.getCurrent",
            "windows.remove",
            "windows.update"
        ],
        "name": "window-manipulator",
        "description": "Demonstrates how to manipulate windows: opening, closing, resizing windows."
    }
]
