The AWS-first client-delivery framework.
Four render modes. Three adapter surfaces. FaceTheory renders HTML for end users — server-side, build-time, incrementally, or as a hydrated shell — with deterministic head and style emission so the server-rendered HTML matches the client-hydrated DOM exactly.
Where FaceTheory shows up
Three delivery surfaces in the Theory Cloud stack — one rendering contract behind all of them.
SSR Faces streamed through Lambda Function URLs, with deterministic head emission, strict CSP, and the OAC mutating-form transport.
SSG output to S3 and CloudFront, plus blocking ISR backed by TableTheory cache metadata and regeneration leases.
Stitch tokens, shell, and admin primitives feeding operator-visibility dashboards across all three adapters.
One framework. Three adapters.
Pick an adapter and ship the same render contract.
npm install --save-exact https://github.com/theory-cloud/FaceTheory/releases/download/vX.Y.Z/theory-cloud-facetheory-X.Y.Z.tgz react react-dom
```typescript import * as React from 'react'; import { createFaceApp, createLambdaUrlStreamingHandler, } from '@theory-cloud/facetheory'; import { createReactStreamFace } from '@theory-cloud/facetheory/react'; function Home() { return React.createElement('h1', null, 'FaceTheory + React (streaming SSR)'); } export const app = createFaceApp({ faces: [ createReactStreamFace({ route: '/', mode: 'ssr', render: () => React.createElement(Home), renderOptions: { headTags: [{ type: 'title', text: 'Home' }], styleStrategy: 'all-ready', }, }), ], }); export const handler = createLambdaUrlStreamingHandler({ app }); ```npm install --save-exact https://github.com/theory-cloud/FaceTheory/releases/download/vX.Y.Z/theory-cloud-facetheory-X.Y.Z.tgz vue @vue/server-renderer
```typescript import { createFaceApp, createLambdaUrlStreamingHandler, } from '@theory-cloud/facetheory'; import { createVueFace, h } from '@theory-cloud/facetheory/vue'; // createVueFace.render returns a Vue VNode. Use `h(Component)` (or // `h('div', {...}, [...])`) — not a component object. const Home = { setup() { return () => h('h1', 'FaceTheory + Vue (SSR)'); }, }; export const app = createFaceApp({ faces: [ createVueFace({ route: '/', mode: 'ssr', render: () => h(Home), renderOptions: { headTags: [{ type: 'title', text: 'Home' }], }, }), ], }); export const handler = createLambdaUrlStreamingHandler({ app }); ```npm install --save-exact https://github.com/theory-cloud/FaceTheory/releases/download/vX.Y.Z/theory-cloud-facetheory-X.Y.Z.tgz svelte
```typescript import { createFaceApp, createLambdaUrlStreamingHandler, } from '@theory-cloud/facetheory'; import { createSvelteFace } from '@theory-cloud/facetheory/svelte'; // Svelte components compile to an SSR module exporting `.render()`. import Home from './Home.svelte'; export const app = createFaceApp({ faces: [ createSvelteFace({ route: '/', mode: 'ssr', render: () => ({ component: Home, props: {} }), renderOptions: { headTags: [{ type: 'title', text: 'Home' }], }, }), ], }); export const handler = createLambdaUrlStreamingHandler({ app }); ```Quick starts
The deepest-value sections, ranked by how often new consumers reach for them.
Pin the GitHub release tarball and wire up Lambda Function URL streaming.
FaceModule shape — route, mode, render. The atomic unit of the framework.
SSR, SSG, blocking ISR, or SPA — when each one fits and what it guarantees.
Production ISR backed by TableTheory cache metadata and regeneration leases.
buildStrictCspHeader and external hydration sidecars for hardened delivery.
Stitch primitives and caller-supplied OperatorGuardStatus boundaries.