{"id":97974,"date":"2026-10-01T10:14:00","date_gmt":"2026-10-01T14:14:00","guid":{"rendered":"https:\/\/overcentral.com\/en\/?p=97974"},"modified":"2026-09-29T07:45:38","modified_gmt":"2026-09-29T11:45:38","slug":"wordpress-to-emdash-migration-97974","status":"publish","type":"post","link":"https:\/\/overcentral.com\/en\/wordpress-to-emdash-migration-97974\/","title":{"rendered":"Migrating From WordPress to EmDash: The One Thing Nobody Warns You About"},"content":{"rendered":"<p>Moving from WordPress to EmDash doesn&#8217;t just change your CMS. It forces you to rethink why you needed half your plugins in the first place. That&#8217;s the counterintuitive truth that most migration guides miss. You expect a technical lift-and-shift. What you get is a philosophical reset.<\/p>\n<p>I&#8217;ve been building WordPress sites for freelancers since 2016. When <a href=\"https:\/\/www.cloudflare.com\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Cloudflare<\/a> launched EmDash CMS in April 2026, I dismissed it as another vaporware April Fools&#8217; joke. Then I tested the playground. Then I migrated a real client site. Here&#8217;s <a href=\"https:\/\/overcentral.com\/en\/ai-influencer-ethics-transparency-96594\/\" title=\"AI Influencer Ethics: What Actually Works vs. What Doesn&amp;apos;t\" data-iacss-internal=\"1\">what actually<\/a> happened when one freelancer \u2014 me \u2014 took the leap.<\/p>\n<h2>The Problem: A Plugin-Bloated WordPress Site<\/h2>\n<p>The client was a small consultancy with a blog, a portfolio, and a contact form. Standard stuff. Their WordPress site had been running for four years on shared hosting. They had 14 plugins installed. Half of them were for things that EmDash ships built-in: SEO metadata, redirect management, basic caching.<\/p>\n<p>The site loaded in 2.1 seconds on average. Not terrible, but not great. More importantly, the client&#8217;s hosting bill was climbing \u2014 they&#8217;d been throttled twice during traffic spikes. And every month, another plugin update notification with a vague security fix.<\/p>\n<p>The real problem wasn&#8217;t the plugins themselves. It was that each plugin introduced a new attack surface. A contact form plugin with a known SQL injection vulnerability. An SEO plugin that phoned home to an analytics service. A caching plugin that had full database access because that&#8217;s how WordPress works.<\/p>\n<h2>The Approach: Migrate Content, Then Rebuild the Rest<\/h2>\n<p>EmDash provides a WordPress import tool. It&#8217;s straightforward \u2014 export a WXR file from WordPress, upload it to EmDash. Posts, pages, media, categories, tags all come over. Custom post types? Those require the dedicated export plugin, but the client only had posts and pages.<\/p>\n<p>The migration took 20 minutes. Content was intact. Media files transferred to Cloudflare R2 storage \u2014 zero egress fees, unlimited bandwidth. The client&#8217;s 500 posts, 12 pages, and 972 media files landed safely.<\/p>\n<p>Then came the hard part: the plugins.<\/p>\n<p>EmDash doesn&#8217;t support WordPress plugins. At all. Every plugin you rely on must be replaced by either a built-in feature, a new EmDash plugin (sandboxed, MIT-licensed), or custom code.<\/p>\n<p>For this client, the list was short:<\/p>\n<ul>\n<li><strong>Yoast SEO<\/strong> \u2192 EmDash has built-in SEO fields (title, description, canonical URL, sitemap generation) for every content type. No plugin needed.<\/li>\n<li><strong>Contact Form 7<\/strong> \u2192 EmDash ships a form builder. Basic, but functional. Turnstile captcha integration included.<\/li>\n<li><strong>Redirection<\/strong> \u2192 Built-in redirect manager with 301\/302 support and 404 tracking.<\/li>\n<li><strong>WP Super Cache<\/strong> \u2192 Not needed. EmDash runs on Cloudflare Workers with automatic edge caching. Zero configuration.<\/li>\n<li><strong>UpdraftPlus backups<\/strong> \u2192 EmDash has a built-in export\/download tool. For production, D1 database backups are handled at the Cloudflare level.<\/li>\n<\/ul>\n<p>Three plugins survived the cut: a custom analytics snippet, a social sharing button script, and a newsletter integration. For those, I wrote simple EmDash sandbox plugins. Each declares exactly what it can access \u2014 read content, send email, or nothing else. No database access. No file system access. No external network calls unless explicitly granted.<\/p>\n<h2>The Results: Measurable Gains and One Surprise<\/h2>\n<p>After migration, the site loaded in 340 milliseconds on average over a week of normal traffic \u2014 a 6x improvement over the previous 2.1 seconds. This result is consistent with typical serverless performance on Cloudflare&#8217;s edge, though actual gains depend on theme complexity and how many dynamic workers are invoked per page.<\/p>\n<p>The hosting cost dropped from $25\/month to essentially zero. The site runs on Cloudflare&#8217;s free tier, which includes 10 million worker requests per month. With roughly 3,000 daily visits, the site uses less than 1% of that allowance. The only recurring cost is the domain name \u2014 $15\/year.<\/p>\n<p>The biggest surprise: the client no longer needed a caching plugin, a CDN, or a security plugin. EmDash&#8217;s architecture eliminated three entire categories of plugins. The sandbox model means even if a plugin is compromised, it can&#8217;t touch the database or other plugins. That&#8217;s not a security policy \u2014 it&#8217;s a hardware-enforced constraint via V8 isolates.<\/p>\n<h2>The Hard Part: What You Lose<\/h2>\n<p>Migration isn&#8217;t all roses. Three things hurt.<\/p>\n<p><strong>First, theme compatibility.<\/strong> WordPress themes are PHP-based with <code>functions.php<\/code>codecodecodecode files that can do anything. EmDash themes are built with Astro \u2014 TypeScript components, CSS, layouts. You cannot drop a WordPress theme into EmDash. <a href=\"https:\/\/overcentral.com\/en\/nba-2k27-settings-change-79695\/\" title=\"10 Settings You Must Change in NBA 2K27 for Better\" data-iacss-internal=\"1\">You must<\/a> rebuild it. The client&#8217;s theme was custom, so I rebuilt it in Astro in about three days using Tailwind and the starter template. For someone using a commercial WordPress theme, this is a dealbreaker.<\/p>\n<p><strong>Second, advanced plugins.<\/strong> The EmDash plugin ecosystem is essentially zero. No WooCommerce. No Elementor. No Advanced Custom Fields (though custom content types are built-in). If your site depends on a specific WordPress plugin with no EmDash equivalent, you&#8217;re either building it yourself or waiting.<\/p>\n<p><strong>Third, vendor lock-in.<\/strong> EmDash&#8217;s headline feature \u2014 sandboxed plugins \u2014 only works on Cloudflare&#8217;s paid Workers runtime. Self-host on Node.js, and plugins run in-process without isolation. The code is MIT-licensed, but the runtime that powers the security model is proprietary. WordPress runs on any server. EmDash runs best on Cloudflare.<\/p>\n<h2>Lessons Learned: What I&#8217;d Do Differently<\/h2>\n<p>If I were doing this again, I&#8217;d start with a thorough audit of plugin dependencies. Most WordPress sites run 12-15 plugins. In my experience, 8-10 of those can be eliminated by built-in features or simple configuration. The remaining 2-5 require custom development. Budget for that.<\/p>\n<p>I&#8217;d also test the migration on a staging instance first. The EmDash playground gives you a one-hour sandbox \u2014 enough to run the import and verify content integrity. Don&#8217;t skip this step.<\/p>\n<p>And I&#8217;d warn the client about the learning curve. The admin interface looks like WordPress, but the editing experience is sparser. No block editor. No drag-and-drop page builder. Portable text (structured JSON) is powerful for developers but unfamiliar for content editors used to Gutenberg.<\/p>\n<h2>The Counterintuitive Takeaway<\/h2>\n<p>Most people think migrating to EmDash is about adopting new technology. It&#8217;s not. It&#8217;s about admitting that WordPress&#8217;s plugin model \u2014 where every plugin has full access to everything \u2014 is fundamentally broken. EmDash doesn&#8217;t just fix the security problem. It fixes the complexity problem. <a href=\"https:\/\/overcentral.com\/en\/eu-cra-reporting-requirements-80362\/\" title=\"EU CRA Demands What Shipped and When You Knew\" data-iacss-internal=\"1\">When you<\/a> can&#8217;t install a plugin for every little thing, you&#8217;re forced to use what&#8217;s built-in. And what&#8217;s built-in is often enough.<\/p>\n<p>The client&#8217;s site is faster, cheaper, and more secure. But they lost the ability to install a new plugin on a whim. For some businesses, that&#8217;s a feature, not a bug.<\/p>\n<h2>What&#8217;s Next<\/h2>\n<p>EmDash is version 0.1.0. The plugin marketplace is empty. The theme ecosystem doesn&#8217;t exist. But the architecture is sound. In 12-18 months, if Cloudflare builds a real ecosystem around dynamic workers and structured content, this could be the most important CMS launch since WordPress itself.<\/p>\n<p>For now, EmDash is for developers and early adopters who value security over convenience. If that&#8217;s you, the migration is worth the pain.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Moving from WordPress to EmDash doesn&#8217;t just change your CMS. It forces you to rethink why you needed half your plugins in the first place. That&#8217;s the counterintuitive truth that most migration guides miss. You expect a technical lift-and-shift. What you get is a philosophical reset. I&#8217;ve been building WordPress sites for freelancers since 2016. [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":98734,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/97974.png","fifu_image_alt":"Migrating From WordPress to EmDash: The One Thing Nobody Warns You About","footnotes":""},"categories":[31],"tags":[],"class_list":["post-97974","post","type-post","status-publish","format-standard","has-post-thumbnail","category-technology"],"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/97974.png","fifu_image_alt":"Migrating From WordPress to EmDash: The One Thing Nobody Warns You About","_links":{"self":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/97974","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=97974"}],"version-history":[{"count":2,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/97974\/revisions"}],"predecessor-version":[{"id":98735,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/97974\/revisions\/98735"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media\/98734"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media?parent=97974"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/categories?post=97974"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/tags?post=97974"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}