creating-plugins

Create EmDash CMS plugins with hooks, storage, routes, and admin UI.

1|Updated Apr 25, 2026
One-click install
npx skills add https://github.com/rczamor/rz-emdash --skill creating-plugins-rczamor
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: creating-plugins
Source: https://github.com/rczamor/rz-emdash/tree/main/templates/marketing-cloudflare/.agents/skills/creating-plugins
Command: npx skills add https://github.com/rczamor/rz-emdash --skill creating-plugins-rczamor

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Building extensions for the EmDash CMS requires understanding its two plugin formats, capability system, sandboxed execution model, and split build-time/runtime architecture, which is easy to get wrong without guidance. ## Core Features & Use Cases - Plugin Scaffolding: Generate standard or native plugin packages with the correct descriptor factory, sandbox entrypoint, and package.json exports. - Feature Implementation: Add hooks, storage collections, KV state, API routes, Block Kit admin pages, and Portable Text block types with correct signatures and capabilities. - Use Case: You need a contact form submissions plugin for an EmDash site. Use this Skill to scaffold the descriptor, define a public submit route, declare indexed storage, and build a Block Kit admin table page. ## Quick Start Create an EmDash plugin named submissions with a public submit route, indexed storage, and an admin page listing recent entries.

Frequently Asked Questions about creating-plugins

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create an EmDash CMS plugin?▼

Create a TypeScript package with a descriptor factory in src/index.ts returning a PluginDescriptor, and a default definePlugin export in src/sandbox-entry.ts containing hooks and routes. Register the descriptor in astro.config.mjs under plugins or sandboxed.

What is the difference between standard and native EmDash plugins?▼

Standard plugins use definePlugin with hooks and routes, run in trusted or sandboxed mode, and can be published to the marketplace. Native plugins support React admin components and Portable Text blocks but only run in trusted mode.

Can sandboxed EmDash plugins use React admin components?▼

No. Sandboxed plugins must use Block Kit, a declarative JSON UI rendered by the host, so no plugin JavaScript runs in the browser. React admin components and Portable Text block types are native-plugin-only features.

How do EmDash plugin capabilities work?▼

Capabilities like read:content, network:fetch, and email:send are declared in the plugin descriptor and control which APIs appear on the plugin context. In sandboxed mode they are enforced at runtime; in trusted mode they document intent only.

Why can't my sandboxed EmDash plugin use Node.js APIs?▼

Sandboxed plugins run in isolated V8 isolates via Cloudflare Dynamic Worker Loader, where Node.js built-ins like fs and path are unavailable. Use Web APIs instead, and access the network only through ctx.http.fetch with declared allowedHosts.

How do I publish an EmDash plugin to the marketplace?▼

Run emdash plugin bundle to create a .tar.gz tarball, authenticate with emdash plugin login via GitHub, then run emdash plugin publish. Bundles are validated for size, Node.js built-ins, and pass an automated security audit.