EmDash — это открытая CMS, которую команда Cloudflare собрала с нуля весной 2026 года как духовного наследника WordPress, но без PHP-легаси и без модели «один уязвимый плагин = сломан весь сайт». Под капотом — TypeScript, Astro 6 и Cloudflare Workers как рантайм. Контент хранится не как сырой HTML, а как структурированный JSON по модели Portable Text. Встроенный MCP-сервер даёт ИИ-агентам полный доступ к контенту, схеме и медиа — ровно через те же capability-манифесты, что и обычные плагины.

Статус на июнь 2026 — v0.1.0 preview. Это developer beta: Cloudflare прямо помечает релиз как «не для продакшн-сайтов». Лицензия — MIT, репозиторий и шаблоны открыты на GitHub. Для экспериментов, прототипов и личных проектов — самое то. Для магазина с выручкой — рано.

Ключевое правило: EmDash — это не «ещё одна CMS». Это тестовая площадка, где Cloudflare показывает, как должна выглядеть content-инфраструктура в эпоху ИИ-агентов: с изоляцией плагинов, структурированным контентом и нативной поддержкой MCP. Если вы думаете про CMS на ближайшие 5 лет — посмотреть стоит обязательно, но продакшн-проект пока строить не на чём.

Зачем нужно

  • WordPress устарел архитектурно. 96% его уязвимостей — в плагинах, которые работают в общем PHP-процессе с полным доступом к базе и файлам. Нужна модель, где плагин не может сделать больше, чем ему разрешили.
  • Astro-проекты требуют CMS, которая не изобретает свой шаблонизатор. EmDash подключается как обычная Astro-интеграция: темы — это просто Astro-проекты с Tailwind, React-островами или Vue, без проприетарного формата.
  • ИИ-агентам нужен структурированный контент. Парсить HTML — это всегда потери и сюрпризы. Portable Text даёт JSON с типизированными блоками — агенты читают, редактируют и публикуют без потерь структуры.
  • Serverless — это уже норма, а не фича. Деплой на Cloudflare Workers — масштабирование до нуля и обратно без отдельной панели управления сервером. Плюс работа на любом Node.js-хостинге с SQLite, если Workers не подходят.
  • Импорт WordPress из коробки. Если у вас блог или медиа на WordPress — встроенная миграция перенесёт посты, страницы, кастомные типы, медиа и таксономии. Это снижает барьер входа для тех, кто уже сидит в WP-экосистеме.

Как устроено

ЭлементНазначение
Astro SSR / SSGФронтенд. Один рантайм для dev и production (workerd). Темы — обычные Astro-проекты
EmDash IntegrationПодключение к Astro. Регистрирует админ-панель, REST API, MCP-сервер и систему плагинов
SQLite или Cloudflare D1База данных. Каждая коллекция — отдельная SQL-таблица. D1 используется в serverless-режиме
R2 или локальное хранилищеМедиа-файлы: изображения, видео, документы. R2 — S3-совместимое хранилище Cloudflare без egress-тарификации
Dynamic WorkersИзолированные песочницы для плагинов. Доступ к данным — только через capabilities в манифесте
MCP ServerВстроенный Model Context Protocol сервер. ИИ-агенты управляют контентом как полноценные пользователи

Три архитектурных решения лежат в основе EmDash и отличают его от всего, что было раньше на рынке CMS.

  • Astro вместо PHP-шаблонов. Один и тот же рантайм в dev и production — Cloudflare workerd. Темы — это просто Astro-проекты, в них работают Tailwind, React-острова, Vue, Svelte. Ноль проприетарного формата, ноль нового DSL для шаблонов.
  • Плагины в изоляции. Каждый плагин — отдельный Worker-изолят. У плагина нет прямого доступа к базе или файлам — он работает только через capabilities, заявленные в его манифесте. Это переворачивает модель безопасности WordPress.
  • Контент как данные. Portable Text — это JSON-формат с типизированными блоками, который пришёл из мира Sanity. Он удобен для ИИ-агентов, для мультиканальной публикации (сайт, рассылка, мобильное приложение) и для версионирования.

Ключевые возможности

