Plugins extend EmDash through a defined extension surface. They can react to content lifecycle events, store their own data, expose settings to administrators, add pages to the admin panel, and serve API routes.
What plugins can do
React to events
Run code on content saves, media uploads, comment moderation, scheduled tasks, and plugin lifecycle events.
Store data
Persist plugin-specific records in indexed collections, plus a per-plugin key-value store for settings and state.
Add admin pages
Contribute pages and dashboard widgets to the admin panel, with auto-generated settings forms.
Serve API routes
Expose endpoints under /_emdash/api/plugins/<id>/<route> for the admin UI or external integrations.
Call external APIs
Make HTTP requests with declared host allowlists.
Send email
Send transactional email through whichever provider is configured.
Two kinds of plugins
EmDash plugins come in two formats:
- Sandboxed plugins run in an isolated runtime managed by a configurable sandbox runner. They can be installed from the marketplace with one click, are subject to capability and resource enforcement, and reach only the APIs they declare. This is the recommended choice for most plugins.
- Native plugins run in the same process as your Astro site. They have full access to the runtime, can ship React admin pages and Portable Text rendering components, and inject HTML into public pages. They install via a code change plus a deploy, and run from npm rather than the marketplace.
If you’re installing a plugin someone else built, you almost always want sandboxed. If you’re building one yourself, see Choosing a plugin format.
For site operators
If you want to install or configure plugins on your site:
Installing plugins
Install from the marketplace, enable, configure settings.
For plugin authors
If you want to build a plugin: