Cloudflare 发布 EmDash 1.0,Agent 友好的开源 CMS

EmDash 是免费开源的 WordPress 替代品:Agent 能直接改内容,插件默认关进沙箱,插件目录也不归任何公司,1.0 起可用于正式网站。

作者:Cloudflare09-30 · 约 9 分钟

如果你做过网站,多半用过 WordPress 这类内容管理系统(CMS,编辑用来写文章、传图片、管理网页内容的后台)。Cloudflare 做了一个新的开源 CMS,叫 EmDash,官方叫它 WordPress 的“精神继任者”。它当初是在愚人节推出的,不少人因此怀疑只是个玩笑;现在,1.0 稳定版发布了:免费、MIT 协议开源,可以直接拿来跑正式网站。

下面按一个普通读者最想问的顺序讲:它是什么,解决了传统 CMS 的什么麻烦,有哪些亮点,适合谁、什么场景,怎么用,以及哪些地方还要留意。

EmDash 是什么?

一句话:一个免费开源、对 Agent 友好的网站后台系统。它把三类人的活分开:

  • 开发者用 Astro(一个做网站的前端框架)写网站;
  • 编辑在 EmDash 的后台写文章、管媒体,和用 WordPress 的感觉类似;
  • Agent(能自己动手干活的 AI)可以通过 API、命令行,或者内置的 MCP 服务直接读写内容。
EmDash 的文章编辑界面:左侧是内容、管理、设置菜单,中间是标题、特色图片和富文本编辑区,右侧是发布、URL 与语言、署名、分类等面板
EmDash 的文章编辑后台。

1.0 带来的不只是“稳定”,还有一个同时上线的插件注册中心(插件目录),以及一个开源的 AI 建站器 EmDash Build(alpha 版)。

它想解决传统 CMS 的什么麻烦?

从官方的讲法里,可以梳理出四个痛点。

一,维护负担重。 Avulux 的例子最直接:他们受够了 WordPress 的维护负担,把一个自建的小站迁到了 EmDash。负责创新与系统的总监说,网站要好用、团队好更新,而 WordPress 恰恰成了反面;现在有了一个开发者能扩展、市场人员能直接改内容的共用平台。

二,插件权限没有边界。 WordPress 的插件和整个应用跑在同一个 PHP 进程里,能直接访问数据库、文件系统和网络。一个联系表单插件,从技术上就能读没发布的文章、改别的插件、把数据发到任何地方。站长只能相信它不会这么做,也相信以后的更新不会改变它的行为。

三,插件商店由一家公司说了算。 传统插件商店通常把三个角色捏在一起:发布者的账号、插件包的权威记录、以及用户找插件的目录。账号被封、上架被撤、规则改了、服务关了,发布者都没法把同一个身份和发布历史带去别处。

四,AI 建站后的小改动成本高。 现在建站多半从对话框开始,向 Agent 描述想要什么。但做出来之后,想改点小东西,就得回到提示框里碰运气,或者为改一行字消耗额度。

EmDash 对这四点的回答,分别是后面几节的内容。

亮点一:Agent 友好,不只是能调接口

传统 CMS 是给人点鼠标用的。EmDash 同时给 Agent 开了三扇门:API、命令行,以及内置的 MCP 服务,另外提供了 EmDash Agent Skills(给 Agent 用的技能包),让 Agent 更容易上手。官方的说法是,EmDash 是“Agent 最好的朋友”。前面 Avulux 借助 Agent Skills,迁站不到一天就做完了。

对建站和托管公司,这条路还能往前走一步。这类公司可以用 Workers for Platforms(Cloudflare 让平台把每个客户的网站当作一个 Worker 来跑的服务),不用给每个网站单独配服务器,把精力放在客户建站和管理的体验上。EmDash 提供内容层:平台可以直接用后台界面,也可以基于 API 和命令行做自己的界面,或者在内置 MCP 服务前放一个 Agent。官方举的例子是,面包店老板用一句大白话让平台的 Agent 改营业时间,Agent 负责读取、更新和保存内容。官方还在找更多愿意一起做面向 Agent 的 CMS 体验的托管合作伙伴。

亮点二:插件关进沙箱,装之前先看权限

