diff --git a/AGENTS.md b/AGENTS.md index 2447ba3d..803b9baa 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -49,7 +49,7 @@ Plugins are the primary extension point. Each plugin lives in `plugins//` "version": "1.0.0", "private": false, "type": "visualization", - "nav": { "label": "My Plugin", "screen": "plugin-my_plugin" }, + "nav": { "label": "My Plugin" }, "screen": "screen.html", "script": "screen.js", "styles": "assets/plugin.css", diff --git a/CLAUDE.md b/CLAUDE.md index 8b90aea4..0798886e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -38,7 +38,7 @@ Plugins are the primary extension point. Each plugin lives in `plugins//` "version": "1.0.0", "private": false, "type": "visualization", - "nav": { "label": "My Plugin", "screen": "plugin-my_plugin" }, + "nav": { "label": "My Plugin" }, "screen": "screen.html", "script": "screen.js", "styles": "assets/plugin.css", @@ -56,6 +56,8 @@ Plugins are the primary extension point. Each plugin lives in `plugins//` All fields except `id` and `name` are optional. Plugins can have any combination of frontend (screen/script), backend (routes), and settings. +`nav.screen` and `nav.icon` are **not consumed anywhere** — the plugin loader's nav dropdown builder always derives the screen id as `"plugin-" + plugin.id` (`static/js/plugin-loader.js`), regardless of what a manifest declares. Don't set either field; they have no effect. + `version` and `private` are advisory metadata — the plugin loader does not currently consume them, but plugins commonly include them for publishing/tooling purposes. `description`, `category`, and `icon` are **optional, additive v3 Pedalboard metadata** (surfaced in `/api/plugins`, consumed by the v3 Plugins page `static/v3/plugins-page.js`). `description` is a short one-sentence summary shown under the pedal name. `category` (`audio | creation | practice | game | tools`, free-form; unknown/absent → curated default → `"other"`) picks which pedalboard the plugin sits on. `icon` is an assets-relative thumbnail path (e.g. `"assets/thumb.png"`, ~square ~256×256, same containment rule as `styles`, served via `/api/plugins//assets/...`); if omitted the loader auto-detects `assets/thumb.png`, and plugins with no thumbnail get a default pedal graphic. All three are backward-compatible — omit them and the plugin still loads. See [docs/plugin-v3-ui.md](docs/plugin-v3-ui.md). diff --git a/plugins/folder_library/CLAUDE.md b/plugins/folder_library/CLAUDE.md index a44ea027..548ef857 100644 --- a/plugins/folder_library/CLAUDE.md +++ b/plugins/folder_library/CLAUDE.md @@ -69,7 +69,7 @@ Routes that receive a JSON body must import `Request` from fastapi explicitly an ### 9. Plugin id must be consistent everywhere The plugin id (`folder_library`) must match in: -- `plugin.json` → `"id"` and `"nav.screen"` +- `plugin.json` → `"id"` - `screen.js` → `PLUGIN_ID` constant and `API` constant (`/api/plugins/folder_library`) - `routes.py` → `APIRouter(prefix="/api/plugins/folder_library")` diff --git a/plugins/folder_library/plugin.json b/plugins/folder_library/plugin.json index 02b8a931..8657f035 100644 --- a/plugins/folder_library/plugin.json +++ b/plugins/folder_library/plugin.json @@ -3,7 +3,7 @@ "name": "Folder Library", "version": "1.8.0", "bundled": true, - "nav": { "label": "Folders", "screen": "plugin-folder_library" }, + "nav": { "label": "Folders" }, "screen": "screen.html", "script": "screen.js", "routes": "routes.py"