EmDash: Безопасная CMS нового поколения без плагинов и уязвимостей

Стоимость создания программного обеспечения резко снизилась. Недавно мы переписали Next.js за одну неделю с помощью ИИ-агентов для написания кода. Но последние два месяца наши агенты работали над ещё более амбициозным проектом: полная переработка проекта WordPress с нуля.

На WordPress работает более 40% Интернета. Это грандиозный успех, который позволил каждому стать издателем и создал глобальное сообщество разработчиков WordPress. Но проекту WordPress с открытым исходным кодом в этом году исполнится 24 года. За это время хостинг веб-сайтов кардинально изменился. Когда WordPress появился, AWS EC2 не существовало. За прошедшие годы эта задача эволюционировала от аренды виртуальных частных серверов до загрузки JavaScript-бандла в глобально распределённую сеть практически бесплатно. Пришло время обновить самую популярную CMS в Интернете, чтобы воспользоваться этими изменениями.

Мы называем эту новую CMS EmDash. Мы считаем её духовным преемником WordPress. Она полностью написана на TypeScript. Она бессерверная, но вы можете запустить её на своём собственном оборудовании или любой выбранной платформе. Плагины безопасно изолированы и могут работать в собственном изоляте через Динамические воркеры, что решает фундаментальную проблему безопасности архитектуры плагинов WordPress. А под капотом EmDash работает на Astro — самом быстром веб-фреймворке для контент-ориентированных сайтов.

EmDash полностью имеет открытый исходный код, лицензирована по MIT и доступна на GitHub. Хотя EmDash стремится быть совместимой с функциональностью WordPress, для её создания не использовался код WordPress. Это позволяет нам лицензировать проект с открытым исходным кодом по более разрешительной лицензии MIT. Мы надеемся, что это позволит большему числу разработчиков адаптировать, расширять и участвовать в разработке EmDash.

Вы можете развернуть превью EmDash v0.1.0 в своём аккаунте Cloudflare или на любом Node.js-сервере уже сегодня в рамках нашей ранней беты для разработчиков:

Или вы можете опробовать административный интерфейс здесь, в Песочнице EmDash:

Introducing EmDash — the spiritual successor to WordPress that solves plugin security

Чего достиг WordPress

История WordPress — это триумф открытого исходного кода, позволившего публиковать контент в невиданных ранее масштабах. Лишь немногие проекты оказали такое же узнаваемое влияние на поколение, выросшее в Интернете. Авторы ядра WordPress и тысячи разработчиков его плагинов и тем создали платформу, которая демократизировала публикацию для миллионов; многие жизни и средства к существованию были преобразованы этим повсеместным программным обеспечением.

Для WordPress всегда найдётся место, но в мире публикации контента ещё очень много пространства для роста. Десять лет назад люди, садясь за клавиатуру, почти всегда учились вести блог с помощью WordPress. Сегодня этот человек с такой же вероятностью возьмёт Astro или другой TypeScript-фреймворк для изучения и создания. Экосистеме нужна опция, которая расширит возможности широкой аудитории, так же, как ей был нужен WordPress 23 года назад.

EmDash стремится развить то, что создал WordPress: стек для публикации с открытым исходным кодом, который любой может установить и использовать с минимальными затратами, одновременно решая ключевые проблемы, которые WordPress не может решить.

Решение кризиса безопасности плагинов WordPress

Архитектура плагинов WordPress фундаментально небезопасна. 96% проблем безопасности сайтов на WordPress происходят из плагинов. В 2025 году в экосистеме WordPress было обнаружено больше уязвимостей высокой степени серьёзности, чем за два предыдущих года вместе взятых.

Почему же спустя более двух десятилетий безопасность плагинов WordPress остаётся такой проблемной?

Плагин WordPress — это PHP-скрипт, который подключается напрямую к WordPress для добавления или изменения функциональности. Изоляции нет: плагин WordPress имеет прямой доступ к базе данных и файловой системе сайта. Устанавливая плагин WordPress, вы доверяете ему доступ практически ко всему и полагаетесь, что он идеально обработает любой вредоносный ввод или крайние случаи.

EmDash решает эту проблему. В EmDash каждый плагин работает в своей собственной изолированной песочнице: Динамическом воркере. Вместо прямого доступа к базовым данным EmDash предоставляет плагину возможности через привязки (bindings), основываясь на том, что плагин явно объявляет в своём манифесте. Эта модель безопасности даёт строгую гарантию: плагин EmDash может выполнять только те действия, которые явно объявлены в его манифесте. Вы можете заранее знать и доверять, ещё до установки плагина, какие именно разрешения вы ему предоставляете, подобно прохождению OAuth-потока и предоставлению стороннему приложению определённого набора ограниченных разрешений (scoped permissions).

Introducing EmDash — the spiritual successor to WordPress that solves plugin security

