Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ Plugins are the primary extension point. Each plugin lives in `plugins/<name>/`
"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",
Expand Down
4 changes: 3 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Plugins are the primary extension point. Each plugin lives in `plugins/<name>/`
"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",
Expand All @@ -56,6 +56,8 @@ Plugins are the primary extension point. Each plugin lives in `plugins/<name>/`

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/<id>/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).
Expand Down
2 changes: 1 addition & 1 deletion plugins/folder_library/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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"`
Comment thread
coderabbitai[bot] marked this conversation as resolved.
- `screen.js` → `PLUGIN_ID` constant and `API` constant (`/api/plugins/folder_library`)
- `routes.py` → `APIRouter(prefix="/api/plugins/folder_library")`

Expand Down
2 changes: 1 addition & 1 deletion plugins/folder_library/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Loading