EmDashの紹介 ― WordPressの精神的後継者でありプラグインのセキュリティ問題を解決
Cloudflareは、WordPressの精神的後継として、プラグインのセキュリティ問題を解決するサーバーレスCMS「EmDash」をTypeScriptで一から開発し、オープンソースで公開した。
キーポイント
WordPressの後継CMS「EmDash」の発表
CloudflareがWordPressの精神的後継となる新しいCMS「EmDash」を開発し、オープンソースで公開した。
プラグインセキュリティ問題の根本的解決
EmDashはプラグインをDynamic Workersで安全にサンドボックス化し、WordPressのプラグインアーキテクチャの根本的なセキュリティ問題を解決する。
現代的な技術スタックとアーキテクチャ
TypeScriptで記述され、サーバーレスで動作し、Astroを基盤とする高速なWebフレームワークを採用している。
AIコーディングエージェントによる開発
CloudflareのAIコーディングエージェントが2ヶ月間かけてWordPressを一から再構築するプロジェクトに取り組んだ。
柔軟なライセンスと展開オプション
MITライセンスで提供され、Cloudflareアカウントや任意のNode.jsサーバーにデプロイ可能で、開発者コミュニティの参加を促進する。
WordPressプラグインのセキュリティ問題
WordPressプラグインはPHPスクリプトとして直接WordPressにフックし、データベースやファイルシステムに直接アクセスできるため、セキュリティ上の根本的な問題がある。WordPressサイトのセキュリティ問題の96%はプラグインに起因している。
EmDashのセキュリティソリューション
EmDashでは各プラグインが独自の隔離されたサンドボックス(Dynamic Worker)で実行され、プラグインはマニフェストで明示的に宣言した機能のみにアクセスできる。OAuthフローのように、インストール前に許可する権限を正確に把握できる。
影響分析・編集コメントを表示
影響分析
この発表は、インターネットの40%以上を占めるWordPressエコシステムに大きな影響を与える可能性がある。プラグインセキュリティという長年の課題を解決する新アーキテクチャを提案することで、CMS市場の再編を促し、AIを活用した大規模ソフトウェア開発の実用例としても注目される。
編集コメント
WordPressの根本的な課題に挑戦する野心的なプロジェクトで、AI開発ツールの実用化が進んでいることを示す好例。CMS市場のパラダイムシフトを引き起こす可能性がある注目の発表。
ソフトウェア構築のコストは劇的に低下しました。私たちは最近、AI コーディングエージェントを使って Next.js を一週間で再構築しました。しかし、過去 2 ヶ月間、これらのエージェントはさらに野心的なプロジェクトに取り組んできました:WordPress オープンソースプロジェクトをゼロから再構築することです。
WordPress はインターネットの 40% 以上を支えています。これは誰もがパブリッシャーになれるようにし、世界中の WordPress 開発者コミュニティを創出した画期的な成功事例です。しかし、WordPress のオープンソースプロジェクトは今年で 24 年を迎えます。その間、ウェブサイトのホスティング環境は劇的に変化しました。WordPress が誕生した当時、AWS EC2 は存在していませんでした。その後の年月で、このタスクは仮想プライベートサーバーのレンタルから、ほぼ無料ですべての JavaScript バンドルをグローバルに分散されたネットワークへアップロードすることへと進化しました。インターネット上で最も人気のある CMS を、この変化を活かすためにアップグレードする時が来ました。
新しい CMS の名称は EmDash です。私たちはこれを WordPress の精神的後継者と捉えています。EmDash は TypeScript だけで完全に記述されています。サーバーレスですが、ご自身のハードウェアや任意のプラットフォームで実行可能です。プラグインは安全にサンドボックス化され、Dynamic Workers を介して独自のアイソレート環境で動作します。これにより、WordPress プラグインアーキテクチャが抱える根本的なセキュリティ問題を解決しました。また、内部ではコンテンツ駆動型ウェブサイト向けに最速の Web フレームワークである Astro が動力源となっています。
EmDash は完全にオープンソースであり、MIT ライセンスの下で提供され、GitHub で入手可能です。EmDash は WordPress の機能との互換性を目指していますが、EmDash を作成する際に WordPress のコードは一切使用されていません。これにより、より寛容な MIT ライセンスの下でこのオープンソースプロジェクトをライセンスすることが可能になります。これによって、より多くの開発者が EmDash の適応、拡張、および開発への参加を行えるようになることを願っています。
EmDash v0.1.0 プレビューは、早期開発者ベータの一環として、今日からご自身の Cloudflare アカウントまたは任意の Node.js サーバーにデプロイすることができます:
あるいは、EmDash Playground 内のこちらで管理インターフェースを試すこともできます:
image
WordPress が成し遂げたこと
WordPress の物語は、かつてない規模での出版を可能にしたオープンソースの成功事例です。インターネット世代に育った人々に対して、これほど認識度の高い影響を与えたプロジェクトはほとんどありません。WordPress コアへの貢献者、そして何千ものプラグインおよびテーマ開発者が築き上げたプラットフォームは、数百万人のための出版を民主化しました。この至る所に存在するソフトウェアによって、多くの人々の人生と生計が変容しています。
WordPress のための場所も常に存在しますが、コンテンツ出版の世界にはさらに多くの成長の余地があります。10 年前は、キーボードを手に取る人々が誰でも WordPress でブログを公開する方法を普遍的に学びました。今日では、その人が Astro や他の TypeScript フレームワークを手に取り、それらを使って学ぶ可能性も同様に高いです。エコシステムには、23 年前の WordPress が必要としたのと同じように、幅広い層を支援する選択肢が必要です。
EmDash は、WordPress が築いたものを基盤として構築することにコミットしています:誰でも低コストでインストールして使用できるオープンソースの出版スタックでありながら、WordPress では解決できない核心的な問題を解消します。
WordPress プラグインセキュリティ危機の解決
WordPress のプラグインアーキテクチャは根本的に不安全です。WordPress サイトのセキュリティ問題の 96% はプラグインに起因しています。2025 年には、WordPress エコシステムで発見された深刻度の高い脆弱性の数が、過去 2 年間の合計を上回りました。
なぜ、20 年以上が経過した現在でも WordPress のプラグインセキュリティはこれほど問題なのでしょうか?
WordPress プラグインとは、機能の追加や変更を行うために WordPress に直接フックする PHP スクリプトです。隔離機構がありません:WordPress プラグインは WordPress サイトのデータベースとファイルシステムに直接アクセスできます。WordPress プラグインをインストールすることは、ほぼすべての権限をそのプラグインに委ね、あらゆる悪意のある入力やエッジケースを完璧に処理することを信頼することに他なりません。
EmDash はこの問題を解決します。EmDash では、各プラグインは独自の隔離されたサンドボックスである「Dynamic Worker」内で実行されます。EmDash は、基盤となるデータへの直接アクセスを与えるのではなく、プラグインがマニフェストで明示的に宣言したニーズに基づき、バインドを通じて機能を提供します。このセキュリティモデルには厳格な保証があります:EmDash プラグインは、マニフェストに明示的に宣言されたアクションのみを実行できます。プラグインをインストールする前に、OAuth フローを経由してサードパーティ製アプリに特定の範囲の権限を付与する場合と同様に、何の許可を与えるのかを事前に明確に把握し信頼することができます。

