Cloudflare published an Astro-based open source CMS called "EmDash," so I tried deploying it on Workers right away
注目の記事

Cloudflare published an Astro-based open source CMS called "EmDash," so I tried deploying it on Workers right away

2026.04.02

This page has been translated by machine translation. View original

Berlin's sigahide here.

Cloudflare recently acquired Astro, and we're already seeing results from that acquisition. They've released "EmDash," a Serverless/Headless open source CMS based on Astro, so I quickly deployed it on Cloudflare Workers to try it out.

What is EmDash?

EmDash is a full-stack serverless CMS that Cloudflare positions as a "spiritual successor to WordPress." It's written in TypeScript and released under the MIT license. Currently, it's in beta at version v0.1.0.

To summarize its features: the theme and frontend are pure Astro, the admin panel closely resembles WordPress, and the infrastructure is a serverless configuration with Cloudflare Workers + D1 + R2. Plugins are executed in isolated V8 environments, which structurally eliminates the security risks commonly associated with WordPress plugins. Authentication defaults to Passkey-based.

Deployment from Cloudflare Dashboard

You can deploy the EmDash template from the "Workers & Pages" section of the Cloudflare dashboard. Configuration items include Git account integration, project name, D1 database, and R2 bucket.

Cloudflare Dashboard - Project Setup

I named my project my-emdash-site and created new D1 database and R2 bucket. For R2 location, I selected Western Europe (WEUR). The build command npm run build and deploy command npm run deploy are filled in by default.

Cloudflare Dashboard - R2/Build Settings

When you click "Create and deploy," a private repository is created on GitHub, and the build and deployment run automatically. This took about 4 minutes. There were no particular obstacles in this process.

Initial Setup

After deployment completes, you can access your site at my-emdash-site.classmethodeurope.workers.dev. A setup wizard appears on first access.

EmDash Setup - Site Information Input

Enter the Site Title and Tagline, then proceed with account creation and Passkey registration. There are only three steps.

EmDash Sign-in - Passkey Authentication

In addition to Passkey, sign-in supports GitHub, Google, and email links. Having Passkey authentication as the default is very modern and good.

Admin Panel Just Like WordPress

Here's the dashboard that appears after login.

EmDash Dashboard

The left sidebar contains Pages, Posts, Media, Comments, Menus, Redirects, Widgets, Sections, Categories, Tags, Bylines... Anyone who has used WordPress can operate it without explanation (inspired). There are also management menus like Content Types and Users.

Page Editing

Let's create a new page from Pages. It has a rich text editor with basic editing features like bold, italic, headings, lists, quotes, and image insertion - not as complex as WordPress's block editor, but covers the basics.

EmDash Page Editor

When you upload an image and publish the page, it immediately appears on the site.

Published Page

The page is properly displayed at my-emdash-site.classmethodeurope.workers.dev/pages/brocken-jr. The slug is generated automatically.

Marketplace (Plugins)

The admin panel has a Marketplace menu where you can install plugins.

EmDash Marketplace

Currently, there are a few plugins available such as webhook-notifier, audit-log, and atproto (Bluesky integration). While the number is small since it's a v0.1.0 beta, the plugin mechanism itself is robust. EmDash plugins run in isolated V8 environments and explicitly declare required permissions in their manifests. This structurally solves the problem in WordPress where plugins can directly access the database.

Content Types

In Content Types, you can manage schemas for pages and posts.

EmDash Content Types

In addition to system fields (ID, Slug, Status, Created At, Updated At, Published At), custom fields (Title, Content) are defined. This is equivalent to WordPress custom fields, but managed with a clearer UI that makes a good impression.

GitHub Repository Contents are Mostly Astro

Looking at the source of the GitHub repository automatically created during deployment, it's mostly standard Astro.

GitHub Repository - Astro Source Code

Under src/ are the standard Astro directories: components/, layouts/, and pages/. Looking at the page template [slug].astro, it retrieves content from the CMS using getEmDashEntry and renders it with PortableText. If you've worked with Astro before, you won't need to learn anything new to customize the theme.

So EmDash is best understood as an Astro project wrapped with a WordPress-like admin panel and CMS layer.

Impression

Here are my impressions after actually trying it from deployment to publishing an article.

The ease of setup is excellent. Deployment is completed with just a few clicks from the Cloudflare dashboard, and initial setup is only 3 steps. It's a world apart from the days of installing WordPress on a VPS. WordPress users won't get lost in the admin UI.

On the other hand, having experience with both Markdown/JSON rendering in Astro and React→API→D1 sites, I think it might be challenging for large-scale sites with lots of content or elements at this point. Being D1 (SQLite) based, sites with thousands of pages would likely require appropriate tuning (like multi-layer caching with KV).

However, for corporate sites, landing pages, or portfolio sites that don't have many pages to manage - basically "sites that were casually built with WordPress (ignoring vulnerabilities)" - this could be a game-changer. No server management needed, scale-to-zero with pay-as-you-go pricing, and structurally secure.

Another big point is that themes and plugins can be created based on Astro. Since the Astro ecosystem can be utilized as is, I think the community will grow quickly.

As a WordPress replacement candidate, this is a project whose development I look forward to.

References

Share this article