Build a plugin
Fork the template, declare a manifest, implement activate(), and ship — the shortest path from zero to a working paged plugin against the published packages.
In short start from plugin-template — a runnable starter that consumes
only the published @paged-media packages (no workspace links). Declare a
manifest, implement activate(host), validate, and load.
1. Fork the template
The template is a clean-checkout proof: it builds against the published canaries with nothing else wired. Clone it, install, and you have a bundle that activates in the editor.
2. Declare the manifest
Give the bundle an id (reverse-DNS, e.g. media.example.hello), an apiVersion,
and the capabilities and
contributions it needs. Request the
least you can — the host grants only what you declare.
3. Implement activate(host)
The host handle (@paged-media/plugin-api) is the typed surface for everything
your manifest authorized: read/edit the document, register a panel or tool,
publish or consume data, render to a scene layer. Editing the document uses the
same mutation channel the scripting layer drives.
4. Validate and load
paged-plugin validate manifest.jsonThe CLI checks the manifest against the schema before the host ever sees it. A manifest that requests an unknown capability or malformed contribution fails here.
Learn from the real ones
The five first-party plugins are the worked examples — see the plugins overview for what each one does and how it uses the contract.
Contributions
The surfaces a plugin can add to the editor — tools, panels, commands, object types, importers/exporters, and more — generated from the manifest schema.
REST API
The editor-server REST surface — authentication, files, account, billing, fonts, and image search — generated from the server's OpenAPI specification.