例えば、コンテンツアイテムが保存された後にメールを送信するプラグインは、以下のようになります。
import { definePlugin } from "emdash";
export default () =>
definePlugin({
id: "notify-on-publish",
version: "1.0.0",
capabilities: ["read:content", "email:send"],
hooks: {
"content:afterSave": async (event, ctx) => {
if (event.collection !== "posts" || event.content.status !== "published") return;
await ctx.email!.send({
to: "editors@example.com",
subject: `New post published: ${event.content.title}`,
text: `"${event.content.title}" is now live.`,
});
ctx.log.info(`Notified editors about ${event.content.id}`);
},
},
});
このプラグインは明示的に2つの機能権限を要求しています。1つ目は content:afterSave で、コンテンツのライフサイクルにフックするためのものです。2つ目は email:send で、ctx.email 関数へのアクセス権です。このプラグインがこれらの権限以外で何らかの動作を行うことは不可能です。外部ネットワークへのアクセス権も持ちません。もしネットワークアクセスが必要であれば、定義の一部として通信先のホスト名を正確に指定し、特定のホストとの通信のみを許可されるようにすることができます。
すべてのケースにおいて、プラグインの要件が静的かつ事前に宣言されているため、インストール時にそのプラグインが何の権限を要求しているのかを明確に把握できます。プラットフォーム管理者は、承認済みまたは安全なプラグインの一覧(ホワイトリスト)に基づくのではなく、ユーザーグループに対してどの権限を要求するプラグインのインストールを許可・禁止するかというルールを定義することが可能です。
プラグインセキュリティの問題を解決することは、マーケットプレイスによるロックインの解消を意味します
WordPress プラグインのセキュリティは、非常に現実的なリスクです。そのため WordPress.com では、そのマーケットプレイス内の各プラグインを手動で審査し承認しています。執筆時点では、この審査待ちリストには 800 件を超えるプラグインが並び、それを処理するには少なくとも 2 週間を要します。WordPress プラグインの脆弱性(vulnerability)の範囲はあまりにも広範であり、実務上、すべての関係者はマーケットプレイスでの評判、評価、レビューに頼らざるを得ません。さらに、WordPress プラグインは WordPress 自体と同じ実行コンテキストで動作し、WordPress のコードと深く絡み合っているため、一部の主張では GPL ライセンス(GNU General Public License)を引き継ぐ必要があるとする意見もあります。
これらの現実が組み合わさることで、プラグインを開発する開発者や WordPress サイトをホストするプラットフォームに対して、萎縮効果(chilling effect)が生じています。
この問題の根源はプラグインのセキュリティです。マーケットプレイス事業は、当事者同士が互いに容易に信頼し合えない場合に信頼を提供します。WordPress マーケットプレイスの場合、プラグインのセキュリティリスクがあまりにも大きく確率的に高いものとなるため、多くの顧客はマーケットプレイスを介してのみあなたのプラグインを合理的に信頼できるのです。しかし、マーケットプレイスの一員となるためには、そのコードをライセンスする際に、マーケットプレイス以外ではどこでも無料で提供することを強制されるような形式でなければなりません。あなたはロックイン(市場への縛り)されてしまうのです。
EmDash プラグインには、このマーケットプレイスによるロックインを緩和する 2 つの重要な特性があります:
プラグインはあらゆるライセンスを採用できます:EmDash とは独立して動作し、コードを共有しません。これはプラグイン作者の選択に委ねられます。
プラグインコードは、安全なサンドボックス内で独立して実行されます。EmDash サイトにプラグインを提供し、信頼しても、EmDash サイト側がそのコードを直接目にすることはありません。
最初の部分は至ってシンプルです——プラグイン作者であるあなたが、どのライセンスを使用するかを選択します。NPM、PyPi、Packagist、または他のレジストリへ公開する際と同じように、これはすべてオープンなエコシステムであり、プラグインやテーマに使用するライセンスはコミュニティの判断に委ねられ、EmDash プロジェクト自体が決定するものではありません。
2 番目の部分が、EmDash のプラグインアーキテクチャが中央集権型のマーケットプレイスから脱却する点です。
開発者は、第三者のマーケットプレイスがプラグインを審査したかどうかを頼りにして、それを使用するか信頼するかを判断せざるを得ません。先ほどの例を考えてみてください——コンテンツ保存後にメールを送信するプラグインは、以下の 3 つのことを宣言しています。
- コンテンツ:afterSave フックでのみ実行される
- read:content という権限を持つ
- email:send という権限を持つ
このプラグインには数万行のコードが含まれている可能性がありますが、WordPress のプラグインのようにすべてのものにアクセスできパブリックインターネットと通信できるのとは異なり、プラグインを追加する人は、自分が付与しているアクセス権が何であるかを正確に把握できます。明確に定義された境界線により、セキュリティリスクについて十分な情報に基づいた判断を下すことができ、さらに、プラグインに付与された機能に関連するより具体的なリスクに焦点を当てることも可能になります。
サイトやプラットフォームがセキュリティモデルを信頼して制約を提供できるほど、それらはプラグインをより信頼できるようになり、マーケットプレイスや評判による集中管理から脱却できます。言い換えれば、あなたの街で食品安全規制が厳格に実施されていると信頼できれば、新しい場所にも挑戦する意欲が湧きます。しかし、スープの中に異物が混入している可能性を信頼できない場合、新しい店を訪れるたびに Google で確認することになり、誰もが新しいレストランを開くことが難しくなります。
すべての EmDash サイトには x402 サポートが組み込まれており、コンテンツへのアクセスに対して課金することが可能です。
ウェブのビジネスモデルは特にコンテンツクリエイターやパブリッシャーにとってリスクにさらされています。コンテンツを広く利用可能にし、トラフィックとの引き換えにすべてのクライアントに無料アクセスを提供するという従来の方法は、サイトを広告する人間が存在せず、代わりにクライアントがその代理人としてウェブにアクセスする状況では機能しません。クリエイターは、この新しいエージェントの世界でも収益を生み続ける方法と、人々のエージェントが必要とし、支払いを行うような新たな種類のウェブサイト構築の手段を必要としています。数十年前に、新たな波のクリエイターたちが優れたビジネスとなったウェブサイト(多くは WordPress を使用して構築されました)を作り上げましたが、今日も同様の機会が存在します。
x402 は、インターネットネイティブな決済のためのオープンで中立な標準規格です。これにより、インターネット上の誰でも簡単に課金することができ、クライアントはオンデマンド、使用量ベースで即時支払いを行うことができます。エージェントなどのクライアントが HTTP リクエストを送信すると、サーバーから「HTTP 402 Payment Required(支払いが必要)」というステータスコードが返されます。それに応じてクライアントはアクセスに対してオンデマンドで支払いを行い、サーバーはそのコンテンツへのアクセスを許可します。
EmDash は x402 をネイティブサポートしています。つまり、EmDash サイトを持つ誰でも、サブスクリプションの必要性やエンジニアリング作業ゼロで、コンテンツへのアクセス料金を設定できます。必要な作業は、どのコンテンツに支払いを要求するかを設定し、課金額を決め、ウォレットアドレスを提供するだけです。リクエストとレスポンスの流れは以下のようになります。

