Every plugin has a plugin.yaml manifest, and the whole document sits under a top-level plugin: key. This is the real, parsed shape. Fields not listed here are ignored.
A minimal manifest
plugin:
id: markdown-exporter
name: Markdown Exporter
version: 1.0.0
description: Exports the unified model to Markdown documentation.
id, name, version, and description are required. The id is lowercase with digits and hyphens; version is semantic versioning, MAJOR.MINOR.PATCH.
Identity and metadata
| Field | Required | Notes |
|---|---|---|
id | yes | Lowercase, digits, hyphens. The plugin’s stable identifier. |
name | yes | Human-readable name. |
version | yes | Semantic version. |
description | yes | One line on what the plugin does. |
author | no | |
license | no | |
homepage | no | |
category | no | For example exporter, curation-engine, page, tool. |
language | no | The language the plugin was written in. |
tags | no | A list of strings. |
Loading
plugin:
loadOnStart: true # load at startup; omit for lazy loading on first use
loadOnStart is a boolean. A plugin without it loads lazily the first time something calls it.
Resources and access
A plugin only gets the network and filesystem access it declares here.
plugin:
resources:
max_memory: 16777216 # bytes; defaults to 8 MB
timeout_ms: 30000 # per-call timeout in ms; defaults to 30000
filesystem:
- /data/imports # paths the plugin may read
network:
http: true
allowed_hosts:
- api.example.com
- "*.amazonaws.com"
A request to a host not in allowed_hosts is denied at the boundary, and the plugin has no way to reach a path outside filesystem.
Capabilities and authorization
plugin:
requires-capabilities:
- network.http
- marketplace.ai
requires-authorization: false
requires-capabilities lists the host capabilities the plugin needs, as dot-paths. The host grants them before the plugin runs; until then the plugin stays locked. See permissions for the full model.
Schedules
A plugin can ask to run a handler on an interval:
plugin:
schedules:
- handler: refresh
interval-ms: 60000
Lifecycle and events
Lifecycle hooks and the events a plugin emits or subscribes to are declared in WIT, not in the manifest. A lifecycle: or subscribes: block in the YAML is ignored.