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