ВозможностьЧто это значит
Темы на AstroТемы — обычные Astro-проекты с компонентами, Tailwind CSS, React/Vue/Svelte через Islands. Никакого проприетарного формата
Sandbox-плагиныКаждый плагин запускается в изолированном Dynamic Worker. Доступ к данным — строго через capabilities в манифесте
Кастомные типы контентаСоздание коллекций и полей прямо в админке. Каждая коллекция — отдельная SQL-таблица
AI-nativeВстроенный MCP-сервер. ИИ-агенты управляют контентом, структурой и настройками как полноценные пользователи
WordPress-импортВстроенная миграция: посты, страницы, кастомные типы, медиа, таксономии
ServerlessДеплой на Cloudflare Workers — масштабируется до нуля и обратно. Или на любой Node.js-сервер
Portable TextКонтент хранится как структурированный JSON, а не сырой HTML. Проще парсить, трансформировать, переиспользовать
Генерация типовКоманда npx emdash types создаёт TypeScript-типы из живой схемы базы данных

Когда использовать

СитуацияПодходитПочему
Новый проект на AstroДаEmDash — нативная интеграция, не нужно переписывать темы под чужой формат
CMS с AI-native архитектурой и MCP-серверомДаMCP включён из коробки — не нужно собирать свой слой интеграции
Миграция с WordPress на serverless-стекДаВстроенный импорт постов, страниц, кастомных типов, медиа и таксономий
Sandbox-изоляция плагинов вместо общей PHP-средыДаКаждый плагин в отдельном Worker-изоляте с явным манифестом capabilities
Большой зрелый сайт с сотнями плагиновНетЭкосистема плагинов почти отсутствует, маркетплейса нет
Продакшн-проект с высокими требованиями к SLAНетv0.1.0 preview, Cloudflare прямо помечает релиз как «не для продакшна»
Команда без опыта в Astro и TypeScriptНетТемы и плагины требуют владения стеком, готовых разработчиков мало

Пример

Инициализация нового проекта с EmDash и Astro:

npm create emdash@latest

Подключение к существующему Astro-проекту как интеграция:

// astro.config.mjs
import emdash from "emdash/astro";
import { d1 } from "emdash/db";

export default defineConfig({
  integrations: [emdash({ database: d1() })],
});

Запрос контента в Astro-странице — через Live Collections, без ребилдов и отдельного API:

---
import { getEmDashCollection } from "emdash";
const { entries: posts } = await getEmDashCollection("posts");
---

{posts.map((post) => <article>{post.data.title}</article>)}

Генерация TypeScript-типов из текущей схемы базы данных:

npx emdash types

Пример манифеста плагина — отправка email при сохранении контента. Capabilities запрашиваются явно, без них плагин не сможет обратиться к базе или к почтовому API:

{
  "name": "email-on-save",
  "capabilities": {
    "content": ["read"],
    "email": ["send"]
  }
}

Безопасность плагинов: EmDash против WordPress

Если вы когда-нибудь админили WordPress, вы знаете этот сценарий: обновился плагин, приехала CVE, и весь сайт под угрозой, потому что у плагина полный доступ к базе и файлам. EmDash переворачивает эту модель.

АспектWordPressEmDashЭффект
ИзоляцияОбщий PHP-процессКаждый плагин в отдельном Worker-изолятеВзломанный плагин не выходит за рамки своих capabilities
Безопасность по умолчаниюПолный доступ к базе и файламЯвный манифест capabilitiesПлагин не может украсть пароли, если ему не выдали доступ к auth
РазрешенияПолный доступ, пока не отзовёшьМинимум необходимого, явный запросПринцип least privilege из коробки
Экосистема60 000+ плагиновМинимальная (v0.1.0), маркетплейса нетБезопасность в обмен на зрелость — нужно время, чтобы экосистема догнала

MCP-сервер и ИИ-агенты

EmDash поставляется со встроенным MCP-сервером (Model Context Protocol). Это значит, что любой MCP-совместимый ИИ-агент — Codex, Hermes, OpenClaw, Claude Code — может подключиться к CMS как полноценный пользователь и:

  • Создавать и редактировать контент
  • Управлять коллекциями и схемой
  • Загружать медиафайлы
  • Интроспектировать структуру данных — то есть агент может сам понять, какие поля есть в коллекции, без предварительного маппинга

Агенты работают с Portable Text (структурированный JSON), а не парсят HTML. Это принципиально упрощает автоматизацию контента: исчезают потери на конвертации, появляется возможность публиковать один и тот же текст в сайт, рассылку и мобильное приложение без переписывания. По сути, EmDash — это первый движок, в котором MCP и CMS стали одним целым на уровне архитектуры, а не склеенных скотчем API-обёрток.

Тарифы и инфраструктура

EmDash — бесплатный и open-source. Платите только за инфраструктуру Cloudflare.

КомпонентБесплатный план CloudflareПлатный (от $5/мес)
Workers (рантайм)100 000 запросов в день10 млн запросов в месяц
D1 (база данных)5 млн чтений в день, 100K записей в день25 млрд чтений в месяц
R2 (медиа)10 ГБ, 10 млн чтений в месяц10 ГБ включено, далее $0.015/ГБ
Sandbox-плагиныНедоступноВключено

