Skip to main content

Injection zones

Register a widget with ConsoleExtension.widgets: [{ slot, widgetId, title?, Component }]; the shell renders it through PluginWidgetSlot. The guaranteed zones are the exported CONSOLE_WIDGET_SLOTS catalog — slot stays an open string so custom zones don't need a core release.

ZoneWhere it rendersProps your widget receives
hostActivityHost dashboard + screen-view activity columnhostId, max?, viewAllHref?
commerceGlanceHost dashboard commerce summaryhostId
orgDataOrganization → Data page bodyorgId, org
besignerFunctionsBesigner ƒx panelhostId
marketplaceListingMarketplace listing detail bodyhostId, listingId, permissions
orgAddonsPlugins & add-ons hub, installs sectionhostId (the acting site)
dashboardFooterBottom of the host dashboardhostId
orgSettingsOrganization → Settings, below the tabsorgId, org
hostSettingsHost setup page, below the built-in cardshostId
adminOrgDetailStaff admin org detail page (staff-only)orgId

Rules of thumb: widgets receive shell-resolved context as props and must not reach for console-app hooks; data access goes through @aglyn/tenant-feature-instance (useFirestoreCollection, useUser, usePluginConfig, …). A widget renders for a workspace only when its plugin is enabled and released — the shell never mounts widgets from unloaded plugins.