The EmDash import tool handles WordPress posts, pages, media, and custom post types directly. No manual copying. No database exports. You move the content, not the architecture.
Three paths exist for getting your WordPress data into EmDash. One takes a few clicks. Another uses a plugin for authenticated transfer. The third works when you only have a file. All three finish in under an hour for most sites under 1,000 posts.
A content-only blog with minimal plugins — no e-commerce, no membership system, no custom post type logic — can migrate cleanly in under an hour.
Here is what actually happens during migration — and what does not transfer.
What the EmDash Import Actually Moves
The import reads a standard WordPress WXR export file. That file contains posts, pages, media attachments, categories, tags, and custom post types. EmDash maps each one to its equivalent content type.
If your WordPress site uses Yoast SEO, the import reads those meta fields and maps them to EmDash’s built-in SEO fields — title, description, and canonical URL. You do not need a separate SEO plugin after migration.
Media files transfer as references, not raw uploads. EmDash stores images in R2 (Cloudflare’s blob storage) or local storage depending on your deployment. The original URLs in your content get rewritten to the new media paths automatically.
Custom post types from WordPress — portfolios, testimonials, products, whatever you registered — become EmDash content types during import. The field data inside each custom post type carries over as structured JSON.
What Does Not Transfer
Plugins do not migrate. Your WooCommerce store, your contact form entries, your membership system, your page builder layouts — none of that moves. EmDash runs plugins in isolated sandboxes, and WordPress plugins are PHP scripts that cannot execute in the TypeScript runtime.
Themes do not migrate either. WordPress themes rely on functions.phpcodecodecodecode, template tags, and PHP-based loops. EmDash themes are built with Astro components. You will need to rebuild your front-end design from scratch or use one of EmDash’s starter templates.
Widget areas and sidebar configurations do not transfer. WordPress stores widget assignments in the database as serialized PHP arrays. EmDash uses its own section and widget system.
Step 1: Export Your WordPress Site
Log into your WordPress admin. Go to Tools → Export. Select All content — this generates a WXR file containing every post, page, media attachment, category, tag, and custom post type on the site.
Click Download Export File. The file is XML, typically 1-10 MB for a small blog and 50-100 MB for a site with hundreds of images. Most downloads finish in under 30 seconds.
Keep the file somewhere you can find it. You will upload it in the next step.
Step 2: Install EmDash and Access the Import Screen
If you have not deployed EmDash yet, use the quick start command:
“`
npm create m-dash@latest
“`
Choose your deployment target — Cloudflare Workers or local Node.js. The setup wizard asks for your site title, email, and a passkey for authentication. The whole process takes about three minutes.
Once EmDash is running, navigate to Manage → Import in the admin sidebar. You see two options:
- Upload your export file — works for any WordPress site
- Connect via plugin — requires installing an EmDash export plugin on your WordPress site
For most users, the file upload path is faster and does not require additional WordPress plugin installations.
Step 3: Upload the WXR File
Click the upload area and select your WordPress export file. EmDash parses the XML and shows a preview of what it found — post count, page count, media items, categories, and custom post types.
A site with 500 posts and 200 media files takes roughly 20-40 seconds to parse on a Cloudflare Workers deployment. Local Node.js instances process slightly faster since there is no network latency to D1 or R2.
Click Import. EmDash begins processing in the background. Posts import first, then pages, then media attachments, then taxonomies. The admin interface updates progressively — you see items appear in the content list as they complete.
A 500-post site finishes in under 90 seconds on Cloudflare’s infrastructure. Smaller sites complete in under 30 seconds.
Step 4: Verify the Imported Content
Go to Content → Posts in the EmDash admin. Every post from your WordPress site should appear with its original title, slug, publish date, author assignment, and content body.
Open a post to check the editor. EmDash stores content as portable text — structured JSON, not raw HTML. The WXR-to-portable-text conversion handles standard WordPress blocks (paragraphs, headings, lists, images, embeds) correctly. Custom block types from page builders like Elementor or Divi will not render — those blocks are stored as raw HTML comments in the WXR file, and EmDash strips unrecognized block markup.
Check one or two media-heavy posts. Images should display in the editor and on the front end. If your original WordPress site used full-size image URLs in content, those paths are rewritten to EmDash’s media storage. If your site used thumbnail-based URLs, the import maps them to the uploaded full-size versions.
Step 5: Rebuild Your Front End
EmDash ships with three starter templates — blog, marketing site, and portfolio. Pick the one closest to your WordPress site’s layout. The blog template works for most migration scenarios.
If you need a custom design, EmDash themes are Astro projects. Create an src/themes/codecodecodecode directory, add layouts, components, and CSS. The theme system uses Astro’s content collections to query data. A basic blog theme with a header, post list, and single-post template takes a few hours for an experienced Astro developer.
For sites that only need a matching visual style, the import preserves your original content structure. You can style the starter templates with custom CSS to approximate your old look without building a full theme.
What 500-Post Migration Actually Costs
Based on testing across multiple WordPress sites with comparable content volumes, a 500-post migration to EmDash on Cloudflare’s paid plan ($5/month) consumes roughly:
- 3,000-4,000 Workers requests
- 50-80 MB of R2 storage for media
- 15-20 MB of D1 database storage for content
Total first-month infrastructure cost: approximately $5.15 — the base plan plus a few cents of overage for storage. Subsequent months cost the base $5 plus whatever traffic your site receives.
Compare that to managed WordPress hosting, where a comparable site on WP Engine or Kinsta costs $25-35 per month with content limits and traffic caps.
The Catch: What You Lose in the Migration
EmDash is version 0.1. The import works, but the platform is not production-ready for most businesses.
Your WordPress site likely runs plugins for forms, SEO, caching, security, analytics, and e-commerce. None of those exist in EmDash’s ecosystem. The built-in SEO fields cover titles and descriptions, but there is no XML sitemap customization, no schema markup editor, no redirect manager for broken links.
WooCommerce stores cannot migrate at all. Product data, order history, customer accounts, and payment integrations have no equivalent in EmDash. The import tool ignores WooCommerce-specific post types entirely.
Page builder layouts from Elementor, Divi, Beaver Builder, or Gutenberg blocks with custom styling will break. The portable text format supports basic rich text. Complex column layouts, background images, custom spacing, and interactive elements are lost.
One Scenario Where the Migration Actually Works Today
A content-only blog with minimal plugins — no e-commerce, no membership system, no custom post type logic — can migrate cleanly in under an hour. The starter blog template matches the default WordPress layout closely enough that visitors will not notice the change.
A site running only Yoast SEO and a caching plugin is an ideal candidate. Yoast fields map to EmDash’s built-in SEO. Caching is handled by Cloudflare’s edge network automatically.
For everything else — stores, membership sites, directory listings, custom applications — wait for the ecosystem to mature or plan for a significant rebuild alongside the migration.
- What does the EmDash import tool move from WordPress?It moves posts, pages, media attachments, categories, tags, and custom post types. Yoast SEO fields also transfer.
- What does not transfer during a WordPress to EmDash migration?Plugins, themes, widget areas, WooCommerce data, and page builder layouts do not transfer.
- How long does the migration take?Most sites under 1,000 posts finish in under an hour.