Overview
Hooks allow plugins to expose extension points that other plugins can register handlers for. Unlike events (fire-and-forget), hooks collect return values.API
api.registerHook(name, handler)
Register a function that responds to a named hook.
api.useHook(name, payload)
Call all registered handlers for a hook. Returns an array of their return values.
Returns:
Array<any> — return values from each handler (empty array if none registered).
api.removeHook(name, handler)
Remove a previously registered handler. Must pass the same function reference.
Hooks vs Events
When to Use Each
Use Events When:
- You’re broadcasting that something happened
- You don’t need a response
- Multiple plugins might be interested
- Example:
todo:added,theme:changed
Use Hooks When:
- You’re exposing an extension point
- You need return values from handlers
- You want plugins to contribute to your UI
- Example:
toolbar:add-button,sidebar:add-section
Timing
Hooks are typically registered duringsetup(), but they’re also commonly invoked after all plugins have loaded. Use the board:allPluginsLoaded event for this: