Skip to main content

Extension-point catalog

The surface matrix: what a plugin can extend, from which entry (barrel = client, /server = API process), and when it runs.

Extension pointEntryReachesRuns
Canvas components (defineUiFeatureBundle)barrel (site)Besigner + published sitesEditor gates / SSR-suspended page load
Console nav + pages (ConsoleExtension.navItems)barrel (console)Console host areaAfter the org resolves, before the shell paints
Widgets (ConsoleExtension.widgets)barrel (console)Named console zones (dashboard, org, settings, admin, besigner)With their host page
Providers (ConsoleExtension.providers)barrel (console)Around every console pageOnce the registry is populated
Site runtimes (registerSiteRuntime)barrel (site)Every published pageClient render, reading enricher props
Redirect resolvers / page resolvers / enrichers/serverTenant page pipelinePer request, in that order; enricher errors isolated
API routes (registerPluginApiRoute)/server/api/* on both appsPer request behind the org + release gates
Billing webhook handlers/serverPlatform Stripe eventsPer event; errors → redelivery
Config schemas (registerPluginConfigSchema)bothSettings UI + typed readsDeclared at module scope
Custom field types (registerCustomFieldType)bothDataset schema/record editors + validationDeclared at module scope
Permissions (registerPluginPermissions)bothEvery resolved role setDeclared at module scope
Scheduled jobs (registerPluginJob)/serverThe platform job beatWhen due, via /api/plugins/run-jobs
Install preset mappersbarrelBesigner drawer presetsOn install-doc render
Realm bundles (register(host) / registerApi())remote artifactEverything above via the host ABIAfter the trust chain verifies

Which app area does each reach? Console = nav/pages/widgets/providers; org = orgData/orgSettings/orgAddons zones + org-scoped config and permissions; hosts = host-area pages/widgets + host-scoped installs; besigner = canvas components + besignerFunctions zone + drawer presets; published sites = canvas components, runtimes, page hooks, APIs; admin (staff) = adminOrgDetail zone. Core itself is extended only through these registries — plugins never edit core code.