Build a Recall Plugin
A Recall plugin is a small package with a manifest and one entry file. The
current manifest contract is 0.1 and supports two plugin types:
| Type | Entry | Use it for |
|---|---|---|
| Theme | JSON | One or more light or dark color themes. |
| JavaScript | TypeScript or JavaScript | Headless behavior such as commands, sorting methods, menus, or notifications. |
JavaScript plugins do not render their own UI. They contribute data and actions through APIs that Recall renders and controls.
Plugin structure
Section titled “Plugin structure”A plugin can start with just a package.json and its source entry:
my-plugin/├── package.json└── src/ └── index.ts # JavaScript pluginFor a theme plugin, use a JSON entry instead:
my-theme/├── package.json└── src/ └── theme.jsonThe manifest lives under recall in package.json. It declares the contract
version, entry type, entry path, and required permissions. Add the public schema
for editor validation:
{ "$schema": "https://recall.jrtilak.dev/schemas/plugin-config/v0.1/schema.json", "name": "@example/my-plugin", "displayName": "My Plugin", "version": "1.0.0", "description": "A short description of the plugin.", "author": "Example Developer <https://example.com>", "recall": { "manifestVersion": "0.1", "permissions": ["registry.command"], "entry": { "runtime": "js", "file": "src/index.ts" } }}See Plugin Schema for every manifest field, permission, and validation rule.
Build the package
Section titled “Build the package”Use the official Plugin Creator from the directory containing the plugin or pass the plugin directory explicitly:
bunx @jrtilak-recall/plugin-creator build ./my-pluginThe command validates the manifest and entry, then writes a distributable
dist/manifest.json and the built entry. Do not edit the generated manifest;
change package.json and rebuild instead.
Create a minified archive ready for marketplace upload with:
bunx @jrtilak-recall/plugin-creator build ./my-plugin --minify --zipThis also creates dist.zip. Use --sourcemap for an external JavaScript
source map during development, or --out-dir <dir> to choose another output
directory.
Continue with Theme Plugin for static colors or JavaScript Plugin for runtime behavior.