MallaDocs

Visión general de la arquitectura

Los Workers, los almacenes de datos y los seis principios sobre los que se construye toda la plataforma.

Guía para desarrolladores

Malla es un monorepo de Turborepo con seis Cloudflare Workers y un conjunto de paquetes compartidos. Todo corre en Cloudflare: Workers, Durable Objects, R2, KV, Queues, Workflows e Hyperdrive delante de Neon Postgres.

text
                      ┌── Cloudflare for SaaS (customer domains + SSL)
visitor ──► sites Worker ──── KV (host → site, publish id)
                │              R2 (snapshots, compiled CSS, assets)
                │              Cache API (rendered pages)
                └─ /api/*, /_auth/* ──► runner Worker ── SiteDatabase DO (tables, visitors)

editor ──► web Worker (Nuxt) ──► api Worker (Hono) ── Hyperdrive ──► Neon Postgres
   │                               ├─ R2 (uploads)   ├─ AI Gateway
   ├─► canvas frames (sandboxed)   └─► sites (publish), runner (test runs)
   └─► realtime Worker: Durable Object per page (Yjs + presence)

Los Workers

webEl editor de Nuxt y las páginas de marketing. Hace de proxy de /api/** hacia la api mediante un service binding.
apiAPI REST con Hono: autenticación, sitios, páginas, CMS, formularios, integraciones, facturación, dominios, IA.
realtimeUn Durable Object por página: sincronización Yjs, presencia, checkpoints en Postgres.
sitesPublica snapshots y sirve cada sitio publicado, formulario y consulta de cliente.
runnerFlujos de trabajo de servidor, crons, ejecuciones durables, tablas nativas y autenticación de visitantes.
mcpEl servidor MCP para agentes, autenticado con claves de API del espacio de trabajo.

Seis principios

  1. Un solo formato de documento en todas partes. Las páginas, los componentes y el área de borrador del lienzo comparten la forma PageDoc.
  2. Un solo renderizador. El lienzo y el sitio publicado ejecutan el mismo @malla/renderer, así que lo que ves es lo que se publica.
  3. Un solo motor de flujos de trabajo. Los flujos de trabajo de cliente y de servidor comparten un formato JSON y @malla/engine, con adaptadores distintos.
  4. Lo integrado son plugins. REST, GraphQL y el CMS usan el mismo SDK de plugins que cualquier otro conector propio.
  5. Nunca hacer eval de la entrada del usuario. Las expresiones se interpretan a partir de un AST; el código personalizado corre en isolates.
  6. Los secretos nunca llegan al navegador. Las llamadas autenticadas a integraciones pasan por un proxy en el servidor.

De un gesto a la base de datos

GestoUn arrastre, la edición de un campo, una llamada a una herramienta de IA.
OpsOperaciones tipadas y validadas.
YjsSe aplican al Y.Doc y se pueden deshacer.
SalaSe sincronizan a través del Durable Object de la página.
PostgresSe guardan en checkpoints como JSON + estado Yjs.

Consulta El documento de página y Tiempo real.

Dónde viven los datos

DatosAlmacenamiento
Usuarios, espacios de trabajo, sitios, páginas, CMS, formularios, integraciones, flujos de trabajo, facturaciónNeon Postgres (Drizzle, vía Hyperdrive)
Documentos de página en vivo y registros de ediciónSQLite del Durable Object de cada página, con checkpoints en Postgres
Tablas nativas, visitantes, sesiones, envíos de formulariosDurable Object SiteDatabase por sitio
Recursos subidos, snapshots publicados, páginas renderizadasR2
Enrutamiento por host, flujos de trabajo de servidor publicados, caché de derechos del planKV
Uso y analíticaAnalytics Engine

Paquetes compartidos

PaqueteFunción
@malla/schemaTipos y esquemas Zod: PageDoc, ops, estilos, datos, flujos de trabajo, CMS, tablas, planes
@malla/exprParser e intérprete de expresiones, funciones integradas y metadatos de autocompletado
@malla/engineMotor de flujos de trabajo y registro de acciones para el navegador y el servidor
@malla/rendererDocumento → HTML/CSS, runtime de los frames del lienzo, interacciones
@malla/runtimeEl runtime de islas que cargan los sitios publicados para enlaces de datos, formularios y flujos de trabajo
@malla/publishPublicación de snapshots y renderizado bajo demanda
@malla/ydocMapeo de documentos a Yjs
@malla/plugin-sdk, @malla/pluginsDefiniciones de plugins y los plugins propios: REST, GraphQL, CMS, Postgres, Supabase, Airtable, Google Sheets, Resend, Anthropic y OpenAI
@malla/bundleBundles de sitio para plantillas, secciones y copiar entre sitios
@malla/ai-toolsEsquemas de herramientas de IA y MCP que se compilan a ops
@malla/db, @malla/auth-tokenEsquema y migraciones de Drizzle; tokens firmados entre Workers