Overview
Plugins add interactive features to Radarboard — task managers, note-taking, bookmarks, RSS readers, and more. Each plugin lives in its own package underplugins/ and provides:
- An overlay UI — side panel, modal, fullscreen, or mini-HUD
- Scoped storage — key-value DB for plugin data
- MCP tools (optional) — AI assistant actions
- Dashboard widgets (optional) — embed data in the grid
- Cross-plugin communication (optional) — intents and RPC
Prerequisites
- Radarboard dev environment set up (Setup Guide)
- Familiarity with React and TypeScript
Step 1: Scaffold
plugins/my-plugin/ with a working overlay, registers it in radarboard.config.ts, and runs pnpm install.
Step 2: Build the Overlay
Editsrc/components/my-plugin-overlay.tsx. The component receives api: PluginAPI:
PluginAPI Reference
| Method | Description |
|---|---|
api.db.get(key) | Read a value from plugin storage |
api.db.set(key, value) | Write a value to plugin storage |
api.db.delete(key) | Remove a value |
api.db.list(prefix) | List all values with a key prefix |
api.notify(msg, type?) | Show a toast ("info", "success", "error") |
api.hotkeys.register(key, fn) | Register a keyboard shortcut (auto-cleanup) |
api.close() | Close the plugin overlay |
api.events.emit(event) | Emit a notification event |
api.events.on(filter, handler) | Subscribe to events |
api.intents.sendTo(plugin, action, payload) | Send data to another plugin |
api.intents.sendToAssistant(payload) | Send data to the AI chat |
api.rpc.call(plugin, action, params) | Call a service on another plugin |
api.projects.list() | Get the project list |
Step 3: Configure the Descriptor
Editsrc/index.ts:
Presentation Modes
| Mode | Behavior |
|---|---|
side-panel | Slides in from the right |
fullscreen | Takes over the viewport |
modal | Centered dialog |
mini-hud | Small floating widget |
Step 4: Add Settings (Optional)
Let users configure your plugin without editing code:Step 5: Test
Run conformance tests (included in the scaffold):Optional: Add MCP Tools
Let the AI assistant interact with your plugin:Optional: Contribute Dashboard Widgets
Plugins can embed widgets in the dashboard grid:Optional: Cross-Plugin Communication
Intents (receive data from other plugins)
Services (expose RPC methods)
Module Boundaries
Plugins can only import from:@radarboard/plugin-sdk@radarboard/types@radarboard/utils@radarboard/ui@radarboard/widget-engine@radarboard/embedding-service@radarboard/llm
Reference
- Full type reference:
@radarboard/plugin-sdk/types - UI components:
@radarboard/plugin-sdk/components/* - Testing utilities:
@radarboard/plugin-sdk/testing - Real examples:
plugins/tasks/,plugins/notes/,plugins/bookmarks/ - Extension rules:
CONTRIBUTING-EXTENSIONS.md