# Plugin Authoring Guide Slopsmith's plugin system is the primary extension point. Each plugin lives in `plugins//` with a `plugin.json` manifest and can provide any combination of frontend (HTML/JS), backend (Python routes), settings UI, diagnostics, and visualization renderers. This guide is the entry point. Each topic below has a dedicated doc — read what's relevant to what you're building. ## Quickstart ```text plugins/my_plugin/ ├── plugin.json Manifest (required) — see docs/plugin-manifest.md ├── screen.html Optional — markup mounted at #plugin-my_plugin ├── screen.js Optional — runs in global scope on page load ├── routes.py Optional — exports setup(app, context) ├── settings.html Optional — settings-panel HTML └── requirements.txt Optional — pip deps auto-installed on load ``` The minimum viable plugin is a `plugin.json` with just `id` and `name`. Everything else is opt-in. ```json { "id": "my_plugin", "name": "My Plugin", "version": "0.1.0" } ``` Capability-aware plugins should also declare the `capability-pipelines.v1` standard and the domains they participate in. Legacy fields such as `nav`, `screen`, `settings`, `type: "visualization"`, shortcuts, overlays, and mixer faders still work, but native metadata lets diagnostics, the Capability Inspector, and migration tooling explain plugin behavior without scraping private globals. ## Topics | Topic | Doc | When to read | |---|---|---| | **Manifest reference** | [plugin-manifest.md](plugin-manifest.md) | Field-by-field reference for `plugin.json`. Read first. | | **Capability declarations** | [plugin-manifest.md#capabilities](plugin-manifest.md#capabilities) | Declaring provider/requester/observer intent with `capability-pipelines.v1`. | | **Visualization contracts** | [plugin-visualization-contracts.md](plugin-visualization-contracts.md) | Building a highway renderer (setRenderer), an overlay layer, or a note-state provider. | | **Plugin styles** | [plugin-styles.md](plugin-styles.md) | Shipping a plugin-owned prebuilt stylesheet via `styles: "assets/plugin.css"`. | | **Audio mixer faders** | [plugin-audio-mixer.md](plugin-audio-mixer.md) | Plugin produces audio outside the song `