Malla文档

架构概览

Worker、数据存储,以及整个平台所依据的六条原则。

开发者指南

Malla 是一个 Turborepo monorepo,由六个 Cloudflare Workers 和一组共享包组成。一切都运行在 Cloudflare 上:Workers、Durable Objects、R2、KV、Queues、Workflows,以及位于 Neon Postgres 前面的 Hyperdrive。

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)

Workers 一览

webNuxt 编辑器和营销页面。通过 service binding 把 /api/** 代理到 api。
apiHono REST API:认证、站点、页面、CMS、表单、集成、账单、域名、AI。
realtime每个页面一个 Durable Object:Yjs 同步、在线状态、向 Postgres 写入检查点。
sites发布快照,并为每个已发布的站点、表单和客户端查询提供服务。
runner服务端工作流、定时任务、持久化运行、原生表和访客认证。
mcp面向智能体的 MCP 服务器,使用工作区 API 密钥认证。

六条原则

  1. 处处使用同一种文档格式。 页面、组件和画布草稿区共享 PageDoc 结构。
  2. 同一个渲染器。 画布和已发布站点运行同一个 @malla/renderer,所见即所发布。
  3. 同一个工作流引擎。 客户端和服务端工作流共享一种 JSON 格式和 @malla/engine,只是适配器不同。
  4. 内置功能也是插件。 REST、GraphQL 和 CMS 与其他所有官方连接器使用同一套插件 SDK。
  5. 绝不对用户输入执行 eval。 表达式从 AST 解释执行;自定义代码在隔离环境(isolate)中运行。
  6. 密钥绝不进入浏览器。 需要认证的集成调用在服务端代理。

从一个操作手势到数据库

手势一次拖拽、一次字段编辑、一次 AI 工具调用。
操作(ops)带类型、经过校验的操作。
Yjs应用到 Y.Doc,可撤销。
房间通过页面的 Durable Object 同步。
Postgres以 JSON + Yjs 状态的形式写入检查点。

参见页面文档和实时协作。

数据存放在哪里

数据存储
用户、工作区、站点、页面、CMS、表单、集成、工作流、账单Neon Postgres(Drizzle,经由 Hyperdrive)
实时页面文档和编辑日志每个页面一个 Durable Object SQLite,定期写入 Postgres 检查点
原生表、访客、会话、表单提交记录每个站点一个 SiteDatabase Durable Object
上传的资源、已发布的快照、渲染好的页面R2
主机路由、已发布的服务端工作流、权益缓存KV
用量和分析Analytics Engine

共享包

包作用
@malla/schema类型和 Zod 结构:PageDoc、ops、样式、数据、工作流、CMS、表、套餐
@malla/expr表达式解析器和解释器、内置函数及自动补全元数据
@malla/engine适用于浏览器和服务端的工作流引擎与动作注册表
@malla/renderer文档 → HTML/CSS、画布框架运行时、交互
@malla/runtime已发布站点加载的岛屿运行时,用于绑定、表单和工作流
@malla/publish快照发布和按需渲染
@malla/ydoc文档的 Yjs 映射
@malla/plugin-sdk、@malla/plugins插件定义和官方插件:REST、GraphQL、CMS、Postgres、Supabase、Airtable、Google Sheets、Resend、Anthropic 和 OpenAI
@malla/bundle用于模板、区块和跨站点复制的站点包
@malla/ai-tools编译为 ops 的 AI 和 MCP 工具结构
@malla/db、@malla/auth-tokenDrizzle 结构和迁移;Workers 之间的签名令牌