Migrating this site to EmDash

Roger StringerRoger Stringer
September 30, 2026
4 min read
Migrating this site to EmDash

This site has had a few changes over the past week:

  1. I migrated from Directus and Drizzle to EmDash, with D1 for the database and R2 for media.
  2. I moved hosting from Vercel to Cloudflare.

On the surface that's a stack swap. Underneath, it's about how I build things now.

Twenty-plus years of CMS hopping

This site has been around since 2003. In that time it's run on a custom setup, WordPress, Ghost, static, back to WordPress, back to Ghost, back to static, and most recently a custom Directus / Drizzle / Astro build.

Looking back at that list, every move lined up with how I was building at the time. WordPress was the obvious choice when everything was PHP on shared hosting. Ghost was where I went when I wanted something leaner and focused on writing. Static happened when build pipelines got good enough that a database felt like overhead. Directus made sense when I wanted a proper API-first backend I could shape myself.

This move follows the same pattern. These days a lot of my building happens alongside an AI agent, so I want a CMS that an agent can actually work with, not one I have to click through on its behalf.

Why EmDash

The Directus setup worked great, and I'd still recommend Directus. But EmDash has hit 1.0.1, and I've been using it more and more on other projects like Get Butters, so it made sense to bring my own site along.

What keeps pulling me back to EmDash is that it treats an agent as a real user of the system, not an afterthought. A lot of CMSes are adding AI features right now: a writing assistant in the editor, a generate button here and there. EmDash goes the other way. It ships with an MCP server, typed content collections an agent can inspect, a CLI that speaks JSON, and docs written so a model can follow them.

The migration was my proof. Both Directus and EmDash have solid MCP support, so I connected an agent to both sides and had it recreate my content types in EmDash to mirror what I had in Directus, then move the content across. That's not a job I'd have looked forward to doing by hand.

A few other things I like:

  • Plugins are sandboxed. Each one runs in its own isolated environment and has to ask for the access it needs. After years of WordPress plugins getting the keys to everything, that's a nice change.
  • Passkeys out of the box. No passwords to leak.
  • It feels familiar. The admin looks enough like WordPress that anyone coming from there won't feel lost.
  • It's Astro underneath. I was already building on Astro, so the frontend side of this move was the easy part.

Markdown to Portable Text

The biggest change was going from Markdown to Portable Text.

For years my content was Markdown strings. Portable Text stores content as structured JSON instead: paragraphs, lists, links and custom blocks are all data rather than markup. That means an agent can edit one paragraph or add a list item without parsing HTML and hoping it doesn't break the formatting. It's also why an agent editing this site feels reliable instead of risky.

It did take some adjustment. Content that was just text in a file is now a structure, and that changes how you think about writing and rendering it. For me it's worth it.

What's still early

I'm enthusiastic, but I'm not going to pretend it's finished:

  • It's young. A 1.0 CMS hasn't had the years of production abuse that WordPress has.
  • The plugin ecosystem is small. WordPress has tens of thousands of plugins. EmDash's marketplace is just getting going, and a CMS usually lives or dies on its ecosystem.
  • It's a Cloudflare-led project. It's MIT-licensed, which is great, but it's fair to want to see how governance plays out long term.
  • Cloudflare is the smoothest path. It deploys elsewhere too, but D1 and R2 are where it feels most at home. That's partly why I moved hosting at the same time.

None of that stopped me. For a personal site and the client work I do, the tradeoffs are fine, and I'd rather be early on the right idea.

Further reading

Joost de Valk wrote a great piece when EmDash launched, EmDash: a CMS built for 2026. He goes deeper into the architecture and the plugin security model, and he ends up in a very similar place to me: the question worth asking now is what a CMS should look like when AI agents are doing a lot of the building. It's worth a read.

If you're thinking about moving to EmDash yourself, or want help with a migration, get in touch.

Tagged In:

Do you like my content?

Sponsor Me On Github

Keep reading