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 密钥认证。
六条原则
- 处处使用同一种文档格式。 页面、组件和画布草稿区共享
PageDoc结构。 - 同一个渲染器。 画布和已发布站点运行同一个
@malla/renderer,所见即所发布。 - 同一个工作流引擎。 客户端和服务端工作流共享一种 JSON 格式和
@malla/engine,只是适配器不同。 - 内置功能也是插件。 REST、GraphQL 和 CMS 与其他所有官方连接器使用同一套插件 SDK。
- 绝不对用户输入执行
eval。 表达式从 AST 解释执行;自定义代码在隔离环境(isolate)中运行。 - 密钥绝不进入浏览器。 需要认证的集成调用在服务端代理。
从一个操作手势到数据库
手势一次拖拽、一次字段编辑、一次 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-token | Drizzle 结构和迁移;Workers 之间的签名令牌 |