Skip to content

Extension Point API Reference

Use this page when you know what you want to extend and need the exact contract, registration point, and fallback behavior. Start with Extension point chooser if you are still deciding.

ColumnMeaning
APIContract, registry, facade, or tag to use.
Register fromWhere package code should usually register it.
Called byRuntime surface that consumes the contribution.
Safe fallbackWhat should happen when the package is absent, disabled, or returns nothing.
Test recipeSmallest useful proof.
NeedAPIRegister fromCalled bySafe fallbackTest recipe
Page subject typeCapellCore::registerPageType(new PageTypeData(...))Runtime provider registeringPackage() or boot methodBlueprint/page type selectionType is absent from selectorsAssert CapellCore::getPageTypes() contains the key.
Model morph aliasCapellCore::registerModel() / registerModels()Runtime providerMorph map and model resolutionLaravel default morph behaviorAssert morph map resolves the model alias.
Model behaviorCapellCore::registerModelInterceptor()Runtime/admin providerCapell model interceptor resolverBase model behavior remains unchangedInstantiate model and assert interceptor method affects only matching context.
Settings schemaSettingsSchemaRegistry::register() plus registerSettingsClass()Runtime/admin provider or AdminBridgeAdmin settings surfacesGroup/tab is absentResolve registry and assert schema/settings class for group.
Package settings pageCapellAdmin::registerExtensionPage()AdminBridge or admin providerInstalled Extensions page and grouped Filament sub-navigationNo package control pageAssert ExtensionPageRegistry::get($packageName) returns the page and the sub-navigation contains accessible registered pages grouped by product group.
Content graph extractionContentGraphRegistry::TAG or registry registrationRuntime providerContent graph buildersContent is not linked into graphBuild graph for fixture content and assert edge exists.
Link picker entriesLinkableContentRegistry::register(...)Runtime/admin providerLink picker/search UIItem type is not searchableAssert registry includes provider and search returns fixture.
Renderable definitionRenderableRegistry::register(...)Runtime providerRendering/runtime buildersDefinition is unavailableAssert registry returns the definition key.
Tailwind assetsTailwindAssetsRegistry::registerSource() / registerImport()Runtime/frontend providerFrontend/admin asset commandsPackage classes are not scannedAssert toReport() includes source/import origin.
Vendor asset conditionVendorAssetConditionRegistry::register(...)Runtime providerAsset manifest buildersAsset is not conditionally loadedAssert condition returns expected value for fixture context.
Developer makerMakerRegistryInterface::register(...)Runtime/dev providerMaker commandsMaker command option is absentAssert maker appears in registry.
NeedAPIRegister fromCalled bySafe fallbackTest recipe
Multiple admin surfacesAdminBridge with AdminBridgeRegistrarRuntime/admin providerAdmin bridge registryPackage contributes no admin surfacesAssert bridge is registered for package name.
Single admin page/resource/widgetCapellAdmin::contributeToAdminSurface(AdminSurfaceContributionData::...)Admin providerCapellAdminPluginSurface is absentAssert admin surface lookup contains the class.
Dashboard widgetCapellAdmin::registerDashboardWidget(...)Admin provider or bridgeDashboard widget resolverWidget hiddenAssert widget appears in expected dashboard slot.
Overview statCapellAdmin::registerOverviewStat(...)Admin providerDashboard statsStat hiddenAssert stat key appears for allowed user/context.
User menu itemCapellAdmin::registerUserMenuItem(...)Admin providerUser menu registryMenu item hiddenAssert user menu registry contains item.
Admin header toolAdminToolItem::TAGTag class in providerAdmin tool registryTool hiddenResolve app()->tagged(AdminToolItem::TAG).
Page form fieldsPageSchemaExtender::TAGTag extender in provider or bridgePage schema resolverBase page form onlyBuild schema for fixture page and assert field exists.
Site form fieldsSiteSchemaExtender::TAGTag extender in provider or bridgeSite schema resolverBase site form onlyBuild schema for fixture site and assert field exists.
Layout form fieldsLayoutSchemaExtender::TAGTag extender in provider or bridgeLayout schema resolverBase layout form onlyBuild schema for fixture layout and assert field exists.
User form fieldsUserSchemaExtender::TAGTag extender or user bridgeUser schema resolverBase user form onlyAssert supports() and schema field for target user model.
Page table queryPageTableExtender::TAGTag extender in providerPage tables and page selectsBase queryAssert modified query includes expected relation/filter.
Page table publish/workflow statusPageTableStatusResolver container bindingAdmin providerPages table status columnPublish-date status resolverBind a fake resolver and assert the table renders its state.
User table queryUserTableExtender::TAGTag extender or user bridgeUser resource tableBase queryAssert modified query behavior.
Header actionsPageHeaderActionExtender::TAG, SiteHeaderActionExtender::TAG, ResourceHeaderActionExtender::TAGTag extender in providerResource/page action resolversAction hiddenRender header actions and assert action key.
Site row actionsSiteRecordActionExtender::TAGTag extender in providerSites tableAction hiddenRender table actions for fixture site.
Publish panel contentPublishPanelExtender::TAGTag extender in providerPage publish sectionPanel remains unchangedAssert view/html appears only for supported page.
Page edit contentPageEditExtender::TAGTag extender in providerEdit pageExtra content hiddenRender edit page and assert component appears.
Page resource pages/widgetsPageResourcePageExtender::TAG, PageResourceWidgetExtender::TAGTag extender in providerPage resourceExtra pages/widgets hiddenAssert PageResource includes class.
Page export fieldsPageExportExtender::TAGTag extender in providerPage/site export actionsExtra fields omittedRun export action and assert payload contains field.
Media edit actionsMediaEditActionExtender::TAGTag extender in providerMedia edit pageAction hiddenRender media edit actions.
Extensions page contentExtensionsPageExtender::TAGTag extender in providerInstalled Extensions pageNo package alert/contentRender Extensions page and assert package section.
Extensions page actionsExtensionsPageActionRegistryafterResolving() or provider bootInstalled Extensions pageAction hiddenResolve registry and assert header/table action key.
Admin panel customizationAdminPanelExtender::TAGTag extender in providerCapellAdminPluginBase panel configBuild panel and assert plugin/middleware/theme change.
Validation gatesValidationSubscriber or subscriber contractsRuntime/admin providerSubscriber manager/admin eventsValidation not appliedNotify event with fixture and assert error/result.
Admin event handlersAdminEventRegistry::register(...)Admin providerHasDynamicEventListenersEvent has no extra handlerDispatch Livewire event and assert handler ran.
Activity display/revertActivityChangeSetBuilder::TAG, ActivityRevertHandler::TAGAdmin providerActivity/revert actionsDefault activity behaviorRun activity builder/revert fixture.
Site Health reportSiteHealthReportExtender::TAGAdmin providerSite Health action/pageReport section absentBuild Site Health report and assert section.
NeedAPIRegister fromCalled bySafe fallbackTest recipe
Small public HTML injectionRenderHookRegistry::register(...)Frontend/runtime providerPublic Blade hook callsHook outputs nothingRender anonymous page and assert safe HTML.
Frontend component aliasFrontendComponentRegistryInterface::register(...)Frontend providerRuntime component resolverAlias is unavailableAssert has() and hasReference() for key/alias.
Builder block renderingWidgetRegistry::register(...) with frontend targetRuntime/frontend providerContent rendererBlock is skipped/unrenderableRender fixture block and assert output.
Reserved public pathReservedFrontendPathRegistry::reserveExact() / reservePrefix()Frontend provider before fallback routesFrontend route resolverPath falls through to page lookupAssert package route responds and page fallback does not catch it.
Public route middlewareFrontendRouteMiddlewareRegistryFrontend providerPublic page routeBase middleware orderAssert all() order or request side effect.
Frontend rule conditionFrontendRuleConditionRegistry::register(...)Frontend providerRuntime rulesRule never matchesDirectly evaluate condition against fixture context.
Response rendererFrontendResponseRendererRegistry::register() / registerClass()Frontend providerRuntime response pipelineDefault rendererResolve renderer for runtime and assert response class/content.
Cache invalidationCacheInvalidationRegistry::registerDependency(...)Frontend/runtime providerModel observers/cache invalidatorCache remains until TTL/manual clearSave fixture model and assert invalidation plan.
Critical/deferred assetsCriticalAssetRegistry::registerCritical() / registerDeferred()Frontend providerFrontend asset renderingAsset not emittedRender page and assert handle/url in expected section.
Runtime manifest contributorsFrontendRuntimeManifestContributor::TAGFrontend providerFrontend runtime builderManifest lacks package dataBuild runtime manifest and assert contribution.
Asset contributorsFrontendAssetContributor::TAGFrontend providerFrontend asset manifest builderAsset absentBuild asset manifest and assert package handle.
NeedAPIRegister fromCalled bySafe fallbackTest recipe
Browser install guide patchPatch plus PatchRegistry::register(...)Installer provider registerPatches()Install guide page/actionPatch absentProbe/apply fixture host file and assert idempotence.
Installer default packagesCAPELL_SETUP_DEFAULT_PACKAGES plus package metadataHost env/configBrowser installer page dataPackage not preselectedBuild installer page data and assert default list.
Extension dashboard widgetCapellAdmin::registerDashboardWidget($widget, DashboardEnum::Extensions) or $registrar->extensionDashboardWidget($widget)Admin provider or admin bridgeExtensions dashboardWidget absentRegister fixture widget and assert it appears in DashboardEnum::Extensions.
Marketplace installed extensions contentExtensionsPageExtender::TAGMarketplace/providerExtensions dashboard actions areaNo Marketplace alertRender Extensions page in connected/unconnected states.
Marketplace theme header actionResourceHeaderActionExtender::TAGMarketplace/providerTheme resource headerAction hiddenRender theme resource action list.
Marketplace activation verificationContainer binding capell.marketplace.activation-verifierMarketplace providerInstall/activation flowSigned activation unavailableResolve binding and verify signed fixture payload.
  • Register in the package that owns the behavior.
  • Return null, an empty array, or no-op output when the package does not support the current context.
  • Test both the expected contribution and the safe fallback.
  • Public frontend extensions must pass public HTML safety.