IPC
Renderer ↔ main RPC for the plugin. Requires the ipc permission.
Renderer
Call hc.ipc.invoke(channel, ...args) instead of window.api.invokePluginMain.
Main entry
Use hc.ipc.handle in the main entry to serve channels that the renderer calls with hc.ipc.invoke.
hc.ipc.handle(channel, handler)
Available since v2.0.0
Signature:(channel: string, handler: (...args) => unknown) => Disposable
Expose an RPC channel callable from the renderer half of the same plugin. Requires the ipc permission.
Main-process hooks are invoked by posting work to the utilityProcess runner; the main process applies mutations and enforces permissions before and after each callback.
See the Request logger example for a main-only plugin using HTTP hooks.
hc.ipc.invoke(channel, ...args)
Available since v2.0.0
Signature:<T>(channel: string, ...args: unknown[]) => Promise<T>
Invokes a handler registered with hc.ipc.handle in the main entry. Use hc.pluginId for logging — channel names are automatically scoped to your plugin.
Do not call window.api.invokePluginMain directly — use this typed API instead.
const pending = await hc.ipc.invoke<Array<{ id: string }>>('pullPending');