mirror of
https://github.com/storytold/figcraft.git
synced 2026-10-24 10:27:00 -06:00
Sandboxed WebAssembly plugins whose API is the command registry: - figcraft-plugin (new crate, L2): the figcraft-plugin.json manifest (menu commands with parameters, read/write access, command allowlist) and the sandbox: wasmi (pure Rust, no JIT, also in the web build) with fuel metering, a memory cap, no WASI and seven host functions (call, selection, reply_len, reply_read, log, notify, set_output). - Engine: plugin.list / plugin.import / plugin.remove / plugin.run, plugins.runLast (Alt+Cmd+P; Ctrl+Alt+Shift+P on Windows/Linux) and plugins.manage. A run is one undo step (Session::grouped, which command.batch now uses too) and is rolled back when it fails. Files, other documents, the undo history, dialogs and plugins are off limits; read-only plugins can't change the document. Installed plugins live in the preferences; development plugins re-read their module every run. - UI: installed plugins in the Plugins menu, a parameters form drawn from the manifest, Manage plugins, Plugins > Development > Import plugin from manifest. - plugins/: a no_std Rust SDK and two example plugins (Tidy names, Swatch grid), built for wasm32 by `cargo xtask plugins` (part of `cargo xtask wasm`). - Docs: docs/plugins.md (manifest, permissions, limits, ABI, SDK), docs/mcp.md, docs/control-protocol.md, README, ROADMAP, parity. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
26 lines
994 B
JSON
26 lines
994 B
JSON
{
|
|
"id": "org.figcraft.examples.swatch-grid",
|
|
"name": "Swatch grid",
|
|
"version": "1.0.0",
|
|
"description": "Makes a grid of colour swatches from a palette of hex colours.",
|
|
"main": "swatch_grid.wasm",
|
|
"api": 1,
|
|
"permissions": {
|
|
"access": "write",
|
|
"commands": ["view.get", "shape.rectangle", "text.create", "select.set"]
|
|
},
|
|
"commands": [
|
|
{
|
|
"id": "grid",
|
|
"label": "Swatch grid…",
|
|
"params": [
|
|
{ "name": "palette", "label": "Palette", "type": "text", "default": "#FF5A5F, #FFB400, #00A699, #007A87, #7B0051, #3D3D3D" },
|
|
{ "name": "columns", "label": "Columns", "type": "number", "default": 3, "min": 1, "max": 24 },
|
|
{ "name": "size", "label": "Swatch size", "type": "number", "default": 64, "min": 8, "max": 512 },
|
|
{ "name": "gap", "label": "Gap", "type": "number", "default": 16, "min": 0, "max": 256 },
|
|
{ "name": "labels", "label": "Label each swatch", "type": "boolean", "default": true }
|
|
]
|
|
}
|
|
]
|
|
}
|