Skip to content

Extension Point Chooser

Capell Extension Point Chooser screenshot Capell Extension Point Chooser screenshot

Use this page before adding a hook, service provider call, or package integration. Start with the table that matches the runtime you are changing, then follow the linked page for the full contract and examples.

If you are not sure which runtime you are changing, start with Package authoring jobs and Extension surface vocabulary. Those pages define the package surfaces and install-impact terms used by this chooser.

NeedUseOwner
Register a page subject typeCapellCore::registerPageType(new PageTypeData(...))Core
Replace a core model implementationLaravel container binding for the model classCore
Register renderable definitionsRenderableRegistry::register(...)Core
Register link picker/search optionsLinkableContentRegistry::register(...)Core
Register content graph extractorsContentGraphRegistry::register(...) or ContentGraphRegistry::TAGCore
Add package settingsSettingsSchemaRegistry::register(), registerSettingsClass(), and registerMetadata()Core/Admin
Add package settings migrationsdatabase/settings/* plus package install/setup registrationCore
Add developer-tooling makersMakerRegistryInterface::register(...)Core
Load vendor build assets conditionallyVendorAssetConditionRegistry::register(...)Core/Frontend
Add static export filesStaticSiteExtensionRegistry::register(...)Static export package
Extend ownership/export mappingOwnershipMap::register(...)Migration Assistant
NeedUseOwner
Add admin resources, pages, widgets, configurators, user menu items, settings, or extenders from one packageAdminBridge and AdminBridgeRegistrarAdmin
Add one small admin surfaceCapellAdmin::contributeToAdminSurface(AdminSurfaceContributionData::...)Admin
Register a package settings/control page on ExtensionsCapellAdmin::registerExtensionPage(...)Admin
Add dashboard Filament widgetsCapellAdmin::registerDashboardFilamentWidget(...)Admin
Add small dashboard metricsCapellAdmin::registerOverviewStat(...)Admin
Replace the dashboard pageAdminBridgeRegistrar::dashboardPage(...) or CapellAdmin::useDashboardPage(...)Admin
Add user menu actionsCapellAdmin::registerUserMenuItem(...)Admin
Add admin header toolsTag an AdminToolItem with AdminToolItem::TAGAdmin
Add welcome tour stepsCapellAdmin::registerWelcomeTourStep(...)Admin
Add navigation groupsCapellAdmin::registerNavigationGroup(...)Admin
Add content widgetsCapellAdmin::registerWidget(...) or registerDiscoverableWidgets(...)Admin
Add fields to page, site, layout, or user formsTagged schema extenders such as PageSchemaExtender::TAGAdmin
Add page/site/resource header actionsTagged action extenders such as PageHeaderActionExtender::TAGAdmin
Modify page, user, or resource tablesTagged table extenders such as PageTableExtender::TAGAdmin
Extend the installed Extensions pageExtensionsPageActionRegistry or ExtensionsPageExtender::TAGAdmin
Subscribe to admin serving eventsCapellAdmin::serving(...)Admin
Register activity resource links/display/revert behaviorCapellAdmin::registerActivityResourceLink(...), ActivityChangeSetBuilder::TAG, and ActivityRevertHandler::TAGAdmin
NeedUseOwner
Inject small public HTMLRenderHookRegistry::register(...)Frontend
Add public widgetsLayoutWidgetRegistry::register(...) with a frontend targetFrontend/Core
Register frontend component aliasesFrontendComponentRegistry::register(...)Frontend
Register package CSS or JS sourcesTailwindAssetsRegistry::registerSource() / registerImport()Core/Frontend
Register runtime frontend assetsFrontendResourceRegistry groups / FrontendAssetContributor::TAGFrontend
Reserve package-owned public pathsReservedFrontendPathRegistry::reserveExact() / reservePrefix()Frontend
Add middleware to the public page routeFrontendRouteMiddlewareRegistryFrontend
Add frontend rule conditionsFrontendRuleConditionRegistry::register(...)Frontend
Replace response rendering for a runtimeFrontendResponseRendererRegistry::register(...) / registerClass(...)Frontend
Invalidate pages when a model changesCacheInvalidationRegistry::registerDependency(...)Frontend
  • Prefer an existing extension point over patching host package classes.
  • Keep package feature logic in the package. Host packages should expose contracts, not product behavior.
  • Put writes in Actions and structured state in Data objects.
  • Keep visible strings in translations.
  • Public output must pass the public HTML safety contract.
  • Register most extension points from a package provider’s boot() method unless the contract explicitly says to bind something in register().