We build and deploy EmDash CMS sites.
EmDash is an open-source CMS that runs inside the Astro application, with the admin and the site in one deployment. Stable 1.0 shipped on 28 September 2026. We build new EmDash sites and take them to production on Cloudflare or Node.
EmDash keeps the CMS inside your Astro application. Editors shape the content model in the admin, and developers get typed content.
-
Runs inside Astro
EmDash is an Astro integration, so the admin panel and the site deploy as one application. Pages query live content through Astro Live Collections in the same runtime. Integrations use the REST API or the CLI.
-
Collections built in the admin
Anyone with the Admin role adds collections and fields in the admin. Developers generate TypeScript types from that live model and export it as a seed file for a new database.
-
Drafts, preview and scheduling
An entry is a draft, scheduled or published. Editors share signed preview links that expire, and they can restore an earlier revision from the entry's history.
-
Translations on their own schedule
Each translation is a separate entry with its own slug, status and revisions. One locale can go live while another stays in draft.
-
A built-in MCP server
AI agents read and edit content through the MCP server in core. They sign in with OAuth 2.1 or a personal access token, and scopes and role checks limit what each one can change.
-
Plugins with declared capabilities
A plugin declares the access it needs. In sandboxed mode EmDash isolates its storage, limits the hosts it can call and asks for consent again when an update wants more.
-
Cloudflare or Node hosting
EmDash deploys to Cloudflare Workers with D1 and R2, or to a Node.js server with a SQL database and S3-compatible media. Both run in your own account or on your own server.
-
A WordPress importer
The importer in the admin analyses a WordPress site, sets up collections, imports posts and media and rewrites the URLs.
Our EmDash CMS review includes a recorded 0.42.0 evaluation of editing, preview, publication, revision restore and site transfer. The editable evaluation sheet covers the checks to run with your editors and security team on the version and deployment chosen for your site.
EmDash runs only inside Astro. wayf.ai is built with Astro, and we maintain the open-source Payload Astro Starter, which runs Payload behind an Astro front end. Our Astro CMS guide compares Payload, Storyblok, Sanity and Contentful for Astro sites.
EmDash suits an Astro site run by one editorial team. Payload handles approvals and brand permissions better.
EmDash fits when
- The site is a new Astro build with one editorial team.
- Someone with the Admin role should be able to add collections and fields in the admin.
- You want the CMS and the site in one deployment, on Cloudflare or Node.
- Each translation should publish on its own schedule.
- Agents will read and edit content through the built-in MCP server.
Payload fits better when
- Content has to pass a review step before it goes live.
- Editors may change only their own brand or region.
- Staff need native SAML integration rather than sign-in through Cloudflare Access.
- Procurement asks for an SLA, a compliance certification or contractual support.
- Every schema change has to go through code review.
We are an official Payload partner, so weigh our Payload view with that in mind.
Send us the content types, the roles and the hosting you have in mind. We will tell you which platform suits the build.
Talk through the fitWe take an EmDash site from content model to production. Sign-in, backups and the upgrade path are in place before launch.
Content model and roles
We work out the collections and fields with your editors and generate the TypeScript types the templates use. Each person gets one of EmDash's five roles, and changes to the model stay with the Admin role. The model goes into a seed file, so staging and production start from the same structure.
Templates and preview
We build the Astro templates against live content and wire preview into them, so an editor sees a draft on the real page before publishing it. Preview pages carry a noindex directive. We set how long a preview link lasts to match how your team shares drafts.
Sign-in
On Cloudflare we map Cloudflare Access to your identity provider's groups, and it becomes the only way into the admin. Other sites use passkeys, which EmDash sets up by default, or GitHub and Google sign-in.
Invitations and account recovery go out by email, so we connect an email provider before launch. Without one, a sole admin who loses access has to reset it through the database.
Hosting and backups
We deploy to your Cloudflare account or your own Node server. Scheduled publishing needs a Cron Trigger on Workers and a process that stays up on Node, and we set up whichever one applies.
EmDash does not restore its own JSON backups. Our backup routine copies the raw database, the media and the encryption keys, and before launch we restore them into a fresh environment and check the public site.
Moving from WordPress
We run EmDash's importer for posts and media and check every rewritten URL. The importer lands content in the default locale and drops scheduled dates and visibility rules, so we restore those and relink the translations WPML or Polylang had grouped.
Memberships, forms, advertising and anything else a WordPress plugin handled get rebuilt as an EmDash plugin or moved to a separate service. The old site stays up until each one works on the new site.
- Cloudflare Workers
- D1
- R2
- Node.js
- SQLite
- libSQL
- PostgreSQL
- S3-compatible storage
Questions we get asked about EmDash CMS.
-
Is EmDash ready for a production site?
Yes. EmDash released stable 1.0 on 28 September 2026, and we deploy it to production. An existing 0.x site follows the 1.0 upgrade guide. Core migrations only run forward, so we rehearse every upgrade on a copy of the site before it reaches production.
-
Can EmDash hold content for approval before it goes live?
Not in core. An EmDash entry is draft, scheduled or published, with no review state. A plugin can block publication through the
content-policyhook, which is custom work to specify, build and maintain. When approval is a hard requirement we build on Payload, which has drafts, versions and scheduled publishing in core and sells approval workflows as an enterprise feature. -
Can we move a WordPress site to EmDash?
Yes, and we run the migration. EmDash's importer moves posts and media and rewrites URLs. Scheduled dates, visibility rules and WPML or Polylang translation groups do not carry over, so we set those up again after the import. Anything a WordPress plugin did, such as memberships or forms, gets rebuilt as an EmDash plugin or moved to a separate service.
-
We run Strapi today. Is EmDash an option?
For a new site built on Astro, yes. EmDash runs only inside an Astro application. When an existing Strapi build needs a successor, we move it to Payload. Our Strapi page covers maintenance and migration.
-
How does an EmDash engagement start?
With a consultation that costs nothing. After it we write the scope and agree a fixed price against it before the build starts.
Tell us about the EmDash site you want to build.
Send us the content types, who publishes and where the site should run. We will scope the build and come back with a fixed price.