# EmDash

> Self-hosted open-source Astro CMS that runs on Node.js or Cloudflare, with a passkey admin, sandboxed plugins, REST API and a built-in MCP server.

- **Category:** Content Management
- **Licence:** MIT
- **Latest version:** @emdash-cms/plugin-test@0.2.10
- **Open source:** oss
- **Languages:** Typescript
- **Platforms:** Docker, Docker Compose, Node.js, NPM
- **Tags:** SQLite, Mcp, Cms, Blog, Headless Cms, Plugin System, Typescript, Docker, Cloudflare, Passkeys, Astro, Wordpress Migration, Emdash

## Description

EmDash is a content management system that attaches to Astro as an integration, so your frontend and your CMS end up in one TypeScript codebase with an admin screen, an HTTP API, logins, file uploads and an extension layer included. Editors and site owners design collections in a visual schema builder instead of writing code; every collection maps onto a genuine SQL table with its own typed fields, a CLI command emits TypeScript definitions taken from the live schema, and templates query entries while the page renders, so there is no rebuild step. The writing experience is a TipTap-based rich text surface storing structured Portable Text JSON, which keeps content independent of any single presentation target, and the workflow covers drafts, saved revisions, timed publication, preview links, SQLite full-text search and editing straight on the public page. Everyday CMS furniture is present too: a media library with direct browser uploads, menus, widget areas, categories and tags, page layouts, four permission levels for staff, and a guided importer that brings a WordPress site's articles, files and terms across. Plugins are authored in TypeScript through a define-style API with lifecycle hooks, settings, custom blocks, admin pages and routes; untrusted packages run quarantined, either as Worker isolates on Cloudflare or through a workerd child process on Node, and they are granted only the access they ask for once you sign off on it. Each install also serves a Model Context Protocol endpoint plus the same API and command line, so coding assistants can act with the access rights your human editors already have. Self-hosting means scaffolding a project, choosing SQLite, libSQL, Turso or Postgres to hold the model and content, local disk or any S3 bucket for media, and then running the built Astro server on port 4321 by default behind your proxy, inside a container you build from the documented Dockerfile, or on Cloudflare's platform, which remains the best-supported choice. Caveats: no ready-made EmDash image is published, the bundled plugins and plugin tooling have not reached 1.0 versioning, and the dashboard talks to public services for update notices and plugin discovery unless you switch those off.

## Links

- [Homepage](https://github.com/emdash-cms/emdash)
- [Website](https://emdashcms.com)
- [Demo](https://try.emdashcms.com)
- [Discord](https://discord.gg/YY9vBaQRYt)
- [Bluesky](https://bsky.app/profile/emdashcms.com)
- [X](https://x.com/EmDashCMS)
- [Plugin registry](https://plugins.emdashcms.com)
- [Blog](https://emdashcms.com/blog)
- [Documentation](https://docs.emdashcms.com)
- [GitHub repository](https://github.com/emdash-cms/emdash)

---
Source: https://selfhost.directory/project/emdash