Writing your own plugins

Plugins can provide almost any file in a BundleWrap repository: bundles, custom items, hooks, libs, etc.

Notable exceptions are nodes.py and groups.py. If your plugin wants to extend those, use a lib instead and ask users to add the result of a function call in your lib to their nodes or groups dicts.

If your plugin depends on other libraries, make sure that it catches ImportErrors in a way that makes it obvious for the user what's missing. Keep in mind that people will often just git pull their repo and not install your plugin themselves.

Starting a new plugin

Step 1: Clone the plugins repo

Create a clone of the official plugins repo on GitHub.

Step 2: Create a branch

You should work on a branch specific to your plugin.

Step 3: Copy your plugin files

Now take the files that make up your plugin and move them into a subfolder of the plugins repo. The subfolder must be named like your plugin.

Step 4: Create required files

In your plugin subfolder, create a file called manifest.json from this template:

    "desc": "Concise description (keep it somewhere around 80 characters)",
    "help": "Optional verbose help text to be displayed after installing. May\ninclude\nnewlines.",
    "provides": [
    "version": 1

The provides section must contain a list of all files provided by your plugin.

You also have to create an AUTHORS file containing your name and email address.

Last but not least we require a LICENSE file with an OSI-approved Free Software license.

Step 5: Update the plugin index

Run the update_index.py script at the root of the plugins repo.

Step 6: Run tests

Run the test.py script at the root of the plugins repo. It will tell you if there is anything wrong with your plugin.

Step 7: Commit

Commit all changes to your branch

Step 8: Create pull request

Create a pull request on GitHub to request inclusion of your new plugin in the official repo. Only then will your plugin become available to be installed by bw repo plugin install yourplugin.

Updating an existing plugin

To release a new version of your plugin:

  • Increase the version number in manifest.json
  • Update the list of provided files in manifest.json
  • If you're updating someone elses plugin, you should get their consent and add your name to AUTHORS

Then just follow the instructions above from step 5 onward.