插件是 CMS 生态的核心:站点开发者不必重复造集成和流程,专家也能分享经验,甚至做成软件生意。官方认为 Agent 让这种复用更有价值:Agent 自己也能为你做一次性的集成,但它得弄懂问题、写代码、测试、再维护;插件把这些工作固化下来,另一个 Agent 可以直接安装配置一个成熟的方案,不必从头再来。

EmDash 的沙箱插件换了一种模型:每个插件在隔离的运行环境里,能访问自己的私有存储,但访问不到网站的内容、媒体、用户、密钥、环境变量、文件系统和网络。额外的能力必须由插件声明,再由站点管理员批准,才会给。

WordPress 与 EmDash 运行结构对比图。左:WordPress 安装是一个整体服务器,恶意插件可直接指向主题、数据库连接、媒体库和其他插件,一处漏洞可能危及所有东西。右:EmDash 安装中,可信的 EmDash worker 充当能力守门人,不可信的动态 Worker 分别持有 media:read 或 posts:read 能力;请求 posts:write 时守门人发现能力不匹配,什么都不返回;漏洞的影响范围被限制在该 Worker 能访问的范围内
官方的运行结构对比图。左边是 WordPress:所有部分在一个整体里,恶意插件能伸手到任何地方。右边是 EmDash:中间的可信 Worker 当“能力守门人”,插件只能拿到自己被批准的那部分。

看图里右边的例子:一个只被批准读取媒体(media:read)的插件,如果去请求写文章(posts:write),守门人会发现它没有这个能力,什么都不返回;另一个被批准读取文章(posts:read)的插件,请求读文章才会被放行。资源之间是隔离的,一处漏洞的影响,只限于这个 Worker 能访问的范围。

所以,装一个沙箱插件更像装手机 App,而不是装传统的 CMS 插件:运行之前,EmDash 会先告诉你它想做什么,运行时再限制它只能做被批准的事。下图是注册中心里 Cloudflare Email Sending 插件的页面,“安装前”一栏列出了它申请的三项权限:可以向声明过的外部地址(api.cloudflare.com)发网络请求、观察并可修改发出的邮件、以及提供邮件发送通道,替换当前的发送方式。

注册中心里 Cloudflare Email Sending 插件的详情页:顶部是发布者账号和插件名,下方“安装前”一栏列出 3 项申请的权限:发起网络请求(api.cloudflare.com)、观察并可修改发出的邮件、提供邮件传输
注册中心里的 Cloudflare Email Sending 插件:安装前先列出它申请的权限。

这样,插件能干有用的活,又拿不到无关的权限:

插件可以是… 它可能需要… 它依然不能…
给已发布文章建索引做搜索 读取内容、联系搜索服务 编辑文章、联系其他主机
优化上传的图片 读取和管理媒体 读取用户内容
发送发布通知 观察发布动作、发送邮件 修改正在发布的内容
提供可配置的 webhook 读取选定的事件、联系公网目标 访问内网,或其他插件的存储

关键在于这些能力彼此独立:给了媒体权限,不等于同时暴露用户和未发布内容;允许联系一个服务,也不等于放开整个网络。这些边界由运行环境来执行,不靠插件作者的自觉。

隔离也不限于 Cloudflare。在 Cloudflare 上,EmDash 通过 Worker Loader 把每个插件当作一个 Dynamic Worker 运行;在 Node.js 上,EmDash 会把 workerd(Cloudflare 开源的 Workers 运行时)作为单独的进程启动,每个插件在里面作为一个隔离的服务运行。两边使用同样的清单和受能力限制的 API。

亮点三:插件目录不归任何公司

权限管住了插件运行时能做什么,还剩一个问题:插件从哪来、可信吗。插件目录网站 plugins.emdashcms.com 随 1.0 一起上线:开发者可以发布沙箱插件,站长可以搜索、查看、安装。

EmDash 插件注册中心首页:大标题 Make EmDash your own,下方有搜索插件、作者和权限的搜索框
EmDash 插件注册中心首页,可以按插件、作者和权限搜索。

EmDash 把插件和目录拆开。发布者自己保管插件包和发布历史,EmDash 只是提供一个方便找和装的地方。别的服务可以索引同一批发布内容,建自己的目录,套自己的规则,开发者不用重新来过。EmDash 的目录会对显示出来的名称、描述、链接和图片做默认审核,审核只能在这个目录里把有害内容隐藏起来,不会改写发布的版本,不会接管插件,也不会抹掉底层的发布记录。

