Plugins EmDash — les extensions officielles
7 plugins first-party disponibles dans le repo. L'écosystème tiers est encore embryonnaire — c'est le bon moment pour contribuer.
Comment fonctionne un plugin EmDash
Chaque plugin déclare ses capabilities dans un manifest au moment de l'installation. Il s'exécute dans un Dynamic Worker isolé — il ne peut accéder qu'à ce qu'il a déclaré, rien d'autre. Exemple réel tiré du plugin forms :
// plugin.manifest.ts
export default definePlugin({
name: '@emdash-cms/plugin-forms',
capabilities: ['email:send', 'write:media', 'network:fetch'],
// ...
}); ⚠️ Note technique : les plugins sandboxés requièrent un compte Cloudflare payant (à partir de 5$/mois) pour accéder aux Dynamic Workers. Sans compte payant, les plugins peuvent être désactivés en mode "safe mode" (exécution in-process).
Les 7 plugins officiels
Maintenus dans le repo principal. Stables pour les fonctionnalités core, en évolution pour les intégrations avancées.
forms
@emdash-cms/plugin-forms Créez des formulaires dans l'admin, intégrez-les via Portable Text, collectez des soumissions, envoyez des notifications, exportez les données. Anti-spam : honeypot ou Cloudflare Turnstile configurable. Widget admin avec aperçu des soumissions récentes.
ai-moderation
@emdash-cms/plugin-ai-moderation Modération de contenu par IA. Filtrage automatique de commentaires soumis avant publication.
atproto
@emdash-cms/plugin-atproto Intégration AT Protocol / Bluesky. Crossposter automatiquement sur Bluesky à chaque publication de contenu.
audit-log
@emdash-cms/plugin-audit-log Journal d'audit des actions sur le CMS. Traçabilité complète de toutes les modifications : qui a fait quoi, quand.
color
@emdash-cms/plugin-color Gestion de palettes de couleurs. Ajoute un champ couleur natif dans les collections de contenu.
embeds
@emdash-cms/plugin-embeds Embeds externes via oEmbed : YouTube, Twitter/X et autres services dans le contenu Portable Text.
webhook-notifier
@emdash-cms/plugin-webhook-notifier Notifications webhook sur événements CMS : publication, mise à jour, suppression. Déclenche n'importe quel endpoint HTTP.
🔧 Créer un plugin EmDash
Un plugin EmDash est un package TypeScript standard. Il déclare ses capabilities, ses hooks et ses routes dans un objet definePlugin(). Pas de magie, pas d'accès global — juste une interface claire.
definePlugin()
L'API centrale. Déclarez le nom, les capabilities, les hooks sur les événements CMS et les routes d'administration. → Tout ce que le plugin peut faire est déclaré à cet endroit, nulle part ailleurs.
Capabilities comme contrat
Chaque capability donne accès à une API spécifique : email:send, network:fetch, content:write… Rien d'autre n'est accessible. → Le modèle de confiance est explicite et auditable.
Hooks sur événements
Réagissez aux événements CMS : onPublish, onUpdate, onDelete, onFormSubmit… → Les plugins s'intègrent sans modifier le core.
Voir le code d'un plugin
Le code source des 7 plugins officiels est disponible dans le repo. La meilleure documentation, c'est le code.