Skip to content

GitHub Action

Browser Platform Publisher

v3.5.0 Latest version

Browser Platform Publisher


Browser Platform Publisher

Publish your browser extension anywhere using a single action


Copy and paste the following snippet into your .yml file.


- name: Browser Platform Publisher

uses: PlasmoHQ/bpp@v3.5.0

Learn more about this action in PlasmoHQ/bpp

Choose a version

plasmo logo

See License Follow PlasmoHQ on Twitter Watch our Live DEMO every Friday Join our Discord for support and chat about our projects typescript-action status

Browser Platform Publisher

A GitHub action from Plasmo to publish your browser extension to every web store/add-ons marketplace. This action and its dependencies are open-sourced under the MIT license. The core modules are:


In order to use this action, you will need to create a json file that contains the keys and optional configuration for each browser you wish to publish to.

To help you create it, we have provided a JSON schema that can be used with editors that support it, such as Visual Studio Code. This schema will provide intellisense and validation to ensure that your configuration is correct.

  "$schema": ""

NOTE: You should only specify the browsers you wish to publish to. If there are any invalid configuration, the action will fail! I.e, no empty key allowed such as "chrome": {}.

Each browser option is made of the following:

  • Mandatory browser specific tokens (see token guide)

  • Optional parameters:

    • zip: The zip file containing the extension. The manifest.json file must be in the root of the zip file.

      {version} can be used in the name and will be replaced by the version from your versionFile.

    • file: An alias for the zip property.

    • verbose: Enable verbose logging for the specific browser.

    • versionFile: Relative path to a json file which has a version field. Defaults to package.json

    • notes: [Edge Only] Provide notes for certification to the Edge Add-ons reviewers.

The final json might look like this:

  "$schema": "",
  "chrome": {
    "zip": "chromium_addon_{version}.zip",
    "clientId": "1280623",
    "clientSecret": "1!9us4",
    "refreshToken": "7&as$a89",
    "extId": "akszypg"
  "firefox": {
    "file": "firefox_addon.xpi",
    "extId": "aaaaaaa-aaaa-bbbb-cccc-dddddddddddd",
    "apiKey": "ab214c4d",
    "apiSecret": "e%f253^gh"
  "edge": {
    "zip": "",
    "clientId": "aaaaaaa-aaaa-bbbb-cccc-dddddddddddd",
    "clientSecret": "ab#c4de6fg",
    "productId": "aaaaaaa-aaaa-bbbb-cccc-dddddddddddd",
    "accessTokenUrl": "",
    "notes": "This is a test submission"

Once you got your json file, you will need to copy its content into a GitHub secret. You can do this by following the instructions on creating encrypted secrets for a repository. In this example, we will use the secret name BPP_KEYS.

Then, the action can be used as follows:

  - name: Browser Platform Publish
    uses: PlasmoHQ/bpp@v3
      keys: ${{ secrets.BPP_KEYS }}

Action Input Parameters (with)

The following parameters can be used to override the configuration in the keys file. Specifying options here will override those in the keys file.

    required: true
    description: "A JSON string containing the keys to be used for the submission process. (This should be a secret)"
    alias: [zip, file]
    required: false
    description: "The extension zip artifact to be published on all stores."
    required: false
    description: "The file to be published to a specific store."
    alias: [edge-notes]
    required: false
    description: "[Edge only] A release note cataloging changes."
    required: false
    description: "Print out more verbose logging."
    required: false
    description: "The path to a json file with a version field, default to package.json."

Custom input parameters example

  - name: Browser Platform Publish
    uses: PlasmoHQ/bpp@v3
      keys: ${{ secrets.BPP_KEYS }}
      chrome-file: "chrome/myext_chromium_${{ env.EXT_VERSION }}.zip"
      edge-file: "edge/myext_edge_${{ env.EXT_VERSION }}.zip"
      edge-notes: "This is a test submission"
      version-file: "src/manifest.json"
      verbose: true


Join the Discord channel!


MITPlasmo Corp.