5 EmDash Plugins You Can Build With Zero Coding (Using AI Prompts)

Discover how to build five powerful EmDash CMS plugins using only AI prompts, with no coding required.

By Central
EmDash CMS plugin development with AI prompts enables non-coders to create functional plugins quickly.
Highlights
  • EmDash plugins run in sandboxed V8 isolates, ensuring security by default.
  • AI agents like Claude can generate a working EmDash plugin from a single prompt in seconds.
  • The auto-alt-text plugin uses an AI vision API to generate alt text for uploaded images automatically.

EmDash CMS from Cloudflare changes how plugins work. Every plugin runs in a sandboxed V8 isolate — it can’t touch your database, files, or network unless you explicitly allow it. That security model is the headline. But there’s a quieter revolution here: you can build plugins without writing a single line of code yourself. Give the right prompt to an AI coding agent — Claude, Cursor, or GitHub Copilot — and it generates a working plugin in seconds.

The platform uses TypeScript and Astro. The plugin API is minimal. A plugin declares its capabilities in a manifest, registers hooks, and the runtime enforces the boundaries. That makes it ideal for AI generation. The scope is narrow, the pattern is predictable, and the output is safe by default.

The AI prompt approach works because the EmDash plugin API is deliberately constrained.

Below are five plugins you can build right now. Each includes the exact prompt you’d feed an agent, the capability manifest it needs, and the key insight that makes it work.

1. Email Notification on Publish

The simplest plugin to start with. When a post moves to “published,” send an email to the site admin. WordPress needs a plugin like Post SMTP or a third-party service. EmDash handles it with a single hook and a sendEmailcodecodecodecode capability.

Prompt for the AI agent:

Generate an EmDash CMS plugin. Use definePlugin from the @mdash/plugins library. The plugin ID is email-on-publish, version 0.0.1. Capabilities: read:content, send:email. Register a hook on post:publish. Inside the hook, get the published post’s title and author email from the context. Then send an email to the admin address (hardcoded as [email protected]). Subject line: “New post published: [title]”. Body: “A new post by [author] has been published.” Use the email.send() method from the context.

blockquoteblockquoteblockquoteblockquote

Key insight: The agent writes the entire plugin — about 20 lines. The sandbox ensures the plugin can never read passwords or delete content, even if the AI introduces a bug. The send:emailcodecodecodecode capability is the only external access it gets.

2. Auto-Generate Alt Text for Images

Every uploaded image needs descriptive alt text. Manually adding it for dozens of images is tedious. A plugin can hook into the media:uploadcodecodecodecode event, call an AI vision API, and write the alt text back to the media record.

Prompt for the AI agent:

Create an EmDash plugin with ID auto-alt-text. Capabilities: read:media, write:media, fetch:url. Hook on media:upload. When a new image is uploaded, get its public URL from the context. Use the fetch capability to send that URL to the OpenAI API endpoint https://api.openai.com/v1/chat/completions with a prompt “Describe this image in 10 words or less.” Parse the response and update the media record’s alt field using context.media.update(id, { alt: description }). Store the API key in a plugin secret.

blockquoteblockquoteblockquoteblockquote

Key insight: The plugin declares fetch:urlcodecodecodecode to access an external API. That’s a deliberate permission — the sandbox blocks any other network traffic. The plugin cannot exfiltrate your database or call unknown endpoints. This is the pattern for any AI-powered feature.

3. Scheduled Content Expiry

WordPress has no built-in way to unpublish content after a set date. You need a plugin or cron job. EmDash plugins can use setIntervalcodecodecodecode inside a worker — but workers are ephemeral. The better approach hooks into a periodic system event.

Prompt for the AI agent:

Build an EmDash plugin content-expiry. Capabilities: read:content, write:content. Register a hook on system:tick (fires every 5 minutes). On each tick, query all posts where a custom field expiry_date is set and is in the past. For each such post, change its status to draft and log the action. Add a UI field in the post editor sidebar that allows setting the expiry date as a datetime picker. Use the fields.register helper to add the field.

blockquoteblockquoteblockquoteblockquote

Key insight: The plugin uses a system tick — not a cron job — because EmDash runs on serverless infrastructure. The hook fires on every instance that’s active, but the plugin’s sandbox prevents it from interfering with other instances. The custom field is defined in code, not in the database, so it survives migrations.

4. Content Sitemap for Custom Post Types

EmDash ships with SEO fields and a default sitemap, but only for pages and posts. If you create a custom content type (say “Projects” or “Reviews”), the sitemap ignores it. This plugin extends the sitemap to include all registered content types.

Prompt for the AI agent:

Write an EmDash plugin custom-sitemap. Capabilities: read:content, read:content-types. Hook on sitemap:generate. Inside the hook, iterate over all content types using context.contentTypes.list(). For each type, fetch all published items. Append each item’s URL (using the slug and the content type’s URL pattern) to the sitemap array returned by the hook. Ensure the output is valid XML.

blockquoteblockquoteblockquoteblockquote

Key insight: The plugin reads the content type registry — a resource that WordPress plugins can’t access natively without custom tables. EmDash exposes it through the context API. The agent generates the loop and XML formatting automatically. No manual schema definition needed.

5. Webhook Relay to External Services

Businesses often need to forward new content to Slack, Discord, or a custom API. A webhook plugin listens for publish events and sends a JSON payload to a configurable URL.

Prompt for the AI agent:

Develop an EmDash plugin webhook-relay. Capabilities: read:content, fetch:url. Hook on post:publish. Get the post title, URL, and excerpt. Build a JSON payload. Send a POST request to a URL stored in a plugin setting (default: https://hooks.slack.com/services/...). Use context.settings.get('webhook_url') to load the URL. Return a success or failure message to the event log.

blockquoteblockquoteblockquoteblockquote

Key insight: The agent creates a settings page automatically if you include context.settings.registercodecodecodecode in the prompt. The plugin never sees your Slack token — it’s stored in Cloudflare’s encrypted key-value store. The fetch:urlcodecodecodecode capability limits it to exactly one domain.

Closing: The Real Power Is Composition

These five plugins are standalone. But EmDash’s architecture allows them to work together. The auto-alt-text plugin and the webhook relay can share the same fetch:urlcodecodecodecode capability without conflict. The content expiry plugin can trigger the email notification plugin through a shared event. And because every plugin is sandboxed, you can install all five without worrying about one breaking another.

The AI prompt approach works because the EmDash plugin API is deliberately constrained. Each plugin has a single purpose, a clear capability boundary, and a predictable lifecycle. That makes it trivial for an agent to generate correct code — and impossible for that code to escalate privileges. Beginners get a working plugin in minutes. Experienced developers get a platform where AI-generated code is safe to deploy without human review.

The next frontier? Point an MCP agent at your EmDash instance and say: “Build me a plugin that syncs new posts to my Notion database.” The agent reads the skills file, writes the plugin, and deploys it. That’s not a demo. That’s the product.

Questions answered
  • What is EmDash CMS?EmDash CMS is a platform from Cloudflare that allows plugins to run in sandboxed V8 isolates for security.
  • How can you build EmDash plugins without coding?You can use AI coding agents like Claude or GitHub Copilot with specific prompts to generate plugins automatically.
  • What capabilities does the email notification plugin require?The email notification plugin needs read:content and send:email capabilities to send emails on post publish.
Share This Article