---
title: Why EmDash?
description: Understand what problems EmDash solves and how it compares to other approaches.
---

import { Aside, Card, CardGrid } from "@astrojs/starlight/components";

EmDash is an Astro-native CMS that combines traditional CMS patterns with modern web development: a content editing interface, Astro framework integration, and flexible deployment options.

## What Makes EmDash Different

### Astro-Native Architecture

EmDash is built specifically for Astro, not adapted from a generic CMS. Content lives in the same deployment as your site, queried through Astro's Live Content Collections. No separate services, no API round-trips, no webhook synchronization.

### Familiar Content Model

If you've used WordPress, EmDash's concepts will feel familiar: collections (like post types), taxonomies, menus, widget areas, and a media library. The mental model transfers—the implementation uses modern tooling.

### Framework Integration

EmDash is purpose-built for Astro. This tight integration enables type-safe queries, component-level caching, and integrated preview.

## Core Capabilities

<CardGrid>
	<Card title="Single Deployment" icon="rocket">
		Content and frontend deploy together. One codebase, one deployment, one system to manage.
	</Card>
	<Card title="Type Safety" icon="approve-check">
		Schema lives in the database. TypeScript types flow from database to template with full
		autocomplete.
	</Card>
	<Card title="Live Updates" icon="star">
		Built on Astro's Live Content Collections. Content changes appear instantly—no rebuilds
		needed.
	</Card>
	<Card title="Cloud-Portable" icon="setting">
		Runs on Cloudflare Workers with D1 and R2, and also works with Node.js, SQLite, and any
		S3-compatible storage.
	</Card>
</CardGrid>

## How It Compares

Different CMS approaches suit different needs:

| Aspect              | Traditional CMS  | Headless CMS    | EmDash              |
| ------------------- | ---------------- | --------------- | --------------------- |
| **Architecture**    | Monolithic       | Decoupled       | Integrated with Astro |
| **Content editing** | Built-in admin   | Built-in admin  | Built-in admin        |
| **Frontend**        | Themes/templates | Bring your own  | Astro components      |
| **Deployment**      | Single server    | CMS + frontend  | Single deployment     |
| **Type safety**     | Runtime          | API types       | Full TypeScript       |
| **Content updates** | Immediate        | Webhook/rebuild | Immediate (SSR)       |
| **Plugin model**    | Same-process     | API extensions  | Sandboxed with hooks  |

## Cloudflare Deployment

EmDash runs on any platform with SQLite and S3-compatible storage. It also supports Cloudflare-specific features:

- **D1** — SQLite at the edge with automatic replication
- **R2** — S3-compatible storage with no egress fees
- **Workers** — Global deployment with fast cold starts

## Plugin Migration

EmDash provides tools to help migrate WordPress plugin functionality:

- **Concept mapping** — WordPress hooks, filters, and APIs map to EmDash equivalents
- **Migration guides** — Documentation for porting specific plugin patterns
- **AI-assisted porting** — Documentation structured to help AI tools generate EmDash plugins from WordPress plugin code

Complex plugins still need human review, but for straightforward plugins, the migration guides reduce porting effort.

## When to Use EmDash

**EmDash is designed for:**

- New Astro projects that need a CMS
- WordPress migrations where you want modern tooling
- Sites with content editors who shouldn't touch code
- Projects deploying to Cloudflare
- Sites where type safety and developer experience matter

**EmDash may not be right for:**

- Non-Astro projects (it's tightly coupled to Astro)
- E-commerce (WooCommerce-scale features are not yet available)
- Existing headless architectures you're happy with
- Projects requiring WordPress's specific plugin ecosystem

## Get Started

<CardGrid>
	<Card title="Quick Start" icon="rocket">
		[Create your first site](/getting-started/) in under 5 minutes.
	</Card>
	<Card title="Migration Guide" icon="right-arrow">
		[Migrate from WordPress](/migration/from-wordpress/) with content import and concept mapping.
	</Card>
</CardGrid>
