{"id":98084,"date":"2026-10-12T07:50:00","date_gmt":"2026-10-12T11:50:00","guid":{"rendered":"https:\/\/overcentral.com\/en\/?p=98084"},"modified":"2026-09-29T08:12:50","modified_gmt":"2026-09-29T12:12:50","slug":"migrate-wordpress-to-emdash-cms-98084","status":"publish","type":"post","link":"https:\/\/overcentral.com\/en\/migrate-wordpress-to-emdash-cms-98084\/","title":{"rendered":"Why We Migrated 10 WordPress Sites to EmDash"},"content":{"rendered":"<p>Everyone says the same thing about EmDash. It&#8217;s version 0.1. Zero plugin ecosystem. Built in two months with AI coding agents. No production deployments. The advice is universal: wait until it matures. That advice is sound for most situations. But it missed something. For a specific class of WordPress sites \u2014 small content-driven client projects \u2014 the calculus flips. Waiting costs more than moving.<\/p>\n<p>We run a six-person agency called Northwest Digital. We manage about 30 WordPress sites for local businesses, nonprofits, and professional services. Over the last quarter, we migrated 10 of those sites to EmDash CMS. This is what we learned, measured, and what the skeptics don&#8217;t account for.<\/p>\n<h2>The Problem with WordPress for This Agency&#8217;s Clients<\/h2>\n<p>Our clients aren&#8217;t running WooCommerce stores or membership platforms. They publish blog posts, event pages, and basic contact information. Their WordPress sites averaged 14 plugins each. Most of those plugins did one small thing: a contact form, SEO metadata, caching, a redirect manager, a security scanner. Every plugin was a maintenance liability.<\/p>\n<p>In 2025, we logged three security incidents across our client portfolio. Two were plugin vulnerabilities. One involved a compromised admin account. The remediation cost us roughly $3,000 in billable hours and lost client trust. That&#8217;s not unusual \u2014 96% of WordPress security issues come from plugins, according to Cloudflare&#8217;s own data, which aligns with industry research.<\/p>\n<p>The hosting costs were predictable but not cheap. Managed WordPress hosting from <a href=\"https:\/\/wpengine.com\" target=\"_blank\" rel=\"sponsored noopener noreferrer\" data-iacss-external=\"1\">WP Engine<\/a> ran us about $35 per site per month on average. That&#8217;s $4,200 annually for 10 sites. Traffic spikes meant throttling or surprise fees. One client&#8217;s blog post went viral on Reddit \u2014 the host suspended the account for exceeding CPU limits. We spent a weekend migrating to a higher tier.<\/p>\n<p>The core problem wasn&#8217;t WordPress itself. It was the architecture. Every plugin had full database access. Every update could break the frontend. Every security patch required a manual deploy cycle. For simple content sites, the overhead was disproportionate to the value delivered.<\/p>\n<h2>Why EmDash Made Sense Despite the Skepticism<\/h2>\n<p>When <a href=\"https:\/\/www.cloudflare.com\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Cloudflare<\/a> announced EmDash on April 1, 2026, we read the blog post skeptically. Then we checked the playground. The dashboard looked familiar \u2014 deliberately modeled after WordPress. The import tool could pull posts, pages, and media from a WXR file. The frontend ran on Astro, which we already used for static sites.<\/p>\n<p>Three factors tipped the decision:<\/p>\n<ol>\n<li><strong>The security model is not theoretical.<\/strong> Plugin sandboxing via dynamic workers means a compromised plugin cannot read the database or modify files. For our clients, who don&#8217;t need complex plugin chains, this eliminates the single biggest attack surface. The sandbox requires Cloudflare&#8217;s paid plan at $5\/month, which is still cheaper than most WordPress hosts.<\/li>\n<\/ol>\n<ol>\n<li><strong>The cost structure is radically different.<\/strong> On the free Cloudflare tier, a small blog costs roughly $15\/year for a domain. The paid Workers plan at $5\/month includes 10 million requests. We estimated that even our busiest client site uses less than 5% of that allowance. Annual hosting for 10 sites dropped from $4,200 to $750 \u2014 an 82% reduction. That metric is specific to our traffic patterns (average 5,000 visits per month per site). High-traffic sites would see a different ratio.<\/li>\n<\/ol>\n<ol>\n<li><strong>The migration tool worked.<\/strong> We tested it on a client site with 1,200 posts. The import completed in under 3 minutes. Posts, pages, media, categories, tags \u2014 all mapped correctly. The plugin also pulled Yoast SEO metadata into EmDash&#8217;s built-in SEO fields. The frontend theme needed porting, but EmDash&#8217;s MCP server let us point Cursor at the old theme files and generate Astro-compatible templates in about 90 minutes per site.<\/li>\n<\/ol>\n<h2>The Migration Process: Faster Than Expected<\/h2>\n<p>We moved 10 sites over six weeks. Each migration followed the same pattern:<\/p>\n<ul>\n<li>Export WordPress site as WXR file.<\/li>\n<li>Import into EmDash via the admin panel.<\/li>\n<li>Port the theme using an <a href=\"https:\/\/overcentral.com\/en\/meta-muse-ai-agent-80441\/\" title=\"Meta Launches Muse AI Agent, Needs User Trust\" data-iacss-internal=\"1\">AI agent<\/a> connected to the MCP server.<\/li>\n<li>Set up Cloudflare Workers, D1 database, and R2 storage.<\/li>\n<li>Configure redirects and SSL.<\/li>\n<li>Point the domain.<\/li>\n<\/ul>\n<p>The most time-consuming step was theme porting. We reused a base Astro template for most sites and customized the CSS. Average time per site: 4 hours of developer work, versus 2-3 days for a traditional WordPress build. The MCP server allowed agents to generate content types, set up custom fields, and seed sample data without manual clicking.<\/p>\n<p>One client had a custom contact form with conditional logic. In WordPress, that required a plugin like Gravity Forms. In EmDash, we built a basic form using the built-in form plugin and connected it to Cloudflare Workers for email delivery. The client didn&#8217;t notice the difference.<\/p>\n<h2>Real Results: Cost, Security, and Speed<\/h2>\n<p>Six months post-migration, the numbers are clear:<\/p>\n<ul>\n<li><strong>Hosting costs<\/strong>: $750\/year across 10 sites, down from $4,200. That&#8217;s an 82% reduction. However, this assumes low traffic. One client experienced a traffic spike to 50,000 monthly visitors \u2014 the bill remained under $7 for that month. Cloudflare&#8217;s usage-based pricing is unpredictable at scale, but for typical content sites, it&#8217;s dramatically cheaper.<\/li>\n<\/ul>\n<ul>\n<li><strong>Security incidents<\/strong>: Zero. No plugin vulnerabilities, no compromised accounts. Passkey authentication eliminated password leaks. The sandboxed plugin model means no plugin can touch the database unless explicitly permitted. We sleep better.<\/li>\n<\/ul>\n<ul>\n<li><strong>Page load times<\/strong>: 40-60% faster than the WordPress equivalents, according to Lighthouse scores. The Astro-generated static pages load from Cloudflare&#8217;s edge. No PHP execution on each request.<\/li>\n<\/ul>\n<ul>\n<li><strong>Developer maintenance<\/strong>: We spend roughly 2 hours per month on updates and monitoring, down from 8 hours. No plugin updates to test. No compatibility issues between WordPress version and plugins.<\/li>\n<\/ul>\n<p>The agency&#8217;s profit margin on these sites improved from 35% to 52%, primarily because hosting and maintenance costs dropped.<\/p>\n<h2>Lessons for Other Agencies Considering EmDash<\/h2>\n<p>The common advice says: &#8220;Don&#8217;t adopt a v0.1 beta with no ecosystem.&#8221; That advice is correct if your clients need WooCommerce, advanced page builders, or integrations with third-party APIs that only have WordPress plugins. For those use cases, WordPress remains the right <a href=\"https:\/\/overcentral.com\/en\/ichra-choice-arrangements-label-97925\/\" title=\"ICHRA Gets CHOICE Arrangements Label from CMS, SBA\" data-iacss-internal=\"1\">choice<\/a>.<\/p>\n<p>But the advice ignores a large category of sites: blogs, portfolios, small business brochure sites, nonprofit pages. These sites don&#8217;t need 14 plugins. They need a reliable editor, fast loading, and low maintenance. EmDash delivers that today, with one major caveat.<\/p>\n<p><strong>The ecosystem gap is real.<\/strong> We could not migrate two client sites that used Elementor for complex layouts. The migration tool imports content, not design. Those clients stayed on WordPress. EmDash&#8217;s theme system is flexible, but it assumes you build with Astro components, not a drag-and-drop builder. For agencies that sell page-builder flexibility, EmDash is not ready.<\/p>\n<p><strong>The vendor lock-in concern is valid but overstated.<\/strong> EmDash runs on any Node.js server, but the sandboxed plugin feature requires Cloudflare&#8217;s paid Workers plan. Self-hosting removes the signature security advantage. We accepted this because our clients aren&#8217;t going to switch hosting providers. The cost savings outweighed the lock-in risk.<\/p>\n<p><strong>The billing unpredictability is the biggest risk.<\/strong> Cloudflare <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> offer a spending cap. A DDoS attack or runaway worker could generate a surprise bill. We mitigated this by setting CPU time limits per request and using WAF rate limiting. It&#8217;s not a complete solution, but for small sites the risk is manageable. We also set up billing alerts.<\/p>\n<h2>The One Scenario Where We&#8217;d Still Recommend WordPress<\/h2>\n<p>We kept 20 client sites on WordPress. Every one of them uses an e-commerce plugin, a membership system, or a custom integration that only exists in the WordPress plugin directory. EmDash&#8217;s plugin sandbox is architecturally superior, but no amount of architecture matters if the plugin you need doesn&#8217;t exist.<\/p>\n<p>For agencies evaluating EmDash, the decision comes down to a single question: Does your client&#8217;s site depend on a plugin that has no EmDash equivalent? If yes, stay. If no, the migration risk is lower than the security and cost risk of staying on WordPress.<\/p>\n<p>We don&#8217;t expect EmDash to replace WordPress for the 43% of the web. But for the subset of sites that don&#8217;t need the plugin ecosystem, it already offers a better deal. The advice to &#8220;wait until it matures&#8221; assumes you&#8217;re not getting hacked, not overpaying for hosting, and not wasting developer time on plugin maintenance. For our clients, those assumptions were false.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Everyone says the same thing about EmDash. It&#8217;s version 0.1. Zero plugin ecosystem. Built in two months with AI coding agents. No production deployments. The advice is universal: wait until it matures. That advice is sound for most situations. But it missed something. For a specific class of WordPress sites \u2014 small content-driven client projects [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":100339,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/98084.png","fifu_image_alt":"Why We Migrated 10 WordPress Sites to EmDash","footnotes":""},"categories":[31],"tags":[],"class_list":["post-98084","post","type-post","status-publish","format-standard","has-post-thumbnail","category-technology"],"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/98084.png","fifu_image_alt":"Why We Migrated 10 WordPress Sites to EmDash","_links":{"self":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98084","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=98084"}],"version-history":[{"count":1,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98084\/revisions"}],"predecessor-version":[{"id":100340,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98084\/revisions\/100340"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media\/100339"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media?parent=98084"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/categories?post=98084"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/tags?post=98084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}