The CMS category is reorganizing around a simple architectural fact: if your rendering happens at the edge, your content API and your admin should live there too. A headless CMS in one region serving a site rendered in three hundred cities is a contradiction wearing a sales deck.
Why Astro is the right substrate
Astro's islands model matches how content sites actually behave: mostly static HTML, occasional interactivity. Server-render everything, hydrate almost nothing, and the performance budget takes care of itself. With the Cloudflare adapter, every page render is a Worker invocation with single-digit-millisecond access to D1 — the database is effectively co-located with the renderer.
EmDash is the first CMS we've adopted that treats this as the default rather than an exotic deployment target. Collections compile to D1 schema, content queries are live loaders, media goes to R2 with image transforms at the edge. The WordPress-shaped content model — post types, taxonomies, custom fields — survives intact, which matters for every editorial team that has to live in it.
Where the sharp edges are
It's early. Developer-preview early. The seed format is powerful but the auto-seed path makes choices you'll want to override; reference fields between collections work but the query layer makes you do the joins; and local dev runs a real workerd, which is fidelity you pay for in startup seconds. None of these are architectural problems — they're version-0.x problems, and the architecture underneath is the one the category is converging on.
We're invested enough that this site runs on it. The receipts are one click away.