すべての EmDash サイトには、AI エラに対応したビルトインのビジネスモデルが備わっています。
WordPress ホスティングプラットフォームにおけるスケール・トゥ・ゼロ(需要に応じてリソースをゼロまで縮小する仕組み)の問題を解決
WordPress はサーバーレスではありません。従来の Web アプリケーションと同様に、サーバーの用意と管理、そして需要に応じてスケールアップ・ダウンする必要があります。パフォーマンスを最大化し、トラフィックの急増に対応するためには、インスタンスを事前に用意してアイドル状態の計算リソースを実行するか、パフォーマンスを制限する形でリソースを共有する以外にありません。これは、サーバー側でレンダリングする必要がありキャッシュできないコンテンツを持つサイトにおいて特に顕著です。
EmDash はこれとは異なります。サーバーレスプラットフォーム上で動作するように設計されており、Cloudflare のオープンソースランタイム「workerd」の v8 イソレートアーキテクチャを最大限に活用します。リクエストが入ってくると、Workers ランタイムは即座にイソレートを起動してコードを実行し、応答を提供します。リクエストがない場合はゼロまでスケールダウンします。また、請求されるのは CPU 使用時間(実際に作業を行った時間)のみです。

EmDash は任意の Node.js サーバーで実行できますが、Cloudflare 上では「Cloudflare for Platforms」を活用することで、世界中の最大規模のウェブサイトが信頼する同じネットワークとランタイムを用いて、数百万もの EmDash インスタンスを同時に実行できます。各インスタンスは、必要に応じて即座にゼロまでスケールダウンするか、処理が必要な RPS(1 秒間のリクエスト数)に合わせてフルスケールします。
コスト最適化やパフォーマンス向上のメリットを超えて、Cloudflare ではこのアーキテクチャに賭けた理由の一つは、低コストかつ無料枠を維持し、誰もがスケーラブルなウェブサイトを作成できるべきだと信じているからです。私たちは、大規模企業から小規模事業者まで、すべてのプラットフォームがこのアーキテクチャの恩恵を自社の顧客にも提供できるよう支援することを嬉しく思っています。
Astro を通じたモダンなフロントエンドのテーマ設計とアーキテクチャ
EmDash は、コンテンツ駆動型ウェブサイト向けのウェブフレームワークである Astro によって支えられています。EmDash のテーマを作成するには、以下の要素を含む Astro プロジェクトを構築します:
ページ: コンテンツ(ホームページ、ブログ記事、アーカイブなど)のレンダリングを行うための Astro ルート
レイアウト: 共有される HTML 構造
コンポーネント: ナビゲーション、カード、フッターなどの再利用可能な UI 要素
スタイル: CSS または Tailwind の設定
シードファイル: CMS に作成すべきコンテンツタイプとフィールドを指示する JSON ファイル
これにより、Astro を選択する傾向が高まっているフロントエンド開発者や、すでに Astro について学習済みの大規模言語モデル(LLM)にとって、テーマの作成がより親しみやすいものとなります。
WordPress のテーマは非常に柔軟ですが、プラグインと同様の多くのセキュリティリスクを抱えており、あなたのテーマが人気で一般的であればあるほど、攻撃の標的になりやすくなります。テーマは functions.php を介して統合されるため、これは包括的な実行環境であり、あなたのテーマを極めて強力にする一方で、潜在的に危険なものにもします。EmDash のテーマは、動的プラグインと同様に、この期待を逆転させます。あなたのテーマがデータベース操作を実行することは決してありません。
AI ネイティブ CMS — EmDash 用の MCP、CLI、およびスキル
どの CMS を扱うにしても、最もつまらない部分はコンテンツの単純な移行作業です:文字列の検索と置換、カスタムフィールドをある形式から別の形式へ移行する、名前の変更、順序の入れ替え、移動など。これは退屈で反復的な作業か、あるいは一度きりのスクリプトや「単用途」プラグイン・ツールが必要となり、通常はそれらを書くのも使うのも楽しくありません。
EmDash は、AI エージェントによってプログラム的に管理されるように設計されています。エージェントに必要なコンテキストとツールを提供します。以下が含まれます:
エージェントスキル:各 EmDash インスタンスには、プラグインに提供できる EmDash の機能、プラグインをトリガーするフック、プラグインの構造化方法に関するガイダンス、さらにはレガシー WordPress テーマを EmDash ネイティブへ移行する方法までを含む「エージェントスキル」が組み込まれています。エージェントに EmDash コードベースを与えると、EmDash は必要なすべての情報を提供し、あなたが望む通りにサイトをカスタマイズできるようにします。
EmDash CLI:EmDash CLI を使用すると、エージェントはローカルまたはリモートの EmDash インスタンスとプログラム的に連携できます。メディアのアップロード、コンテンツ検索、スキーマの作成・管理など、管理画面(Admin UI)でできる一連の操作をすべて実行可能です。
組み込み MCP サーバー:すべての EmDash インスタンスには、独自のリモートモデルコンテキストプロトコル(MCP: Model Context Protocol)サーバーが用意されており、管理画面(Admin UI)で可能な一連の操作を同様に実行できます。
プラグイン対応認証(デフォルトはパスキー)
EmDash はデフォルトでパスキーベースの認証を採用しており、パスワード漏洩のリスクもブルートフォース攻撃への対策も不要です。ユーザー管理には、管理者、編集者、投稿者、貢献者といった一般的なロールベースアクセス制御が標準で用意されており、各ロールは必要なアクションに厳密にスコープされます。認証機能はプラグイン対応となっており、SSO プロバイダーと連携して設定することも可能で、IdP メタデータに基づいて自動的にアクセス権をプロビジョニングできます。
WordPress サイトを EmDash へインポート
既存の WordPress サイトをインポートするには、WordPress 管理画面から WXR ファイルをエクスポートするか、WordPress サイトに「EmDash Exporter」プラグインをインストールして、ユーザーのみがアクセスでき、ユーザー自身が管理する WordPress アプリケーションパスワードで保護された安全なエンドポイントを構成する方法があります。コンテンツの移行には数分しかかからず、添付されているメディアも自動的に EmDash のメディアライブラリに取り込まれます。