这套东西建在 AT Protocol(简称 atproto)上,它是驱动 Bluesky 的去中心化网络协议。插件作者用 Atmosphere 账号发布,这是这个生态里通用的、可携带的身份。插件包和每个版本的记录由发布者签名,存放在发布者自己的账号里。

“去中心化”不等于放任不验证的代码。atproto 的仓库使用带签名的 Merkle 搜索树,一份包含证明能把某个具体的发布记录,连到发布者账号的一次签名提交上。所以 EmDash 可以独立验证,不必相信目录里的那份拷贝。之后它还会检查插件的校验和、包名、版本、申请的权限,以及需要时的构建来源证明,并确认下载下来的插件包和签名记录一致。

EmDash 自己托管默认的注册服务,让发布者和站长不用自己搭设施。官方还把这些服务全部开源,包括驱动注册中心的聚合器、用 Workers AI 审核包描述的标注服务,以及方便在任意 Astro 网站里嵌入插件列表的加载器。目前只支持免费插件;官方希望以后在同样的去中心化模式下支持付费插件,也在关注 atproto 的 Spaces 内测,目标是让任何人都能运营安全的付费插件市场,让发布者靠软件赚钱。官方的说法是:没有一个中央控制者能一句话就拿走或撤下插件,插件和注册中心的安全,应该写进代码,而不是靠信任某个权威或行为准则。

亮点四:EmDash Build,让 Agent 从一句话搭出整站

同时发布并开源的 EmDash Build(alpha 版)是一个托管商、建站工具和平台可以自己运行,并接进自家系统的 AI 建站器。可以先在 build.emdashcms.com 试 Demo,代码开源在 github.com/emdash-cms/emdash-build。

它回应的是前面第四个痛点:EmDash Build 做出来的是一个完整的 EmDash 网站,带着整套东西:服务器渲染的 Astro 页面、数据库、媒体存储和后台。Agent 根据需求设计内容模型,通过 EmDash 的 MCP 服务把内容填进去,再写显示内容的页面。之后你或你的客户可以直接在页面上改字、定时发文,也可以让 Agent 来改,不必每次回到提示框。

每个项目在 EmDash Build 里都有自己的 Cloudflare Sandbox 容器,基于 Agents SDK 的 Agent 在里面自己验证自己的工作;Artifacts 把每一次改动记成一次 git 提交。网站发布时,内容会转移到正式的 EmDash 站点,并部署到托管商的 Workers for Platforms 命名空间里。

EmDash Build 的界面:左边是对话,提示词要求做一个冰岛风光摄影师的作品集网站,助手回复“你的站点已就绪”,用时 8 分 9 秒;右边是生成的深色摄影作品集网站预览,顶部有发布站点的弹窗,可填写站点地址并发布
在 EmDash Build 里用一段提示词做出的网站:左边是对话,右边是预览和发布面板。

1.0 靠什么让人放心?

EmDash 的第一个测试版出来后,已经有开发者用它上线了真实的网站。但官方一直听到同一种回应:“看起来有意思,等 1.0 了告诉我。”大家想先确认它足够稳定、安全,升级不会伤到内容,Cloudflare 也真的会长期维护。

过去五个月,Cloudflare 和贡献者、正式使用者一起打磨每个网站都绕不开的部分:数据安全、数据库迁移、编辑流程、多语言、插件安全、性能,以及后台、API、MCP 和媒体库的可靠性。其中最有代表性的是 Cloudflare 自己:今年夏天,它把自家的 Cloudflare 博客迁到了 EmDash,官方称这是“Customer Zero”做法,也就是先让自己当第一个用户。博客要扛住每周数百万次页面访问、正常流量最高每秒 5000 个请求,以及偶尔的 DDoS 攻击。迁移过程中催生了三个可选功能,现在对所有用户开放:KV 对象缓存、Hyperdrive 数据库适配器(Hyperdrive 是 Cloudflare 加速数据库连接的服务),以及与 Workers Cache 的兼容。

CMS 存着一个组织最重要的内容,常常有几十位编辑天天在用,所以官方特别强调不能被厂商锁死:EmDash 完全免费,采用宽松的 MIT 协议开源。截至发稿,已有超过 175 人给项目贡献过代码,累计超过 1800 次提交,界面被翻译成 25 种语言。官方还提到,他们刻意把项目做成“Agent 帮人类开发者,而不是把人淹没”的样子。Noah Pham 以实习生身份加入 Cloudflare,后来成了 EmDash 的第二位维护者,贡献了 80 多项改动,负责媒体库、内容编辑器和后台界面的多个重要部分。

生态也在长起来:Lexington Themes 提供 44 个带 EmDash 版本的 Astro 主题;Urumi 正在用做 WooCommerce 的经验发布 EmDash 的第一个电商插件;Empress 在做面向多品牌主体的平台,可以用自然语言或传统后台管理一批网站。

适合谁、什么场景用?

按官方的讲法,可以对号入座:

  • 要搭正式网站的团队:公司的营销站、内容站。官方建议现在是迁移公司营销站的好时机,Cloudflare 自己的博客就是先例。前提是有人会用 Astro 开发,编辑日常则在后台操作。
  • 做网站的代理公司:官方点名的用途之一是“你的代理公司的 vibe-coding 平台”(用对话让 AI 搭站的服务),可以基于 EmDash 提供服务。
  • 托管商和建站平台:用 Workers for Platforms 给每个客户一个独立网站,用沙箱插件给大量客户站点提供扩展,也可以自建插件市场,开放整个注册中心,或只挑一批预先批准的插件。
  • 一个人的小项目:官方提到可以让 Agent 帮你搭起想做的小站;Avulux 的小站迁移也只用了不到一天。
  • 插件开发者:想做扩展并靠它赚钱的人,可以不经 EmDash 许可直接发布;站长在运行前就能看清它被允许做什么。
  • 要管一批站点的组织:例如 Empress 这类面向多品牌主体的平台,用自然语言或传统后台管理一批网站。

怎么用?

  1. 先试玩:打开 try.emdashcms.com 的 playground,或在 build.emdashcms.com 试 EmDash Build 的 Demo。
  2. 本地新建一个站点:终端里运行下面这行:
npm create emdash@latest
  1. 部署:也可以在 Cloudflare 控制台一键部署官方博客模板。
  2. 迁移已有网站:官方提到借助 EmDash Agent Skills,让 Agent 帮忙迁站;后台菜单里也有导入(Import)入口。
  3. 开发插件:官方文档有一份从零开始的教程,讲怎么创建插件并发布到插件注册中心。
  4. 看源码、自己搭:EmDash 主项目在 github.com/emdash-cms/emdash;AI 建站器 EmDash Build 的代码在 github.com/emdash-cms/emdash-build,托管商和平台可以自己运行并接进自家系统;注册中心的聚合器、审核标注服务和 Astro 加载器也都开源,代码在主项目里。
  5. 加入社区:Discord 上已有 800 多人;做贡献不一定要写代码,翻译、文档、测试、设计、整理问题、答疑都算。

该怎么看

EmDash 不只是“又一个 WordPress 替代品”。把前面几节合起来看,它让 CMS 同时回答三个问题——Agent 能不能读写内容(API、命令行、MCP),Agent 或人装的扩展会不会越权(默认没有权限、先声明再批准、运行环境强制执行),扩展的来源能不能独立验证(签名的发布记录,目录只是入口)。如果你在做要让 Agent 装扩展的产品,这三点可以直接对照。

但也要看清现状:注册中心现在只支持免费插件,付费市场还在规划中;EmDash Build 目前是 alpha 版;站点本身要用 Astro 开发,所以自己上手需要有开发能力;不写代码的编辑,更多是在搭好的后台里日常使用。

来源
EmDash 1.0: the stable CMS with a secure plugin registryScott Buscemi, Matt Kane, Noah Pham(Cloudflare)·查看主材料
↑ 正文结束
✓ 本篇全文免费开放

会员可复制、下载全文 Markdown,还能让你的 AI 订阅和提问。

阅读原文 ↗
📮 新解读第一时间进邮箱

读完觉得有用?留个邮箱,每篇新解读发布就送达,随时退订。