# `plugin.json` manifest reference Every plugin lives in `plugins//` and must declare a `plugin.json` manifest. JSON Schema for this format ships at [`schema/plugin.schema.json`](../schema/plugin.schema.json) and is enforced in CI for in-tree plugins. ## Full example ```json { "id": "my_plugin", "name": "My Plugin", "version": "1.0.0", "private": false, "standards": ["capability-pipelines.v1", "plugin-runtime-idempotent.v1"], "screen": "screen.html", "script": "screen.js", "styles": "assets/plugin.css", "routes": "routes.py", "settings": { "html": "settings.html", "server_files": ["my_plugin.db", "my_plugin_models/"] }, "diagnostics": { "server_files": ["my_plugin.diag.json"], "callable": "diagnostics:collect" }, "settings_schema": { "schema_version": "1", "packable_keys": ["enabled"] }, "ui": { "settings": [{ "id": "my-plugin-settings", "region": "plugin-settings", "label": "My Plugin" }], "ui.plugin-screens": [{ "id": "my-plugin-screen", "region": "plugin.main", "label": "My Plugin" }] }, "capabilities": { "library": { "roles": ["provider"], "operations": ["query-page", "query-artists", "query-stats"], "mode": "active", "compatibility": "none", "ownership": "multi-provider", "safety": "safe", "version": 1 } } } ``` All fields except `id` and `name` are optional. Runtime files such as `screen`, `script`, `routes`, and `settings.html` should correspond to declared `capabilities`, `ui`, diagnostics, or settings metadata. ## Fields ### `id` (required, string) Snake-case identifier. Used to namespace `localStorage` keys, build the plugin's screen id (`plugin-`), namespace the backend logger (`slopsmith.plugin.`), and as the directory name in diagnostics bundles. Cannot contain slashes, dots are encoded by the sibling-import loader (see [plugin-sibling-imports.md](plugin-sibling-imports.md)). ### `name` (required, string) Human-readable name shown in UI surfaces. ### `version` (string, optional) Plain semver string. Advisory only — the plugin loader does not consume this. Plugins commonly include it for publishing/tooling purposes. ### `private` (boolean, optional) Advisory metadata for plugin authors. Not consumed by the loader. ### `standards` (string[], expected) Versioned contracts the plugin participates in. Plugin manifests are expected to declare `"capability-pipelines.v1"` for Slopsmith-facing behavior and metadata. Omit it only for metadata-only or transitional manifests with no capability participation yet. Declare `"plugin-runtime-idempotent.v1"` only when repeated script hydration cannot duplicate wrappers, listeners, timers, DOM roots, diagnostics contributors, jobs, media nodes, or capability participants. ### `capability_api` (object, optional) Explicit capability API marker. Most plugins can use the compact `standards` form instead: ```json { "capability_api": { "standard": "capability-pipelines.v1", "version": 1 } } ``` ### `screen` (string, optional) Path to HTML file (relative to plugin dir). Mounted at `#plugin-` in the SPA. ### `script` (string, optional) Path to JS file (relative to plugin dir). Loaded via `