Skip to content

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:

TypeEntryUse it for
ThemeJSONOne or more light or dark color themes.
JavaScriptTypeScript or JavaScriptHeadless 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.

A plugin can start with just a package.json and its source entry:

my-plugin/
├── package.json
└── src/
└── index.ts # JavaScript plugin

For a theme plugin, use a JSON entry instead:

my-theme/
├── package.json
└── src/
└── theme.json

The 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.

Use the official Plugin Creator from the directory containing the plugin or pass the plugin directory explicitly:

Terminal window
bunx @jrtilak-recall/plugin-creator build ./my-plugin

The 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:

Terminal window
bunx @jrtilak-recall/plugin-creator build ./my-plugin --minify --zip

This 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.