WordPress で投稿やページ以外のカスタムコンテンツタイプを作成するには、Advanced Custom Fields などの重いプラグインをインストールし、その結果を混雑した WordPress の投稿テーブルに無理やり収める必要がありました。EmDash はこれとは異なるアプローチを採用しています:管理パネルでスキーマを直接定義するだけで、データベース上で完全に独立して順序付けされた新しい EmDash コレクションが自動的に作成されます。インポート時には、同じ機能を使用して WordPress から任意のカスタム投稿タイプを取得し、それを基に EmDash のコンテンツタイプを作成することができます。
独自のカスタムブロックを使用したい場合は、「EmDash Block Kit Agent Skill」を活用して、お好みのエージェントに指示を出し、EmDash 用のブロックを構築できます。

Try it
EmDash は v0.1.0 のプレビュー版であり、ぜひご試用のうえフィードバックをお寄せいただき、EmDash の GitHub リポジトリへの貢献も歓迎いたします。
単に遊びで触ってみたい方や、まずは何が可能か理解したい方は、EmDash Playground で管理画面を試してみてください。
ローカル環境で新しい EmDash サイトを作成するには、CLI を使用して以下を実行してください:
npm create emdash@latest
または、以下の Cloudflare ダッシュボードから同様の操作を行うこともできます:

