Skip to content

Plugins

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.

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.

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.

If you want to install or configure plugins on your site:

If you want to build a plugin: