Cloudflare

认识 EmDash:Cloudflare 推出的下一代 AI 原生 CMS

全面介绍 Cloudflare 开源的 EmDash:基于 Astro 与 TypeScript 的 AI 原生 CMS,涵盖沙盒插件安全、 Portable Text、Serverless 性能、MCP 与 x402,以及五分钟本地上手与 v0.29.0 亮点。

约二千字·读约六分钟 · English

认识 EmDash:Cloudflare 推出的下一代 AI 原生 CMS

如果你在过去十几年里做过网站,一定对 WordPress 并不陌生。作为驱动全球超过 40% 网站的霸主,它成就了 Web 内容的繁荣。然而,在云计算和人工智能飞速发展的今天,传统 CMS 的历史包袱也越来越沉重。

2026 年 4 月,Cloudflare 正式推出了一款名为 EmDash 的全新开源内容管理系统(CMS),并将其大胆地称为「WordPress 的精神继任者」。EmDash 抛弃了传统的 PHP 架构,完全采用 TypeScript 编写,并基于 Astro 6.0 框架构建。这个由AI协助在两个月内开发完成的新生代 CMS,到底有哪些的创新?

1. 彻底解决「插件安全危机」

如果你运维过 WordPress,一定为层出不穷的插件漏洞头疼过。据统计,WordPress 生态中高达 96% 的安全漏洞都来源于第三方插件。这是因为在传统架构下,插件一旦安装,就拥有了对宿主服务器数据库和文件系统的全局读写权限。

EmDash 通过「沙盒机制」解决了这个问题。它利用 Cloudflare 的 Dynamic Workers 技术,将每一个插件隔离在独立的 V8 JavaScript Isolate 沙盒中运行。开发者在编写插件时必须明确声明权限(例如仅仅请求访问内容、发送邮件的权限)。插件只能执行被授权的操作,从根本上切断了恶意代码越权访问核心数据的途径。

2. 拥抱结构化数据与极致的 Serverless 性能

传统 CMS 通常会将文章内容、排版样式甚至短代码(Shortcodes)混合成一长串 HTML 存入数据库。这在移动端多渠道分发的今天显得十分笨重。

EmDash 则采用了 Portable Text(便携式文本) 标准,将内容保存为高度结构化的纯 JSON 格式。这意味着同一份内容可以无缝渲染到网页、移动端 App、智能手表,甚至作为 API 返回,实现了内容与表现层的真正解耦。

在性能方面,深度绑定 Astro 框架的 EmDash 默认向客户端输出纯静态的极速页面。同时,它专为 Serverless(无服务器)环境打造,完美契合「缩放至零」(Scale-to-Zero)特性——没有流量时系统休眠且不产生计算成本;流量洪峰到来时,又能瞬间拉起成千上万个实例应对。

3. 天生为 AI 时代打造

EmDash 最具前瞻性的设计,在于它不仅仅是给人类使用的,更是给 AI 代理(Agents)准备的。每一个 EmDash 站点都内置了模型上下文协议(MCP)服务器,并提供专为大语言模型阅读的 Agent Skills 文档。这意味着像 Claude 或 ChatGPT 这样的 AI 助手,可以直接通过 API 读取你的数据库结构、自动编排内容,甚至帮你编写和部署新的插件。

更有趣的是,为了应对 AI 爬虫抓取内容导致创作者难以变现的难题,EmDash 底层原生集成了 x402 开放微支付标准。网站所有者可以利用这一机制,让机器人在读取 JSON 数据时自动进行按需微支付,为「机器对机器」的商业模式打下基础。

4. 动手实践:五分钟跑通你的第一个 EmDash 站点

你可以直接在本地 Node.js 环境中快速体验,无需马上绑定 Cloudflare 账号。

第一步:环境准备

请确保你的电脑上安装了 Node.js v22.12.0 或更高版本(请注意,EmDash 不支持奇数版本的 Node.js)。

第二步:创建项目

打开终端,运行以下命令即可脚手架初始化一个新项目:

npm create emdash@latest

按照提示输入你的项目名称并完成依赖安装。

第三步:启动服务与初始化配置

进入项目目录并启动本地开发服务器:

cd my-emdash-site
npm install
npm run dev

