Skip to main content

Overview

Hooks let plugins expose extension points that other plugins can register handlers for. Unlike events (fire-and-forget), hooks collect return values.

Methods

api.registerHook(name, handler)

Register a function that responds to a named hook.
api.registerHook('toolbar:add-button', (config) => {
  const btn = document.createElement('button');
  btn.textContent = config.label;
  return btn;
});
ParameterTypeDescription
namestringHook name (use namespace:action format)
handlerfunctionCallback receiving payload, can return a value

api.useHook(name, payload)

Call all registered handlers for a hook. Returns an array of their return values.
const results = api.useHook('toolbar:add-button', { label: 'Click me' });
// → [buttonElement, buttonElement, ...]
ParameterTypeDescription
namestringHook name to invoke
payloadanyData passed to each handler
Returns: Array<any> — return values from each handler (empty array if none registered).

api.removeHook(name, handler)

Remove a previously registered hook handler. Must pass the same function reference used in registerHook().
function myHandler(config) {
  const btn = document.createElement('button');
  btn.textContent = config.label;
  return btn;
}

// Register
api.registerHook('toolbar:add-button', myHandler);

// Later, remove it
api.removeHook('toolbar:add-button', myHandler);
ParameterTypeDescription
namestringHook name
handlerfunctionThe exact function reference to remove
Use removeHook in your plugin’s teardown() function to clean up hooks when the plugin is disabled or deleted.

Hooks vs Events

EventsHooks
PurposeNotifyExtend
Return valuesNoYes
DirectionOne-way broadcastRequest → responses
Use case”Something happened""Add your thing to my thing”

See Also