あなたがどのようなものを構築するか楽しみです。WordPress コミュニティに所属されている方、ホスティングプラットフォームの関係者、プラグインやテーマの作者、あるいはその他の方でも、ぜひご意見をお聞かせください。emdash@cloudflare.com までメールをお送りいただき、EmDash プロジェクトで実現してほしい機能についてお教えください。
EmDash の主要な開発動向を最新の状態でお知りになりたい場合は、ここでメールアドレスをご登録ください。原文を表示
The cost of building software has drastically decreased. We recently rebuilt Next.js in one week using AI coding agents. But for the past two months our agents have been working on an even more ambitious project: rebuilding the WordPress open source project from the ground up.
WordPress powers over 40% of the Internet. It is a massive success that has enabled anyone to be a publisher, and created a global community of WordPress developers. But the WordPress open source project will be 24 years old this year. Hosting a website has changed dramatically during that time. When WordPress was born, AWS EC2 didn’t exist. In the intervening years, that task has gone from renting virtual private servers, to uploading a JavaScript bundle to a globally distributed network at virtually no cost. It’s time to upgrade the most popular CMS on the Internet to take advantage of this change.
Our name for this new CMS is EmDash. We think of it as the spiritual successor to WordPress. It’s written entirely in TypeScript. It is serverless, but you can run it on your own hardware or any platform you choose. Plugins are securely sandboxed and can run in their own isolate, via Dynamic Workers, solving the fundamental security problem with the WordPress plugin architecture. And under the hood, EmDash is powered by Astro, the fastest web framework for content-driven websites.
EmDash is fully open source, MIT licensed, and available on GitHub. While EmDash aims to be compatible with WordPress functionality, no WordPress code was used to create EmDash. That allows us to license the open source project under the more permissive MIT license. We hope that allows more developers to adapt, extend, and participate in EmDash’s development.
You can deploy the EmDash v0.1.0 preview to your own Cloudflare account, or to any Node.js server today as part of our early developer beta:
Or you can try out the admin interface here in the EmDash Playground:
image
What WordPress has accomplished
The story of WordPress is a triumph of open source that enabled publishing at a scale never before seen. Few projects have had the same recognisable impact on the generation raised on the Internet. The contributors to WordPress’s core, and its many thousands of plugin and theme developers have built a platform that democratised publishing for millions; many lives and livelihoods being transformed by this ubiquitous software.
There will always be a place for WordPress, but there is also a lot more space for the world of content publishing to grow. A decade ago, people picking up a keyboard universally learned to publish their blogs with WordPress. Today it’s just as likely that person picks up Astro, or another TypeScript framework to learn and build with. The ecosystem needs an option that empowers a wide audience, in the same way it needed WordPress 23 years ago.
EmDash is committed to building on what WordPress created: an open source publishing stack that anyone can install and use at little cost, while fixing the core problems that WordPress cannot solve.
Solving the WordPress plugin security crisis
WordPress’ plugin architecture is fundamentally insecure. 96% of security issues for WordPress sites originate in plugins. In 2025, more high severity vulnerabilities were found in the WordPress ecosystem than the previous two years combined.
Why, after over two decades, is WordPress plugin security so problematic?
A WordPress plugin is a PHP script that hooks directly into WordPress to add or modify functionality. There is no isolation: a WordPress plugin has direct access to the WordPress site’s database and filesystem. When you install a WordPress plugin, you are trusting it with access to nearly everything, and trusting it to handle every malicious input or edge case perfectly.
EmDash solves this. In EmDash, each plugin runs in its own isolated sandbox: a Dynamic Worker. Rather than giving direct access to underlying data, EmDash provides the plugin with capabilities via bindings, based on what the plugin explicitly declares that it needs in its manifest. This security model has a strict guarantee: an EmDash plugin can only perform the actions explicitly declared in its manifest. You can know and trust upfront, before installing a plugin, exactly what you are granting it permission to do, similar to going through an OAuth flow and granting a 3rd party app a specific set of scoped permissions.
image
For example, a plugin that sends an email after a content item gets saved looks like this:
import { definePlugin } from "emdash";
export default () =>
definePlugin({
id: "notify-on-publish",
version: "1.0.0",
capabilities: ["read:content", "email:send"],
hooks: {
"content:afterSave": async (event, ctx) => {
if (event.collection !== "posts" || event.content.status !== "published") return;
await ctx.email!.send({
to: "editors@example.com",
subject: New post published: ${event.content.title},
text: "${event.content.title}" is now live.,
});
ctx.log.info(Notified editors about ${event.content.id});
},
},
});
This plugin explicitly requests two capabilities: content:afterSave to hook into the content lifecycle, and email:send to access the ctx.email function. It is impossible for the plugin to do anything other than use these capabilities. It has no external network access. If it does need network access, it can specify the exact hostname it needs to talk to, as part of its definition, and be granted only the ability to communicate with a particular hostname.
And in all cases, because the plugin’s needs are declared statically, upfront, it can always be clear exactly what the plugin is asking for permission to be able to do, at install time. A platform or administrator could define rules for what plugins are or aren’t allowed to be installed by certain groups of users, based on what permissions they request, rather than an allowlist of approved or safe plugins.
Solving plugin security means solving marketplace lock-in
WordPress plugin security is such a real risk that Wordpress.com manually reviews and approves each plugin in its marketplace. At the time of writing, that review queue is over 800 plugins long, and takes at least two weeks to traverse. The vulnerability surface area of WordPress plugins is so wide that in practice, all parties rely on marketplace reputation, ratings and reviews. And because WordPress plugins run in the same execution context as WordPress itself and are so deeply intertwined with WordPress code, some argue they must carry forward WordPress’ GPL license.
These realities combine to create a chilling effect on developers building plugins, and on platforms hosting WordPress sites.
Plugin security is the root of this problem. Marketplace businesses provide trust when parties otherwise cannot easily trust each other. In the case of the WordPress marketplace, the plugin security risk is so large and probable that many of your customers can only reasonably trust your plugin via the marketplace. But in order to be part of the marketplace your code must be licensed in a way that forces you to give it away for free everywhere other than that marketplace. You are locked in.
EmDash plugins have two important properties that mitigate this marketplace lock-in:
Plugins can have any license: they run independently of EmDash and share no code. It’s the plugin author’s choice.
Plugin code runs independently in a secure sandbox: a plugin can be provided to an EmDash site, and trusted, without the EmDash site ever seeing the code.
The first part is straightforward — as the plugin author, you choose what license you want. The same way you can when publishing to NPM, PyPi, Packagist or any other registry. It’s an open ecosystem for all, and up to the community, not the EmDash project, what license you use for plugins and themes.
The second part is where EmDash’s plugin architecture breaks free of the centralized marketplace.
Developers need to rely on a third party marketplace having vetted the plugin far less to be able to make decisions about whether to use or trust it. Consider the example plugin above that sends emails after content is saved; the plugin declares three things:
It only runs on the content:afterSave hook
It has the read:content capability
It has the email:send capability
The plugin can have tens of thousands of lines of code in it, but unlike a WordPress plugin that has access to everything and can talk to the public Internet, the person adding the plugin knows exactly what access they are granting to it. The clearly defined boundaries allow you to make informed decisions about security risks and to zoom in on more specific risks that relate directly to the capabilities the plugin is given.
The more that both sites and platforms can trust the security model to provide constraints, the more that sites and platforms can trust plugins, and break free of centralized control of marketplaces and reputation. Put another way: if you trust that food safety is enforced in your city, you’ll be adventurous and try new places. If you can’t trust that there might be a staple in your soup, you’ll be consulting Google before every new place you try, and it’s harder for everyone to open new restaurants.
Every EmDash site has x402 support built in — charge for access to content
The business model of the web is at risk, particularly for content creators and publishers. The old way of making content widely accessible, allowing all clients free access in exchange for traffic, breaks when there is no human looking at a site to advertise to, and the client is instead their agent accessing the web on their behalf. Creators need ways to continue to make money in this new world of agents, and to build new kinds of websites that serve what people’s agents need and will pay for. Decades ago a new wave of creators created websites that became great businesses (often using WordPress to power them) and a similar opportunity exists today.
x402 is an open, neutral standard for Internet-native payments. It lets anyone on the Internet easily charge, and any client pay on-demand, on a pay-per-use basis. A client, such as an agent, sends a HTTP request and receives a HTTP 402 Payment Required status code. In response, the client pays for access on-demand, and the server can let the client through to the requested content.
EmDash has built-in support for x402. This means anyone with an EmDash site can charge for access to their content without requiring subscriptions and with zero engineering work. All you need to do is configure which content should require payment, set how much to charge, and provide a Wallet address. The request/response flow ends up looking like this:
image
Every EmDash site has a built-in business model for the AI era.
Solving scale-to-zero for WordPress hosting platforms
WordPress is not serverless: it requires provisioning and managing servers, scaling them up and down like a traditional web application. To maximize performance, and to be able to handle traffic spikes, there’s no avoiding the need to pre-provision instances and run some amount of idle compute, or share resources in ways that limit performance. This is particularly true for sites with content that must be server rendered and cannot be cached.
EmDash is different: it’s built to run on serverless platforms, and make the most out of the v8 isolate architecture of Cloudflare’s open source runtime workerd. On an incoming request, the Workers runtime instantly spins up an isolate to execute code and serve a response. It scales back down to zero if there are no requests. And it only bills for CPU time (time spent doing actual work).
image
You can run EmDash anywhere, on any Node.js server — but on Cloudflare you can run millions of instances of EmDash using Cloudflare for Platforms that each instantly scale fully to zero or up to as many RPS as you need to handle, using the exact same network and runtime that the biggest websites in the world rely on.
Beyond cost optimizations and performance benefits, we’ve bet on this architecture at Cloudflare in part because we believe in having low cost and free tiers, and that everyone should be able to build websites that scale. We’re excited to help platforms extend the benefits of this architecture to their own customers, both big and small.
Modern frontend theming and architecture via Astro
EmDash is powered by Astro, the web framework for content-driven websites. To create an EmDash theme, you create an Astro project that includes:
Pages: Astro routes for rendering content (homepage, blog posts, archives, etc.)
Layouts: Shared HTML structure
Components: Reusable UI elements (navigation, cards, footers)
Styles: CSS or Tailwind configuration
A seed file: JSON that tells the CMS what content types and fields to create
This makes creating themes familiar to frontend developers who are increasingly choosing Astro, and to LLMs which are already trained on Astro.
WordPress themes, though incredibly flexible, operate with a lot of the same security risks as plugins, and the more popular and commonplace your theme, the more of a target it is. Themes run through integrating with functions.php which is an all-encompassing execution environment, enabling your theme to be both incredibly powerful and potentially dangerous. EmDash themes, as with dynamic plugins, turns this expectation on its head. Your theme can never perform database operations.
An AI Native CMS — MCP, CLI, and Skills for EmDash
The least fun part about working with any CMS is doing the rote migration of content: finding and replacing strings, migrating custom fields from one format to another, renaming, reordering and moving things around. This is either boring repetitive work or requires one-off scripts and “single-use” plugins and tools that are usually neither fun to write nor to use.
EmDash is designed to be managed programmatically by your AI agents. It provides the context and the tools that your agents need, including:
Agent Skills: Each EmDash instance includes Agent Skills that describe to your agent the capabilities EmDash can provide to plugins, the hooks that can trigger plugins, guidance on how to structure a plugin, and even how to port legacy WordPress themes to EmDash natively. When you give an agent an EmDash codebase, EmDash provides everything the agent needs to be able to customize your site in the way you need.
EmDash CLI: The EmDash CLI enables your agent to interact programmatically with your local or remote instance of EmDash. You can upload media, search for content, create and manage schemas, and do the same set of things you can do in the Admin UI.
Built-in MCP Server: Every EmDash instance provides its own remote Model Context Protocol (MCP) server, allowing you to do the same set of things you can do in the Admin UI.
Pluggable authentication, with Passkeys by default
EmDash uses passkey-based authentication by default, meaning there are no passwords to leak and no brute-force vectors to defend against. User management includes familiar role-based access control out of the box: administrators, editors, authors, and contributors, each scoped strictly to the actions they need. Authentication is pluggable, so you can set EmDash up to work with your SSO provider, and automatically provision access based on IdP metadata.
Import your WordPress sites to EmDash
You can import an existing WordPress site by either going to WordPress admin and exporting a WXR file, or by installing the EmDash Exporter plugin on a WordPress site, which configures a secure endpoint that is only exposed to you, and protected by a WordPress Application Password you control. Migrating content takes just a few minutes, and automatically works to bring any attached media into EmDash’s media library.
image
Creating any custom content types on WordPress that are not a Post or a Page has meant installing heavy plugins like Advanced Custom Fields, and squeezing the result into a crowded WordPress posts table. EmDash does things differently: you can define a schema directly in the admin panel, which will create entirely new EmDash collections for you, separately ordered in the database. On import, you can use the same capabilities to take any custom post types from WordPress, and create an EmDash content type from it.
For bespoke blocks, you can use the EmDash Block Kit Agent Skill to instruct your agent of choice and build them for EmDash.
image
Try it
EmDash is v0.1.0 preview, and we’d love you to try it, give feedback, and we welcome contributions to the EmDash GitHub repository.
If you’re just playing around and want to first understand what’s possible — try out the admin interface in the EmDash Playground.
To create a new EmDash site locally, via the CLI, run:
npm create emdash@latest
Or you can do the same via the Cloudflare dashboard below:
We’re excited to see what you build, and if you're active in the WordPress community, as a hosting platform, a plugin or theme author, or otherwise — we’d love to hear from you. Email us at emdash@cloudflare.com, and tell us what you’d like to see from the EmDash project.
If you want to stay up to date with major EmDash developments, you can leave your email address here.
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み