Skip to content

Manifest reference

The manifest.json at the root of a plugin’s folder. The plugin’s files have fixed places beside it: the view in view/index.html, the schemas in schemas/payload.schema.json and schemas/decision.schema.json, the icon in icon.svg, the decision’s markdown in templates/decision.md.j2, and samples in samples/.json.

Pinrail checks every manifest against its JSON Schema, manifest.schema.json in the pinrail-sdk package, before it loads or installs a plugin. Point your editor at it with $schema to check a manifest as you write it. For a walk through writing one, see Writing a plugin.

KeyRequiredValueWhat it does
nameYesa string matching ^[a-z][a-z0-9_-]*$The plugin’s identifier: agents submit to it, and it is unique among installed plugins. Lowercase letters, digits, _ and -, starting with a letter.
versionYesa stringA semantic version such as "1.2.0". The major version is a promise to every review created under it.
pinraila stringThe oldest Pinrail the plugin works with, such as ">=0.1". An older app refuses the plugin and names the version it needs.
titlea stringWhat the app calls the plugin in its lists and settings. Defaults to name.
descriptiona stringA sentence on what the plugin is for.
use_whena stringWhen an agent should ask with this plugin, in one line: what situation it is for. pinrail plugins shows it to an agent choosing a plugin.
settings_schemaan object, or nullThe plugin’s own settings, each a row in Settings › Plugins: an object schema of booleans, strings and numbers, each with a default, inline or by $ref. A schema that breaks these rules costs the plugin its settings, not its place.
shortcutsa list of {keys, does, group}, or nullThe keys the view answers: listed in the app’s keyboard help and forwarded when the view’s frame has no focus. A list that breaks these rules costs the plugin its shortcuts.
summary{request, outcome}, or nullHow the app sums up the plugin’s reviews: which arrays of the payload and the decision to count, grouped by which field, with a label and a tone (danger, warning, info, success or neutral) for each value. A plugin without one shows no summary. A summary that does not read costs the plugin its summaries.
attachments{accept, max_size, max_count}, or nullThe files the plugin takes beside a payload, sent with pinrail submit --attach. The payload names each one {"$attachment": "<name>"}, and the view reads it with plugin.attachment(name). Without this key a plugin takes none. A block that breaks these rules keeps the plugin from installing.
devtrue or false; defaults to falseMarks a plugin under development in the app’s listings.

If settings_schema, shortcuts or summary is invalid, the plugin loses only that feature, and the problem is shown on its row in Settings. Any other invalid key means the plugin cannot be used. The formats of settings_schema and shortcuts are described in Settings and keys of a plugin. pinrail plugins check <folder> checks a plugin folder against the same schema, together with the files at the places the folder’s layout gives them.