Skip to main content

Current Extension Surfaces

Below is the current-state inventory of extension surfaces in Open Saasframe.

Module contracts and auto-discovery​

SurfaceHow to startPrimary contract/docs
Module metadata and boot hooksAdd src/modules/<module>/index.ts, then optional di.ts, setup.ts, acl.tsModules overview, Container
Routes and pages discoveryAdd files under api/, backend/, frontend/ in module rootRoutes and pages, API modules
CLI commandsAdd cli.ts in module and export command handlersCLI overview
OpenAPI participationExport openApi from API handlersAPI development guide

API and mutation extension​

SurfaceHow to startPrimary contract/docs
CRUD extension pointsUse makeCrudRoute with validators/hooksCRUD factory
Multi-ID list filtering (ids)Call any CRUD list endpoint with ?ids=<uuid1,uuid2,...>; combine with interceptors for cross-module narrowingCRUD factory, API extension guide
API interceptors (UMES E)Add api/interceptors.ts, export interceptorsAPI extension guide
Response enrichers (UMES D)Add data/enrichers.ts, export enrichersData extensibility
Query-level enrichers (UMES N)Add queryEngine: { enabled: true } to enricher configQuery engine extensibility
Mutation guards (UMES M)Add data/guards.ts, export guards: MutationGuard[] with priority ordering, payload modification, afterSuccess callbacksAPI extension guide
Command handlersRegister commands with registerCommandCommands overview
Command interceptors (UMES M)Add commands/interceptors.ts, export interceptors with beforeExecute/afterExecute hooksCommands overview

UI extension​

SurfaceHow to startPrimary contract/docs
Widget injection (classic)Add widgets under widgets/injection/* + widgets/injection-table.tsWidget injection
Headless DataTable injections (UMES F)Inject columns, row actions, bulk actions, filters via injection widgetsData grids, Widget injection
CrudForm field injections (UMES G)Inject fields/widgets into form groups via injection spotsCrud form, Widget injection
Menu injection (UMES B)Inject menu entries into sidebar/topbar/profile surfacesWidget injection
Component replacement (UMES H)Add widgets/components.ts, export componentOverridesWidget injection
Integration wizard widget (UMES L)Use InjectionWizard for multi-step integration onboardingWidget injection, Integration enhancements
Status badge injection (UMES L)Use StatusBadgeRenderer for service health displayWidget injection, Integration enhancements
Provider-scoped integration detail widgets (UMES L)Declare detailPage.widgetSpotId in IntegrationDefinition, then inject widgets with tab / group / stack placement kindsIntegration enhancements, Integrations & data sync
Client-side event filtering (UMES M)Set filter.operations on widget eventHandlers to scope handlers by operation typeWidget injection

Events, subscribers, workers​

SurfaceHow to startPrimary contract/docs
Typed module eventsAdd events.ts with createModuleEventsEvents overview
DOM Event Bridge + realtime UI (UMES C)Mark events clientBroadcast: true, consume with useAppEvent / useOperationProgressWidget injection, Events & queue
Async subscribersAdd subscribers/*.ts + metadataEvents overview
Sync lifecycle subscribers (UMES M)Add subscribers/*.ts with metadata { sync: true, priority } for in-pipeline CRUD lifecycle eventsEvents overview
Sync query lifecycle events (UMES N)Subscribe to *.querying / *.queried events to modify queries or resultsQuery engine extensibility
Queue workersAdd workers/*.ts + worker metadataQueue workers, Runtime workers

Data model and entity extension​

SurfaceHow to startPrimary contract/docs
Custom entities + custom fieldsAdd/update ce.ts with field DSL helpersCustom entities, Data extensibility
Cross-module entity extensionsAdd data/extensions.ts for module linksData extensibility
Translation fieldsAdd translations.ts for translatable entity fieldsModules configs
Query/index coverageUse CRUD indexer integration and query-index toolingQuery index
External ID mapping enricher (UMES L)Add data/enrichers.ts with SyncExternalIdMapping entityData extensibility, Integration enhancements

Search, vector, cache, AI​

SurfaceHow to startPrimary contract/docs
Search module configAdd search.ts and declare indexed entities/strategiesHybrid search
Fulltext driver extensionImplement FullTextSearchDriver and wire into strategyHybrid search
Vector entity configDeclare vector config (vector.ts) with buildSource/presenter/linksHybrid search
Vector DB backends (current set)Use built-in driver IDs: pgvector, qdrant, chromadbHybrid search
Cache backendsConfigure cache strategy (memory, redis, sqlite, jsonfile)Cache management
AI tools (MCP)Add ai-tools.ts, register tools via ai-assistant contractsAI assistant package guide
AI agents and tool packsAdd ai-agents.ts at module root; define tools with defineAiTool (packs: search, attachments, meta, customers, catalog)AI Agents, AI Framework Overview
<AiChat> embed injectionRender <AiChat agent="module.agent_id"> on backend pages; forwards pageContext into the dispatcherAI Agents, Mutation Approvals

Notifications, messages, and domain integrations​

SurfaceHow to startPrimary contract/docs
Notification type registryAdd notifications.ts and export notificationTypesNotifications
Notification renderersAdd notifications.client.ts for client renderingNotifications
Reactive notification handlersAdd notifications.handlers.ts and export notificationHandlers; react via useNotificationEffectNotifications, Widget injection
Message typesAdd message-types.ts in your moduleMessages system
Message object typesAdd message-objects.ts for attachable domain objectsMessages system
Payment/shipping providersRegister registerPaymentProvider / registerShippingProviderShipping & payment providers, Sales calculations
Currency providersAdd custom rate provider implementationsCurrencies module
Workflow integrationsAdd custom workflow activities/signals/subscribersWorkflows extending
Integration registry (UMES L)Use registerIntegration() for typed integration definitionsIntegration enhancements, Data extensibility

What else is extendable right now​

  • RBAC features (acl.ts) and role defaults (setup.ts)
  • Feature toggles for runtime behavior control
  • Dashboard widgets and sidebar menu composition
  • Scheduler jobs and automation-like recurring tasks (via scheduler module)

See: RBAC, Feature toggles, Scheduler