Typeengine plugins allow developers to extend and customize the document engine at runtime, compile-time, or via WASM/remote modules.
loadPlugin(plugin)— Loads a plugin and registers its transforms/schema extensionsunloadPlugin(name)— Unloads a plugin by namerunTransform(name, doc, ...args)— Runs a registered transformgetSchemaExtension(name)— Retrieves a registered schema extensiongetLoadedPlugins()— Lists all loaded plugins
import { loadPlugin } from 'typeengine/core/plugin';
loadPlugin({
name: 'my-plugin',
setup: (ctx) => {
ctx.registerTransform('addHeading', (doc) => ({
...doc,
children: [...(doc.children ?? []), { id: 'h1', type: 'heading', attrs: { level: 1 } }],
}));
ctx.registerSchemaExtension('customBlock', { type: 'custom', attrs: { foo: 'bar' } });
},
});- Plugins can provide a
wasm(WebAssembly.Module) orremote(URL) property for advanced use cases. - Permission model and sandboxing are enforced for security.
- Plugins are sandboxed and permissioned
- All plugin hooks are covered by tests
- Minimal overhead and no impact on core document operations