此时你的网站已经运行在本地的 4321 端口上。

第四步:体验无密码后台

在浏览器中打开后台配置向导:

http://localhost:4321/_emdash/admin

在这里,你需要输入站点名称和管理员邮箱。最酷的是,你不需要设置任何密码。点击「创建站点」后,浏览器会直接调用你设备的指纹识别、Face ID 或 Windows Hello 创建一个 Passkey(通行证),完成秒级安全登录。

第五步:探索配置与沙盒插件

回到代码编辑器,你会发现项目根目录下有一个 astro.config.mjs 文件。EmDash 本质上是 Astro 的一个集成(Integration),只需简单几行代码即可完成数据库和媒体存储的挂载。

如果你想开发插件,根据最新的 EmDash 官方文档,为了实现极致的安全沙盒机制,插件的「构建时描述」(元数据)与「运行时逻辑」被严格分离为两个文件。

首先,在 src/index.ts 中通过工厂函数返回 PluginDescriptor,声明插件的基础信息及其所需的明确权限:

import type { PluginDescriptor } from "emdash";

export function notifyPlugin(): PluginDescriptor {
  return {
    id: "notify-on-publish",
    version: "1.0.0",
    format: "standard",
    entrypoint: "./sandbox-entry",
    capabilities: ["read:content", "email:send"]
  };
}

接着,在 src/sandbox-entry.ts 中使用 definePlugin() 编写实际的运行逻辑。这里不再需要重复声明 ID 和权限,而是专注于钩子(Hooks)或路由的实现:

import { definePlugin, type PluginContext } from "emdash";

export default definePlugin({
  hooks: {
    "content:afterSave": {
      handler: async (event: any, ctx: PluginContext) => {
        // 在此编写逻辑;插件运行在隔离沙盒中,仅能使用声明过的 ctx.email 等 API
      }
    }
  }
});

最后,在 astro.config.mjs 的配置中,将该插件工厂函数传入 sandboxed: [notifyPlugin()] 数组,即可使其在受保护的隔离环境中运行。这种分离式的现代架构不仅让定制功能变得清晰,还彻底堵死了传统 CMS 的越权安全漏洞。

5. 持续进化的生态:最新 0.29.0 版本亮点

作为一个新兴的开源项目,EmDash 保持着极快的迭代速度。在最新的 0.29.0 版本中,系统的核心模块均迎来了重要升级:

  • 搜索与性能飞跃:API 和后台搜索现已正式支持基于游标的分页(Cursor Pagination),彻底解决了旧版本中搜索结果无法加载下一页的问题。同时,对于开启了全文搜索(FTS5)的内容集合,系统利用底层索引实现了检索速度的大幅提升。
  • AI 能力扩展:内置的 MCP 服务器变得更加强大。AI 代理现在可以在创建或更新内容时,直接分配和管理相关的分类与标签(Taxonomies)。
  • 安全与 SEO 增强:新版本修复了一个关键的缓存隐患,确保带有预览令牌的草稿绝不会被错误地存入边缘缓存,防止了未发布内容的泄露。在 SEO 方面,系统现在会自动为多语言站点生成 hreflang 备用链接标签,对搜索引擎更加友好。

尽管社区目前仍在追踪一些后台编辑器中的小瑕疵(例如自动保存可能导致的草稿覆盖竞态问题),但这些高频更新正是 EmDash 不断走向成熟、拥抱现代 Web 挑战的最佳证明。

6. 总结:未来的 CMS 长什么样?

虽然 EmDash 目前还处于早期阶段,其插件生态和电商能力还无法与拥有二十年历史的 WordPress 相提并论,且高级沙盒功能也较为依赖 Cloudflare 的商业生态。但不可否认,它向我们展示了下一代 Web 基础设施的雏形:类型安全、边缘计算驱动,以及 AI 原生

如果你想继续跟踪 EmDash 相关工具、教程与社区资源,可以关注精选列表 awesome-emdash

如果你是一名前端开发者,或者正在寻找一个现代化、高性能的内容管理方案,现在就打开终端试一下吧:

npm create emdash@latest

References

Mttao

Mttao GitHub ↗

探索技术与生活的智慧

相关文章

/ 评论