{"id":98091,"date":"2026-10-13T00:38:00","date_gmt":"2026-10-13T04:38:00","guid":{"rendered":"https:\/\/overcentral.com\/en\/?p=98091"},"modified":"2026-09-29T08:11:34","modified_gmt":"2026-09-29T12:11:34","slug":"emdas-limitations-cloudflare-wordpress-alternative-98091","status":"publish","type":"post","link":"https:\/\/overcentral.com\/en\/emdas-limitations-cloudflare-wordpress-alternative-98091\/","title":{"rendered":"7 EmDash Limitations You Should Know Before Committing"},"content":{"rendered":"<p>Cloudflare launched EmDash on April 1, 2026, calling it the &#8220;spiritual successor to WordPress.&#8221; The pitch is seductive: TypeScript, serverless, sandboxed plugins, AI-native, MIT licensed. Developers who have wrestled with PHP, plugin bloat, and security headaches for years felt a flicker of hope.<\/p>\n<p>But EmDash is version 0.1.0. It has 89 commits on GitHub, was built in roughly two months with heavy AI coding assistance, and its lead engineer is transparent about it being an early developer beta. Before you migrate a client&#8217;s site or bet your own business on it, these seven limitations deserve your attention.<\/p>\n<p>Not because EmDash is bad. Because the wrong tool for a job is expensive, and the right tool for a future job may not be ready for today&#8217;s.<\/p>\n<h2>1. The Sandbox Plugin Security Model Requires Cloudflare&#8217;s Paid Runtime<\/h2>\n<p>The headline feature of EmDash is plugin sandboxing. Every plugin runs in its own V8 isolate via dynamic workers. It cannot touch your database, file system, or other plugins unless a capability manifest explicitly grants permission. This is genuinely superior to WordPress&#8217;s model, where a single compromised plugin can access everything.<\/p>\n<p>Here&#8217;s the catch: dynamic workers require Cloudflare&#8217;s Workers Paid plan, starting at $5 per month. On the free Cloudflare tier, plugins run in-process with no sandbox isolation. If you self-host EmDash on any Node.js server \u2014 your own hardware, AWS, a VPS \u2014 there is currently no sandbox support at all. The feature that justifies EmDash&#8217;s existence disappears the moment you step off Cloudflare&#8217;s paid infrastructure.<\/p>\n<p>This isn&#8217;t a minor limitation. It&#8217;s architectural. The code is MIT licensed, but the runtime that powers every meaningful security feature is proprietary Cloudflare infrastructure. One widely upvoted <a href=\"https:\/\/news.ycombinator.com\/item?id=42500000\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Hacker News<\/a> comment summarized it cleanly: &#8220;Open source, but architecturally locked in.&#8221;<\/p>\n<p>WordPress runs on a $5 VPS, a Raspberry Pi, or a managed host you can switch in an afternoon. EmDash&#8217;s security model runs on Cloudflare&#8217;s Workers Paid plan. Those are not the same thing.<\/p>\n<h2>2. Serverless Billing Has No Spending Cap<\/h2>\n<p>Traditional WordPress hosting charges a flat monthly rate. $20, $50, $100. Traffic spikes might slow your site or crash it, but your bill stays the same. You know what you&#8217;re paying.<\/p>\n<p>EmDash is serverless. Every page view, admin panel click, API call, and plugin execution is a Cloudflare Workers invocation. Workers bill per request and per CPU millisecond. The paid plan starts at $5 and includes 10 million requests, but beyond that, you pay $0.30 per additional million requests plus CPU time charges.<\/p>\n<p>One page view can hit multiple billing meters simultaneously: a Workers invocation, a D1 database read, an R2 storage operation, a KV lookup. Try predicting that monthly cost as a small business owner.<\/p>\n<p>Someone on the Cloudflare forum did the math. A basic DDoS attack with 10,000 IPs making one request <a href=\"https:\/\/overcentral.com\/en\/meta-launches-zgateway-proxy-handles-1-billion-ops-per-second\/\" title=\"Meta Launches ZGateway Proxy, Handles 1 Billion Ops Per Second\" data-iacss-internal=\"1\">per second<\/a> each would rack up 26 billion billable requests in a month. There is no built-in spending cap. No kill switch. Cloudflare has historically declined to offer global spending limits on Workers. Your site keeps running, workers keep firing, and your credit card keeps getting charged.<\/p>\n<p>Cloudflare offers mitigations: CPU time limits per request, WAF rate limiting. But rate limiting is per IP, not a global request cap. A distributed bot attack from thousands of different IPs goes right through it. And CPU limits control how long each request runs, not how many requests you can be billed for.<\/p>\n<h2>3. Content Types Live in the Database, Not in Code<\/h2>\n<p>WordPress&#8217;s fixed post types (posts and pages) have frustrated developers for years. Workarounds like Custom Post Types UI and Advanced Custom Fields exist, but they store schema in the database, creating sync problems across environments.<\/p>\n<p>EmDash ships with native custom content types. You can create a &#8220;Project&#8221; type with custom fields directly in the admin panel. This is, on paper, better than WordPress.<\/p>\n<p>But the schema lives in the database. You configure it through clicks, not through code. There is no infrastructure-as-code approach for content types in the current version. No configuration file in the Astro config or anywhere in the repository to define your schema and deploy it alongside your admin interface.<\/p>\n<p>For a solo developer running one site, this is fine. For an agency managing 50 client sites, this is a problem. Schema drift between environments \u2014 local, staging, production \u2014 becomes manual overhead. If you rebuild a staging database, you lose your content type definitions unless you remembered to export them. There is no <code>git push<\/code>codecodecodecode for your schema.<\/p>\n<p>Sanity, Payload CMS, and even Drupal (since version 4 or 5) handle this better by treating content models as code that deploys alongside the application. EmDash&#8217;s approach feels like a step backward for anyone who has experienced the pain of database-driven schema management at scale.<\/p>\n<h2>4. The WordPress Migration Tool Imports Content, Not Websites<\/h2>\n<p>EmDash includes a WordPress migration tool. It can import posts, pages, media, and custom post types from a WXR export file or via a plugin. It even maps Yoast SEO fields to EmDash&#8217;s built-in SEO controls.<\/p>\n<p>That&#8217;s all it imports.<\/p>\n<p>It <a href=\"https:\/\/overcentral.com\/en\/rascal-does-not-dream-trailer-release-80139\/\" title=\"Rascal Does Not Dream Drops Trailer for Final Film\" data-iacss-internal=\"1\">does not<\/a> migrate your plugins, your theme, your custom functionality, your WooCommerce store, your membership system, your forms, your SEO configuration, your redirects, your user roles, or any of the 12 to 15 plugins the average WordPress site runs. All of that must be rebuilt from scratch.<\/p>\n<p>WordPress stores content as HTML in the database. EmDash uses portable text, structured JSON. This is not a simple database export and import. You are converting between fundamentally different content formats. For any site with custom blocks, advanced layouts, or complex content structures, that migration is a serious engineering project \u2014 not a weekend task.<\/p>\n<p>The tool is honest about its scope. It tells you upfront what it can and cannot do. But if you&#8217;re evaluating EmDash as a migration target for an existing WordPress site with years of content, custom theme work, and a plugin stack you depend on, understand that &#8220;migration&#8221; currently means &#8220;content extraction, then rebuild everything else.&#8221;<\/p>\n<h2>5. The Plugin Ecosystem Is Zero<\/h2>\n<p>WordPress has over 62,000 plugins. WooCommerce powers 35% of all e-commerce. Elementor runs on 10 million sites. Yoast SEO serves another 10 million. The average WordPress site runs 12 to 15 plugins. That&#8217;s not an ecosystem; it&#8217;s an economy.<\/p>\n<p>EmDash launched with essentially zero third-party plugins. There is no marketplace, no review queue, no community of developers publishing extensions. The codebase ships with a forms plugin and basic SEO, but that&#8217;s it.<\/p>\n<p>History is brutal here. Ghost launched over a decade ago with objectively better technology than WordPress. It has roughly 0.1% market share. Craft CMS and Statamic are technically excellent and ecosystem-starved. As one commenter put it: &#8220;People aren&#8217;t on WordPress because of WordPress. They&#8217;re on WordPress because of WooCommerce, a million themes, integrations for every stupid internal business API on the planet.&#8221;<\/p>\n<p>EmDash&#8217;s counter-strategy is AI. The built-in MCP server and agent skills files let AI coding tools generate plugins and themes programmatically. The MIT license removes GPL friction. In theory, you can prompt an agent to build whatever plugin <a href=\"https:\/\/overcentral.com\/en\/wardogs-recon-myth-busted-81574\/\" title=\"The WARDOGS Recon Myth You Need to Stop Believing\" data-iacss-internal=\"1\">you need<\/a>. In practice, that assumes the agent can produce production-quality, secure, well-tested code for every integration your site requires.<\/p>\n<p>If your site needs e-commerce, a membership system, a booking calendar, or integration with a CRM, you&#8217;re looking at weeks of custom development \u2014 assuming the functionality exists yet. On WordPress, those are plugin installs.<\/p>\n<h2>6. The Editor Experience Is Minimal<\/h2>\n<p>EmDash ships with a block editor that supports portable text \u2014 structured JSON rather than raw HTML. It handles headings, lists, images, embeds, and reusable sections. It is functional.<\/p>\n<p>It is not WordPress&#8217;s block editor (Gutenberg). It is not Elementor, Beaver Builder, or any modern page builder. It is a basic editor reminiscent of what WordPress offered fifteen years ago. There is no drag-and-drop layout builder, no global style system, no pattern library, no real-time collaborative editing that doesn&#8217;t lose data (multiple testers reported content loss when editing in split tabs).<\/p>\n<p>One reviewer who tested the beta ran into passkey authentication failures on Linux and a &#8220;page not found&#8221; error on the magic link fallback. Another noted that centered text without <code>text-wrap: balance<\/code>codecodecodecode created ugly line breaks \u2014 a minor UI polish issue, but indicative of the overall maturity level.<\/p>\n<p>For a developer who writes markdown and deploys via CLI, this may be acceptable. For a content team that needs to produce visually rich pages without developer involvement, it is not ready.<\/p>\n<h2>7. The Business Model Incentives Point One Direction<\/h2>\n<p>Matt Mullenweg, WordPress co-founder, published a detailed review of EmDash days after launch. He wrote that the product is &#8220;very solid&#8221; and praised the engineering. Then he added: EmDash was created to sell more Cloudflare services.<\/p>\n<p>He&#8217;s not wrong.<\/p>\n<p>Every EmDash site on Cloudflare uses at minimum five Cloudflare products: Workers for compute, D1 for the database, R2 for media storage, KV for sessions, and Workers AI. Each is a separate billing line. None are portable. You cannot take a D1 database and move it to AWS. You cannot migrate R2 buckets to Azure without rewriting your storage layer. You cannot replicate the V8 isolate sandbox anywhere else.<\/p>\n<p>The code is MIT licensed. The runtime that powers every meaningful feature is proprietary Cloudflare infrastructure. That&#8217;s not malice; it&#8217;s a business model. Cloudflare is a for-profit company. Open-sourcing the code builds trust and community. The lock-in is architectural, not legal.<\/p>\n<p>Compare this to WordPress. You can move a WordPress site from any host to any other host in an afternoon. Same code, same database, same functionality. That portability is a feature that EmDash, despite claiming to be the &#8220;spiritual successor,&#8221; does not offer.<\/p>\n<h2>The Practical Takeaway<\/h2>\n<p>If you are starting a greenfield content site in TypeScript, security is your top concern, and you are comfortable managing Cloudflare infrastructure, EmDash is worth evaluating. The architecture is coherent. The sandbox model solves a real problem. The economics at low traffic are compelling \u2014 a small blog on the free tier costs roughly $15 per year for a domain name.<\/p>\n<p>But if you need e-commerce, a mature plugin ecosystem, predictable billing with no surprise bills, or the ability to move hosting providers on your terms, EmDash is not ready. And the features it will need to become ready \u2014 a plugin marketplace, spending caps, infrastructure portability, a content-type-as-code approach \u2014 are not trivial. They may not align with Cloudflare&#8217;s incentives to build them.<\/p>\n<p>WordPress has real problems. Security is structurally broken. Governance is fragile. The architecture belongs to a different era. But it works, and it has for 24 years. EmDash is the most architecturally coherent challenge WordPress has ever faced. That does not mean it is ready to replace it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cloudflare launched EmDash on April 1, 2026, calling it the &#8220;spiritual successor to WordPress.&#8221; The pitch is seductive: TypeScript, serverless, sandboxed plugins, AI-native, MIT licensed. Developers who have wrestled with PHP, plugin bloat, and security headaches for years felt a flicker of hope. But EmDash is version 0.1.0. It has 89 commits on GitHub, was [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":100387,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/98091.png","fifu_image_alt":"7 EmDash Limitations You Should Know Before Committing","footnotes":""},"categories":[31],"tags":[],"class_list":["post-98091","post","type-post","status-publish","format-standard","has-post-thumbnail","category-technology"],"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/98091.png","fifu_image_alt":"7 EmDash Limitations You Should Know Before Committing","_links":{"self":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98091","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/comments?post=98091"}],"version-history":[{"count":1,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98091\/revisions"}],"predecessor-version":[{"id":100388,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98091\/revisions\/100388"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media\/100387"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media?parent=98091"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/categories?post=98091"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/tags?post=98091"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}