Enterprise Composable Framework
What a composable framework is, the four planes it separates, and how Fabric Platform implements the capability plane beneath them.
An Enterprise Composable Framework is an operating decision before it is an architecture. It says: the parts of a business that every line of business needs — who a customer is, what they agreed to, what work is owed, how value moved, and what policy permits — are built once, governed centrally, and reused. Everything above them is configuration.
The decision is only real if something enforces it. A framework that relies on discipline forks the first time a deadline is tight.
The four planes
The framework separates four planes. Each has a different owner, a different rate of change, and a different answer to can a business unit change this without asking anyone?
| Plane | Owns | Must not own |
|---|---|---|
| Platform kernel | Mechanism: actions, policy, state machines, events, projections, durable hosts | Screens, industry nouns, component libraries |
| Shared capabilities | Reusable FabricModules an organization or package owner publishes — party, offering, agreement, settlement, compliance | Brand layout, per-surface widgets |
| Vertical packs | Industry meaning: origination, refinance, collections, encounters, repair orders | A second mutation path, or a forked kernel |
| Experience tier | How a surface is assembled: promotion, scoped plans, cached templates, tokens, renderers | Authorization, domain writes, capability legality, application-shell ownership |
The test the design has to pass: two unlike verticals compose and render with no kernel and no compositor change. The kernel already holds itself to that bar with unrelated certification fixtures. The experience runtime has to meet it too.
Where Fabric Platform sits
Fabric Platform implements the kernel and the contracts used to publish capabilities. It does not ship a production catalog of Party, Agreement, Settlement, or other business capabilities, render screens, or know industry vocabulary. Applications and capability packages provide that meaning.
Three properties make this composable rather than merely layered:
One mutation path. A screen, an AI agent, a scheduled worker and an offline replay all enter through submitAction. There is no second way in, so a governance rule written once applies everywhere.
One query path. Compositors, federated graphs and agents all read through ProjectionHost.project() with the actor and tenant derived server-side. A cached document can render; it can never authorize.
Contracts that fail closed at build. A capability can publish a versioned usage contract. A
vertical adopts it by declaring a dependency and binding roles, slots and data maps.
createModuleRegistry() rejects missing dependencies, cycles and undeclared cross-module relations,
and @fabricorg/adoption-bindings fails the build when a binding invents a role the capability never
offered. @fabricorg/assembly then resolves the declared module and component-pack graph into a
deterministic manifest and lockfile. The application owns what it declares; Platform owns making the
result reproducible and rejecting an incompatible graph.
What composability means concretely
A capability is a versioned FabricModule plus a published usage contract. Adopting one is four steps, all of them reviewable:
- Declare a
dependenciesentry on that namespace and version range. - Relate objects only to declared dependency targets.
- Bind experience roles, slots and data maps.
- Resolve the application manifest, then serve reads through
ProjectionHostand writes throughPlatformHost.
Sharing inside one company and adopting across companies are the same mechanism. A second company composes a different registry of the same packages; it does not fork the kernel.
Server-driven UI, precisely
The server defines what may appear and which verbs are legal. The client decides pixels.
@fabricorg/gen-sdui emits data-shape bindings such as
capability://agreement/summary. It emits no screens.
@fabricorg/experience-contracts carries roles, slots, and action intents as
fabric.experience/v1 JSON that Platform stores and deliberately does not interpret.
Application-owned composer inputs become a renderer-neutral document.
@fabricorg/sdui-release validates that document against the assembly lockfile, resolved component
packs, token set, and explicit grants for every capability view and intent. A promoted release is
immutable input to web, mobile, point-of-sale, or agent channels. Each channel supplies its own
native component registry and verifies that it implements the document's core vocabulary.
The supported experience tier keeps two different guarantees explicit:
@fabricorg/experience-runtime/serververifies and selects an admitted release, then issues a scope-bound render plan containing opaque fragment events and named read bindings.@fabricorg/experience-runtime/clientand@fabricorg/experience-reactconsume that plan. Their checks catch stale caches, bad deploys, and delivery mismatches. They do not authorize.@fabricorg/experience-gatewayre-resolves every plan handle from trusted server state. Reads still reach ProjectionHost authorization and mutations still reach PlatformHost execution authorization. Browser assertions of actor, tenant, grants, variants, releases, or action IDs are ignored.
Four rules keep that portable:
- Document nouns stay generic — document, slot, role, fragment, intent, view URI, token set, release, channel.
- A cached document may render. It may not authorize a read or execute a mutation.
- Components must come from core vocabulary or the assembly's resolved component packs; merely supplying an undeclared pack cannot make a release valid.
- Offline and field channels use view
offlineUsableand actiongoverningMoment, so a dealer pad, a field tablet and a bedside cart take the same path. - Theme is a token-set deploy through
DesignTokensPort, not a release of the host.
Delivery status
| Layer | Status | Evidence and boundary |
|---|---|---|
| Governed mutation kernel | Shipped | PlatformHost tests cover authorization, policy, state guards, idempotency, HITL, adapters, events, outbox, and recovery |
| Governed projection kernel | Shipped | ProjectionHost supports authorization, snapshots, replay, schema compatibility, and explicit subject-local continuity |
| Compiler and generated seams | Shipped | Manifests, compatibility analysis, GraphQL seams, and SDUI data-shape bindings are generated and tested |
| Deterministic application assembly | Shipped | Assembly v2 binds exact module manifests, generated contract documents, component-pack artifacts, and adoption bindings into one verified lockfile |
| Runtime composition evidence | Shipped | Platform Host verifies the registered modules against the lockfile and persists the trusted assembly and initiating release digests |
| SDUI release contracts | Shipped | Release v2 remains compatible; browser-safe v3 contracts add signed artifacts, exact routes, tree-scoped grants, and monotonic release-channel pointers |
| Component-pack and MFE conformance | Shipped | Public checks define deterministic pack resolution and integrity-locked browser delivery without an unchecked dynamic-import fallback |
| SDUI composer | Shipped | Headless promotion verifies v2 input, rejects ambiguous routes, materializes effective grants, and signs Release v3 |
| Experience runtime and gateway | Shipped | Server-issued scoped plans route named reads and fragment events through ProjectionHost and PlatformHost; client validation is defense in depth |
| React adapter | Reference adapter | Renders scoped plans with an application registry and accessible missing-component recovery; React remains outside the kernel and Hosts |
| Reusable production capability catalog | Not supplied | Organizations must build or adopt versioned FabricModule packages |
| Deployment database certification | Adopter gate | The repository runs PostgreSQL 16 migration and concurrency tests; adopters certify their exact PostgreSQL or Lakebase environment, backup, and restore controls |
This is a complete supported path, not a mandatory monolith. Applications may replace any
experience-tier module by passing its public conformance suite. Supastarter remains the shell and
@fabricorg/ui remains the Fabric family design-system owner.
Building one
The Composable application standard is the working document for teams building on this path. It covers identity and tenancy, authoring and grants, packaging and integrity, integrations and ports, promotion and release, reads and mutations, and offline and recovery — and where a rule is enforced it names the build gate or conformance suite that enforces it, because a rule nothing checks survives until the first tight deadline.
Archetypes, not industry modules
@fabricorg/archetypes is optional and versioned, and Platform does not know its names. Six abstractions carry meaning across companies:
| Archetype | What it means | In automotive finance | In healthcare |
|---|---|---|---|
| Party | Who participates | Applicant, dealer, collector | Patient, clinician, payer |
| Offering | What can be taken up | Rate sheet, product, add-on | Care pathway, formulary item |
| Agreement | Binding commitment | Loan, refinance contract | Consent, coverage |
| Resource | What is allocated | Vehicle, collateral | Bed, device |
| Activity | Work that happens | Stipulation review, recovery | Encounter, order |
| Settlement | Value movement | Funding, payoff | Claim remittance |
Illustrations never enter Platform source. A vocabulary is not stable until two unlike domains certify against it without an undocumented exception.
Next
Automotive finance puts every plane into one industry's words, then the verticals show origination, refinance and collections composing the same library.
See also
Production adoption
Ownership, approved composition, durability, contract evolution, migration, and release gates for a Fabric application.
Automotive finance
The industry as a composable framework — one shared capability library, the surfaces it drives through SDUI, and the external systems it integrates with.