Например, плагин, который отправляет электронное письмо после сохранения элемента контента, выглядит так:

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}`);
      },
    },
  });

Этот плагин явно запрашивает две возможности: content:afterSave для подключения к жизненному циклу контента и email:send для доступа к функции ctx.email. Плагин не может делать ничего, кроме использования этих возможностей. У него нет доступа к внешней сети. Если ему действительно нужен сетевой доступ, он может указать точное имя хоста, с которым ему нужно связаться, как часть своего определения, и получит разрешение только на общение с этим конкретным хостом.

И во всех случаях, поскольку потребности плагина объявлены статически, заранее, всегда можно точно понять, на что плагин запрашивает разрешение, во время установки. Платформа или администратор могут определить правила, какие плагины можно или нельзя устанавливать определённым группам пользователей, основываясь на запрашиваемых разрешениях, а не на белом списке одобренных или безопасных плагинов.

Решение проблемы безопасности плагинов означает решение проблемы привязки к маркетплейсу

Риск безопасности плагинов WordPress настолько реален, что Wordpress.com вручную проверяет и одобряет каждый плагин в своём маркетплейсе. На момент написания этой статьи очередь на проверку составляет более 800 плагинов, и её прохождение занимает не менее двух недель. Поверхность для атак уязвимостей плагинов WordPress настолько велика, что на практике все стороны полагаются на репутацию маркетплейса, рейтинги и отзывы. И поскольку плагины WordPress работают в том же контексте выполнения, что и сам WordPress, и тесно переплетены с его кодом, некоторые утверждают, что они должны наследовать лицензию GPL WordPress.

Эти реалии вместе создают сдерживающий эффект для разработчиков, создающих плагины, и для платформ, размещающих сайты на WordPress.

Безопасность плагинов — корень этой проблемы. Бизнес-модели маркетплейсов обеспечивают доверие, когда стороны иначе не могут легко доверять друг другу. В случае маркетплейса WordPress риск безопасности плагинов настолько велик и вероятен, что многие ваши клиенты могут разумно доверять вашему плагину только через маркетплейс. Но чтобы быть частью маркетплейса, ваш код должен быть лицензирован таким образом, что вы вынуждены отдавать его бесплатно везде, кроме этого маркетплейса. Вы оказываетесь в ловушке.

Плагины EmDash обладают двумя важными свойствами, которые смягчают эту привязку к маркетплейсу:

  1. Плагины могут иметь любую лицензию: они работают независимо от EmDash и не используют общий код. Это выбор автора плагина.

  2. Код плагина выполняется независимо в безопасной песочнице: плагин может быть предоставлен сайту на EmDash и доверен, без того чтобы сайт EmDash когда-либо видел его код.

Первая часть проста — как автор плагина, вы выбираете, какую лицензию хотите. Точно так же, как при публикации в NPM, PyPi, Packagist или любом другом реестре. Это открытая экосистема для всех, и сообщество, а не проект EmDash, решает, какую лицензию вы используете для плагинов и тем.

Вторая часть — это то, где архитектура плагинов EmDash освобождается от централизованного маркетплейса.

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:

Introducing EmDash — the spiritual successor to WordPress that solves plugin security

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).

Introducing EmDash — the spiritual successor to WordPress that solves plugin security

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:

  1. 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.

  2. 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.

  3. 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

Вы можете импортировать существующий сайт WordPress, либо перейдя в админ-панель WordPress и экспортировав файл WXR, либо установив плагин EmDash Exporter на сайте WordPress. Этот плагин настраивает защищённую конечную точку, которая доступна только вам и защищена контролируемым вами Паролем приложения WordPress. Миграция контента занимает всего несколько минут и автоматически переносит все прикреплённые медиафайлы в медиатеку EmDash.

Introducing EmDash — the spiritual successor to WordPress that solves plugin security

Создание в WordPress произвольных типов контента, отличных от Записей и Страниц, обычно означало установку тяжёлых плагинов вроде Advanced Custom Fields и втискивание результата в переполненную таблицу записей WordPress. EmDash подходит к этому иначе: вы можете определить схему прямо в панели управления, что создаст для вас совершенно новые коллекции EmDash, упорядоченные в базе данных отдельно. При импорте вы можете использовать те же возможности, чтобы взять любые произвольные типы записей из WordPress и создать на их основе тип контента EmDash.

Для создания собственных блоков вы можете использовать навык агента EmDash Block Kit, чтобы дать инструкции выбранному вами агенту и создать их для EmDash.

Introducing EmDash — the spiritual successor to WordPress that solves plugin security

Попробуйте

EmDash находится на стадии предварительного просмотра v0.1.0, и мы будем рады, если вы попробуете его, дадите обратную связь. Мы приветствуем вклад в репозиторий EmDash на GitHub.

Если вы просто хотите поэкспериментировать и сначала понять, что возможно — опробуйте интерфейс админ-панели в Песочнице EmDash (EmDash Playground).

Чтобы создать новый сайт на EmDash локально через CLI, выполните команду:

npm create emdash@latest

Или вы можете сделать то же самое через панель управления Cloudflare ниже:

Нам не терпится увидеть, что вы создадите. Если вы активны в сообществе WordPress как хостинг-платформа, автор плагинов или тем, или иным образом — мы будем рады услышать от вас. Напишите нам на emdash@cloudflare.com и расскажите, что вы хотели бы увидеть в проекте EmDash.