СейчасЗачем это нужно
- Зачем это нужно
- Ключевые возможности
- Как устроена архитектура
- Быстрый старт
- Как проверить, что всё работает
- Безопасность плагинов: EmDash vs WordPress
- MCP-сервер и ИИ-агенты
- Тарифы и инфраструктура
- Сравнение с альтернативами
- Ограничения и когда не подходит
- Когда стоит присмотреться
- Ссылки
- Следующий шаг
- Связанные материалы
Open-source CMS, которую Cloudflare собрала с нуля на TypeScript и Astro 6. Без PHP, без легаси, с изолированными плагинами и встроенной поддержкой ИИ-агентов через MCP. Позиционируется как «духовный наследник WordPress» на современном стеке.
emdash@0.29.0 опубликован 10 июля 2026. В README репозитория статус проекта указан как beta preview, поэтому для сайтов с деньгами и SLA брать его рано. Лицензия MIT.Зачем это нужно
WordPress — это больше 20 лет PHP-наследия, десятки тысяч плагинов с полным доступом к базе и файловой системе и модель безопасности из начала двухтысячных. По отчёту Patchstack о безопасности WordPress, в 2025 году в экосистеме нашли 11 334 новых уязвимости — на 42% больше, чем годом ранее, и приходятся они в основном на плагины и темы, а не на ядро. Именно этот аргумент Cloudflare поставила в центр анонса EmDash.
EmDash берёт то, что сделало WordPress успешным — простоту, расширяемость, экосистему — и пересобирает без легаси. Каждый плагин работает в изолированном sandbox, контент хранится как структурированный JSON (Portable Text), а деплой — serverless на Cloudflare Workers.
Ключевые возможности
| Возможность | Что это значит |
| Темы на Astro | Темы — обычные Astro-проекты с компонентами, Tailwind CSS, React/Vue/Svelte через Islands. Никакого проприетарного формата |
| Sandbox-плагины | Каждый плагин запускается в изолированном Dynamic Worker. Доступ к данным — строго через capabilities в манифесте |
| Кастомные типы контента | Коллекции и поля настраиваются прямо в админке, схема отражается в базе и в генерируемых TypeScript-типах |
| AI-native | Встроенный MCP-сервер: агент работает с контентом, схемой, медиа, таксономиями, меню и ревизиями через те же API, что и админка |
| WordPress-импорт | Встроенная миграция: посты, страницы, кастомные типы, медиа, таксономии |
| Serverless | Деплой на Cloudflare Workers — масштабируется до нуля и обратно. Или на любой Node.js-сервер |
| Portable Text | Контент хранится как структурированный JSON, а не сырой HTML. Проще парсить, трансформировать, переиспользовать |
| Генерация типов | Команда npx emdash types создаёт TypeScript-типы из живой схемы базы данных |
| Passkey-вход | Аутентификация по умолчанию — passkey (Touch ID, Windows Hello, ключ безопасности). Пароли не используются, дополнительно подключаются GitHub и Google |
| Портируемость стека | Kysely для SQL и S3 API для файлов: работает на D1, SQLite, Turso/libSQL или PostgreSQL и с R2, AWS S3 или локальными файлами |
| Реестр плагинов | Централизованный маркетплейс с автоматическим аудитом кода через Workers AI плюс экспериментальный федеративный реестр со своей политикой доверия |
| Инструменты для агентов | Agent skills для сборки плагинов и тем, CLI для управления контентом и схемой, конвертер Gutenberg → Portable Text |
| Монетизация | Отдельный пакет @emdash-cms/x402 — оплата доступа к контенту по стандарту x402 |
Как устроена архитектура
graph TD
A["Браузер"] --> B["Astro — SSR / SSG"]
B --> C["EmDash Integration"]
C --> D["REST API"]
C --> E["Админ-панель"]
C --> F["Система плагинов"]
D --> G["SQLite / Cloudflare D1"]
E --> G
F --> H["Dynamic Workers — sandbox"]
H -.->|"capabilities"| G
C --> I["R2 / Локальное хранилище"]
C --> J["MCP Server"]
J --> K["ИИ-агенты"]Три принципиальных решения:
- Astro вместо PHP-шаблонов. Один рантайм в dev и production (Cloudflare
workerd). Темы — обычные Astro-проекты - Плагины в изоляции. Каждый плагин — отдельный Worker-изолят. Нет прямого доступа к базе или файлам. Доступ — только через объявленные capabilities в манифесте
- Контент как данные. Portable Text (JSON) вместо HTML. Это упрощает работу ИИ-агентов и мультиканальную публикацию
- Портируемые абстракции. Слой SQL закрыт Kysely, хранилище — S3-совместимым API, сессии — KV или Redis. На Cloudflare работает лучше всего, но привязки к нему нет
Быстрый старт
Требования: Node.js 22.12.0 или новее (нечётные версии не поддерживаются) и npm, pnpm или yarn.
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Как проверить, что всё работает
- Запустите dev-сервер проекта и откройте
http://localhost:4321/_emdash/admin - При первом входе откроется Setup Wizard: название сайта, таглайн, email администратора
- Нажмите Create Site и подтвердите создание passkey (Touch ID, Windows Hello, PIN или ключ безопасности)
- Признак успеха: вы попали в админ-панель и можете создать первую запись
- Выполните
npx emdash types— команда должна сгенерировать TypeScript-типы без ошибок - Запросите созданную запись через
getEmDashCollectionв шаблоне: она появится на странице без пересборки
Безопасность плагинов: EmDash vs WordPress
| Аспект | WordPress | EmDash |
| Изоляция | Общий PHP-процесс, полный доступ к базе и файлам | Каждый плагин — отдельный Worker-изолят |
| Безопасность | Один уязвимый плагин компрометирует весь сайт | Скомпрометированный плагин ограничен объявленными capabilities, но данные внутри выданных разрешений ему доступны |
| Разрешения | Полный доступ по умолчанию | Явный манифест capabilities |
| Экосистема | Десятки тысяч плагинов | Ранняя: официальный реестр, CLI и первые плагины |
Пример манифеста — плагин отправки email при сохранении контента:
{
"name": "email-on-save",
"capabilities": {
"content": ["read"],
"email": ["send"]
}
}MCP-сервер и ИИ-агенты
EmDash поставляется со встроенным MCP-сервером (Model Context Protocol). Это значит, что ИИ-агенты могут:
- Создавать и редактировать контент
- Управлять коллекциями и схемой
- Загружать медиафайлы
- Интроспектировать структуру данных
Агенты работают с Portable Text (структурированный JSON), а не парсят HTML — это принципиально упрощает автоматизацию контента.
Тарифы и инфраструктура
EmDash — бесплатный и open-source. Платите только за инфраструктуру.
| Компонент | Бесплатный план Cloudflare | Workers Paid (от $5/мес) |
| Workers (рантайм) | 100 000 запросов в сутки, 10 мс CPU на запрос | 10 млн запросов и 30 млн CPU-мс в месяц включено, далее $0.30 за млн запросов и $0.02 за млн CPU-мс |
| D1 (база данных) | 5 млн прочитанных и 100 000 записанных строк в сутки, 5 ГБ на аккаунт, до 500 МБ на базу | Суточные лимиты заменяются месячными: включено 25 млрд прочитанных и 50 млн записанных строк, до 10 ГБ на базу и 1 ТБ на аккаунт, далее $0.001 за млн чтений, $1.00 за млн записей и $0.75 за ГБ в месяц |
| R2 (медиа) | 10 ГБ хранения, 1 млн операций записи и 10 млн чтений в месяц, egress бесплатный | Далее $0.015 за ГБ в месяц, $4.50 за млн операций записи и $0.36 за млн чтений, egress остаётся бесплатным |
| Sandbox-плагины (Dynamic Workers) | ❌ Недоступно | ✅ Включено |
Для личного сайта или небольшого блога бесплатного плана хватает с запасом, но без sandbox-плагинов: их придётся отключить, закомментировав блок worker_loaders в wrangler.jsonc, либо запускать плагины в safe mode внутри основного процесса. Полный набор возможностей начинается с Workers Paid — минимум $5 в месяц на аккаунт.
Альтернатива без Cloudflare: EmDash работает на любом Node.js-сервере с SQLite или PostgreSQL и S3-совместимым хранилищем. Тогда стоимость равна стоимости вашего хостинга.
Сравнение с альтернативами
| Критерий | EmDash | WordPress | Ghost | Strapi |
| Язык | TypeScript | PHP | JavaScript | TypeScript |
| Фронтенд | Astro 6 (SSR/SSG) | PHP-шаблоны / Headless | Handlebars / Headless | Headless only |
| Безопасность плагинов | Sandbox-изоляция | Общий процесс | Интеграции вместо плагинов | Middleware |
| AI-интеграция | Встроенный MCP | Через плагины | Через API | Через API |
| Serverless | Нативно (Workers) | Нет | Нет | Нет |
| Экосистема | Ранняя: реестр, CLI, первые плагины | Огромная | Средняя | Средняя |
| Зрелость | Beta preview: 0.1.0 в апреле 2026, 0.29.0 в июле 2026 | 20+ лет | 10+ лет | 5+ лет |
Ограничения и когда не подходит
За четыре месяца проект ушёл далеко от первого preview, но зрелым его считать рано:
- Плагинов и тем мало. Есть официальный реестр, CLI для сборки и публикации плагинов и стартовые шаблоны, но каталога уровня WordPress Plugin Directory нет
- Федеративный реестр экспериментальный — включается через
experimental.registryи требует sandbox-раннера - Аудит плагинов автоматический. Проверка кода через Workers AI снижает риск, но не заменяет ручной review, а сам маркетплейс на старте работал только через API
- Sandbox-плагины требуют платного аккаунта Cloudflare либо запуска в safe mode внутри процесса
- Плагины WordPress не переносятся как есть — нужна адаптация по официальному гайду порта
- Ломающие изменения. Версии до 1.0 меняют API и схему: читайте релизы перед каждым обновлением
- Комьюнити молодое — GitHub Issues, Discord и сабреддит r/emdash_cms
- В репозитории статус проекта по-прежнему обозначен как beta preview
Когда лучше выбрать другое:
- Нужен продакшн-сайт с SLA прямо сейчас и без запаса времени на баги — берите зрелую CMS
- Проект держится на конкретных плагинах WordPress или на визуальном сборщике страниц
- В команде нет разработчика, знакомого с TypeScript и Astro
- Контентом управляют редакторы, для которых важна привычная библиотека блоков Gutenberg
Когда стоит присмотреться
- Вы строите новый проект на Astro и хотите CMS с нативной интеграцией
- Вам нужна CMS с AI-native архитектурой и MCP-сервером из коробки
- Вы мигрируете с WordPress и готовы к serverless-стеку
- Вы хотите sandbox-изоляцию плагинов вместо модели «всё имеет доступ ко всему»
- Вам нужен структурированный контент как источник данных для нескольких каналов, а не HTML-простыня
Ссылки
- Официальный сайт
- Документация и индекс для ИИ-агентов
- GitHub — CMS
- GitHub — релизы
- GitHub — шаблоны
- Пакеты npm организации emdash-cms
- Анонс Cloudflare
- Playground
Следующий шаг
Связанные материалы
- Статья: Сайт будущего будут читать не только люди. Его будут читать ИИ
- Блог: EmDash — Cloudflare собрал «наследника WordPress» за два месяца с помощью ИИ-агентов
- База знаний: Directus — headless CMS и backend как контентный хаб для мультисайтовой архитектуры
Выбор CMS определяет, насколько просто к вашему контенту потом подключатся агенты и автоматизации. Это полезно продумать до старта проекта, а не после первой миграции.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov
Если хотите разобрать свою задачу — напишите мне Если хотите разобрать свою задачу — напишите мне.
Можно прийти с идеей, черновым контекстом или уже живой задачей. Помогу быстро понять, где реальный следующий шаг, а где лишний шум.
Обычно хватает 2–3 сообщений, чтобы понять, могу ли я здесь реально помочь и в каком формате лучше двигаться дальше.
Дальше по теме
Utility-first подход к стилизации: основные концепции, адаптив, тёмная тема, плагин Typography для CMS-контента и интеграция с Astro.