Plugin Overview

Windshift includes a plugin system built on Extism and WebAssembly (WASM). Plugins run in a sandboxed environment and can extend Windshift with custom functionality.

How It Works

Plugins are compiled to WASM modules and loaded by Windshift at startup. Each plugin runs in an isolated sandbox with configurable resource limits:

Setting Default
Execution timeout 5 seconds
Memory limit 64 MB

Plugins communicate with Windshift through host functions - a set of APIs that provide access to email, HTTP, storage, SCM, and more.

Plugin Structure

A plugin consists of:

  1. manifest.json - Metadata, entry point, and extension definitions
  2. plugin.wasm - The compiled WASM binary
  3. Static assets - Optional HTML/JS/CSS files for UI extensions

Example manifest:

{
  "name": "my-plugin",
  "version": "1.0.0",
  "description": "A custom plugin for Windshift",
  "entryPoint": "plugin.wasm",
  "extensions": [
    {
      "point": "admin.tab",
      "id": "my-plugin-tab",
      "label": "My Plugin",
      "displayMode": "iframe",
      "component": "index.html",
      "group": "Tools"
    }
  ]
}

Extension Points

Plugins can register extensions at predefined points in the Windshift UI:

Extension Point Description
admin.tab Adds a tab to the admin panel

More extension points will be added in future releases.

Capabilities

Through host functions, plugins can:

  • Send HTTP requests - Call external APIs with configurable timeouts
  • Send emails - Use SMTP to send notifications
  • Store data - Persistent key-value storage per plugin
  • Run CLI commands - Execute system commands
  • Create comments - Add comments to work items
  • Interact with SCM - Create branches and link items to repositories
  • Log messages - Write to the Windshift server log

See Plugin API for the full host function reference.

Disabling Plugins

To run Windshift without the plugin system:

./windshift --disable-plugins

Or via environment variable:

export DISABLE_PLUGINS=true

What's Next