Для небольшого блога или личного сайта бесплатного плана хватит с запасом — но sandbox-плагины придётся отключить или дописывать самостоятельно. Для продакшн-проекта с плагинами закладывайте от $5/мес. EmDash также работает на любом Node.js-сервере с SQLite — тогда стоимость равна стоимости вашего хостинга, без привязки к Cloudflare.

Сравнение с альтернативами

КритерийEmDashWordPressGhostStrapi
ЯзыкTypeScriptPHPJavaScriptTypeScript
ФронтендAstro (SSR/SSG)PHP-шаблоны или HeadlessHandlebars или HeadlessHeadless only
Безопасность плагиновSandbox-изоляцияОбщий процессОграниченные плагиныMiddleware
AI-интеграцияВстроенный MCPЧерез плагиныЧерез APIЧерез API
ServerlessНативно (Workers)НетНетНет
ЭкосистемаМинимальнаяОгромнаяСредняяСредняя
Зрелостьv0.1.0 preview20+ лет10+ лет5+ лет

Ограничения

Ограничения

Что нужно учитывать, прежде чем закладывать EmDash в серьёзный проект.

v0.1.0 preview — не для продакшна.

Cloudflare прямо помечает релиз как developer beta. Если ваш сайт приносит деньги, ставить EmDash на него в июне 2026 — рискованная ставка.

Экосистема плагинов почти отсутствует.

Нет аналога WordPress Plugin Directory. Готовых плагинов на GitHub минимум, маркетплейса нет. Если нужен плагин — пишите сами.

Только 2 официальных стартера тем.

Маркетплейса тем нет, библиотеки готовых дизайнов — тоже. Стартовую тему придётся дописывать под себя.

Документация базовая, в процессе наполнения.

Если вы привыкли к подробным reference-руководствам, как у Sanity или Strapi — здесь их пока нет, часть вопросов решается через чтение исходников.

Нет визуального редактора уровня Gutenberg.

Если вашим редакторам нужен WYSIWYG с drag-and-drop — EmDash пока не для них. Скорее markdown-ориентированный workflow.

Sandbox-плагины — только на платных аккаунтах Cloudflare.

На бесплатном плане Dynamic Workers недоступны, sandbox-плагины придётся отключать или обходить.

Комьюнити только формируется.

На Reddit r/emdash_cms пока тихо, GitHub-issues — основной канал обратной связи. Быстро получить ответ в сложной ситуации вряд ли получится.

Антипаттерны

Антипаттерны

Чего не стоит делать, если вы взяли EmDash в работу.

Ставить на проект с выручкой в preview-версии.

v0.1.0 — это developer beta. Дождитесь хотя бы v0.3 и признаков стабилизации API.

Делать кастомные плагины под бесплатным аккаунтом.

Sandbox-плагины требуют Workers Paid (от $5/мес). На Free останется только своя обвязка поверх интеграции.

Игнорировать capability-манифест.

Если дать плагину capabilities без разбора «на всякий случай», EmDash превратится в тот же WordPress — общий контекст, общие уязвимости.

Хранить контент как сырой HTML.

Portable Text — это преимущество EmDash. Если хранить HTML в кастомных полях, теряется смысл MCP-интеграции с ИИ-агентами.

Писать темы как в WordPress.

EmDash — это Astro-проект, не PHP-шаблонизатор. Пытаться перенести логику из WP-темы в Astro через копи-пасту — путь к багам и разочарованию.

Чеклист

Чеклист

Что проверить перед тем, как разворачивать EmDash-проект.

Цель определена

EmDash подходит для нового проекта на Astro, миграции с WordPress или эксперимента с MCP-CMS, но не для зрелого сайта с сотнями плагинов.

Аккаунт Cloudflare выбран

Free для блога/личного сайта без sandbox-плагинов, Workers Paid ($5/мес) для всего остального, либо свой Node.js-сервер с SQLite.

Команда знакома со стеком — TypeScript, Astro 6, концепция capabilities.

Без этого старт будет медленным, а баги — частыми.

Сценарий ИИ-агента продуман

какой агент будет подключаться, какие capabilities ему выдать, какие структуры данных он будет читать и писать.

План миграции с текущего стека готов

если идёте с WordPress, проверьте качество встроенного импорта на тестовой выборке из 10–20 постов.

Резервный путь существует

держите в голове возможность вернуться на WordPress/Strapi/Directus, если v0.1.0 preview окажется слишком сырым для продакшна.

Ссылки

Ссылки