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 переворачивает эту модель.
| Аспект | WordPress | EmDash | Эффект |
|---|---|---|---|
| Изоляция | Общий 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.
Сравнение с альтернативами
| Критерий | EmDash | WordPress | Ghost | Strapi |
|---|---|---|---|---|
| Язык | TypeScript | PHP | JavaScript | TypeScript |
| Фронтенд | Astro (SSR/SSG) | PHP-шаблоны или Headless | Handlebars или Headless | Headless only |
| Безопасность плагинов | Sandbox-изоляция | Общий процесс | Ограниченные плагины | Middleware |
| AI-интеграция | Встроенный MCP | Через плагины | Через API | Через API |
| Serverless | Нативно (Workers) | Нет | Нет | Нет |
| Экосистема | Минимальная | Огромная | Средняя | Средняя |
| Зрелость | v0.1.0 preview | 20+ лет | 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 окажется слишком сырым для продакшна.
Ссылки
Ссылки
- Сайт: emdashcms.com
- GitHub CMS: emdash-cms/emdash
- Шаблоны: emdash-cms/templates
- Анонс Cloudflare: blog.cloudflare.com/emdash-wordpress
- Playground: emdashcms.com/playground
- Комьюнити: reddit.com/r/emdash_cms