Publier des plugins

Sur cette page

Une fois votre plugin prêt, vous pouvez le publier sur l’EmDash Marketplace pour que d’autres sites l’installent depuis le tableau de bord d’administration.

Prérequis

Avant de publier, vérifiez que votre plugin :

  • Dispose d’un package.json valide avec l’export "." pointant vers l’entrée du plugin
  • Utilise definePlugin() avec un id unique et une version semver valide
  • Déclare ses capabilities (les API auxquelles il a besoin d’accéder)

Format du bundle

Les plugins publiés sont distribués sous forme d’archives .tar.gz contenant :

FichierObligatoireDescription
manifest.jsonOuiMétadonnées extraites de definePlugin()
backend.jsNonCode sandbox empaqueté (module ES autonome)
admin.jsNonCode UI admin empaqueté
README.mdNonDocumentation du plugin
icon.pngNonIcône du plugin (PNG 256x256)
screenshots/NonJusqu’à 5 captures (PNG/JPEG, max 1920x1080)

Le manifest.json est généré automatiquement à partir de votre appel definePlugin(). Il contient l’ID du plugin, la version, les capabilities, les noms de hooks et de routes et la configuration admin — mais aucun code exécutable.

Créer un bundle

La commande emdash plugin bundle produit une archive à partir des sources du plugin :

cd packages/plugins/my-plugin
emdash plugin bundle

Cela va :

  1. Lire votre package.json pour trouver les points d’entrée
  2. Compiler l’entrée principale avec tsdown pour extraire le manifest
  3. Empaqueter backend.js (minifié, tree-shaken, autonome)
  4. Empaqueter admin.js s’il existe un export "./admin"
  5. Collecter les assets (README, icône, captures)
  6. Valider le bundle (limites de taille, pas de builtins Node.js dans le backend)
  7. Écrire {id}-{version}.tar.gz dans dist/

Résolution des points d’entrée

La commande bundle trouve votre code via les exports de package.json :

{
  "exports": {
    ".": { "import": "./dist/index.mjs" },
    "./sandbox": { "import": "./dist/sandbox-entry.mjs" },
    "./admin": { "import": "./dist/admin.mjs" }
  }
}
ExportRôleConstruit comme
"."Entrée principale — pour extraire le manifestExternals : emdash, @emdash-cms/*
"./sandbox"Code backend exécuté dans le sandboxEntièrement autonome (sans externals)
"./admin"Composants UI adminEntièrement autonome

Si "./sandbox" est absent, la commande cherche src/sandbox-entry.ts en secours.

Options

emdash plugin bundle [--dir <path>] [--outDir <path>]
FlagDéfautDescription
--dirRépertoire courantRépertoire source du plugin
--outDir, -odistRépertoire de sortie de l’archive

Validation

La commande bundle vérifie :

  • Limite de taille — Le bundle total doit être inférieur à 5 Mo
  • Pas de builtins Node.jsbackend.js ne peut pas importer fs, path, child_process, etc. (le code sandbox s’exécute dans un isolate V8, pas dans Node.js)
  • Dimensions de l’icôneicon.png devrait être 256x256 (avertissement si incorrect, mais l’icône est incluse)
  • Limites des captures — Max 5 captures, max 1920x1080

Publication

La commande emdash plugin publish envoie votre archive sur le marketplace :

emdash plugin publish

Elle prendra le .tar.gz le plus récent dans dist/ et l’enverra. Vous pouvez aussi préciser l’archive ou compiler avant de publier :

# Chemin explicite de l’archive
emdash plugin publish --tarball dist/my-plugin-1.0.0.tar.gz

# Compiler puis publier
emdash plugin publish --build

Authentification

Lors du premier publish, la CLI vous authentifie via GitHub :

  1. La CLI ouvre le navigateur sur la page d’autorisation par appareil GitHub
  2. Vous saisissez le code affiché dans le terminal
  3. GitHub délivre un access token
  4. La CLI l’échange contre un JWT marketplace (stocké dans ~/.config/emdash/auth.json)

Le token est valable 30 jours. Après expiration, une nouvelle authentification sera demandée au prochain publish.

Vous pouvez aussi gérer l’authentification séparément :

# Se connecter sans publier
emdash plugin login

# Se déconnecter (effacer le token stocké)
emdash plugin logout

Première inscription

Si l’ID de votre plugin n’existe pas encore sur le marketplace, emdash plugin publish l’enregistre automatiquement avant d’uploader la première version.

Exigences de version

Chaque version publiée doit avoir un semver supérieur à la précédente. Vous ne pouvez pas écraser ni republier une version existante.

Audit de sécurité

Chaque version publiée passe un audit de sécurité automatisé. Le marketplace analyse backend.js et admin.js pour détecter :

  • Des schémas d’exfiltration de données
  • La collecte de credentials via les settings
  • Du code obfusqué
  • L’abus de ressources (crypto-mining, etc.)
  • Une activité réseau suspecte

L’audit produit un verdict pass, warn ou fail, affiché sur la fiche du plugin. Selon le niveau d’application du marketplace, un verdict fail peut bloquer entièrement la publication.

Options

emdash plugin publish [--tarball <path>] [--build] [--dir <path>] [--registry <url>]
FlagDéfautDescription
--tarballDernier .tar.gz dans dist/Chemin explicite de l’archive
--buildfalseExécuter emdash plugin bundle avant publication
--dirRépertoire courantRépertoire du plugin (avec --build)
--registryhttps://marketplace.emdashcms.comURL du marketplace

Workflow complet

Cycle de publication typique :

# 1. Faites vos modifications
# 2. Incrémentez la version dans definePlugin() et package.json
# 3. Empaqueter et publier en une étape
emdash plugin publish --build

Ou si vous préférez inspecter le bundle d’abord :

# Créer l’archive
emdash plugin bundle

# Vérifier la sortie
tar tzf dist/my-plugin-1.1.0.tar.gz

# Publier
emdash plugin publish