# Plugin Overview Windshift includes a plugin system built on [Extism](https://extism.org/) 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: ```json { "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](/docs/05-plugins/03-plugin-api) for the full host function reference. ## Disabling Plugins To run Windshift without the plugin system: ```bash ./windshift --disable-plugins ``` Or via environment variable: ```bash export DISABLE_PLUGINS=true ``` ## What's Next - [Creating Plugins](/docs/05-plugins/02-creating-plugins) - Build and package a WASM plugin - [Plugin API](/docs/05-plugins/03-plugin-api) - Available host functions and their signatures