Skip to content

Introduction to EmDash

EmDash is an Astro-native content management system. It brings familiar CMS patterns—collections, taxonomies, menus, widgets, and a polished admin UI—directly into your Astro site with full TypeScript support and portable deployment.

EmDash is a CMS built specifically for Astro. It uses Astro 6’s Live Content Collections to serve content at runtime, so edits appear immediately. Content is stored in a SQL database — SQLite, libSQL, Cloudflare D1, or PostgreSQL — and media in S3-compatible storage (R2 or the local filesystem).

Key characteristics:

  • Visual content modelling — Define and change collections and fields from the admin UI; changes take effect immediately.
  • Live Collections — Content is served at runtime, so edits appear immediately.
  • Plugin system — WordPress-inspired hooks, storage, settings, and admin UI extensions.
  • Cloud-portable — Runs on Cloudflare (Workers + D1 + R2) or Node.js, with SQLite, libSQL, or PostgreSQL and any S3-compatible storage.
  • Not a headless CMS — EmDash is tightly integrated with Astro and runs in the same deployment, rather than as a separate service you call over an API.
  • Not WordPress-compatible — It does not run PHP or WordPress plugins. WordPress content and concepts migrate to EmDash equivalents.
  • Not a page builder — EmDash manages structured content. Build visual layouts with Astro components.

Agency developers

Spin up client sites quickly with reusable plugins and themes. Plugins run in isolated contexts with explicit APIs.

Solo developers

Content management is part of the Astro site, deployed and managed as one project.

Content editors

Create and edit content in the admin panel.

WordPress users

Migration path for content and plugins. Modern tooling, familiar concepts.

The following diagram shows how EmDash sits inside an Astro site, connecting the content engine, admin panel, and plugins to the data layer.

┌─────────────────────────────────────────────────────────────┐
│ Your Astro Site │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ EmDash Integration │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ │
│ │ │ Content │ │ Admin │ │ Plugins │ │ │
│ │ │ Engine │ │ Panel │ │ │ │ │
│ │ └─────────────┘ └─────────────┘ └──────────────┘ │ │
│ │ │ │
│ │ ┌───────────────────────────────────────────────────┐│ │
│ │ │ Data Layer ││ │
│ │ │Database (SQLite/libSQL/D1/Postgres) + media store ││ │
│ │ └───────────────────────────────────────────────────┘│ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Astro Framework │ │
│ │ Live Collections • Sessions • Middleware │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

These are the key concepts used throughout the documentation:

  • Collections — Content types defined in the database (posts, pages, products, etc.)
  • Fields — The properties of a collection (title, content, price, etc.)
  • Taxonomies — Classification systems (categories, tags, custom taxonomies)
  • Menus — Admin-editable navigation structures
  • Widget Areas — Configurable content regions for sidebars and footers
  • Plugins — Extensions that add functionality via hooks, storage, and UI