EmDash v0.1プレビュー、Cloudflare製WordPress互換CMS
WordPressの機能互換を志向しつつコアをTypeScriptで組み直したフルスタックのサーバーレスJavaScript CMSとしてEmDashが位置づけられている。各プラグインをDynamic Workerのisolateで動かし、manifestに書いたcapabilitiesとbindingsだけを通じてサイト機能に触れる設計のため、同一プロセスにフックするPHPプラグイン型と比べて、インストール前に権限セットを検討しやすい。基盤はAstro 6.0、ライセンスはMITのGitHub公開で、v0.1.0プレビューではCloudflareアカウントへのデプロイと任意のNode.jsホストでの実行の双方が案内されている。
主な機能・特徴
- プラグインはhooksと
read:contentやemail:sendなど明示したcapabilitiesだけを利用可能で、必要ならホスト名単位の外向き通信も宣言に含められる想定。 - テーマはAstroプロジェクト(pages・layouts・components・スタイル・seed JSON)として提供し、テーマ側からDB操作は行わない。
- コンテンツへのアクセスにHTTP 402と支払いフローを使うx402の組み込み対応。
- インスタンスごとのAgent Skills・EmDash CLI・リモートMCPサーバーで、管理UIと同等の操作をエージェントから実行可能。
- 既定のPasskeys認証に加え、SSO連携などプラグ可能な認証。
- WordPress管理画面からのWXRエクスポート、またはEmDash Exporter経由でのコンテンツ・メディア取り込み。
通知プラグインの一例では、content:afterSaveで投稿の公開を見てからctx.emailを呼び出し、そのためにread:contentとemail:sendをcapabilitiesとして宣言している。
ts
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}`);
},
},
});ローカル新規はnpm create emdash@latest。EmDash Playgroundで管理UIを試せる案内。v0.1.0プレビューは早期開発者向けベータ。WordPressのコードは使わずMITで配布しつつ、機能面の互換を追う前提の説明。