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.jsonvalide avec l’export"."pointant vers l’entrée du plugin - Utilise
definePlugin()avec unidunique et uneversionsemver 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 :
| Fichier | Obligatoire | Description |
|---|---|---|
manifest.json | Oui | Métadonnées extraites de definePlugin() |
backend.js | Non | Code sandbox empaqueté (module ES autonome) |
admin.js | Non | Code UI admin empaqueté |
README.md | Non | Documentation du plugin |
icon.png | Non | Icône du plugin (PNG 256x256) |
screenshots/ | Non | Jusqu’à 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 :
- Lire votre
package.jsonpour trouver les points d’entrée - Compiler l’entrée principale avec tsdown pour extraire le manifest
- Empaqueter
backend.js(minifié, tree-shaken, autonome) - Empaqueter
admin.jss’il existe un export"./admin" - Collecter les assets (README, icône, captures)
- Valider le bundle (limites de taille, pas de builtins Node.js dans le backend)
- Écrire
{id}-{version}.tar.gzdansdist/
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" }
}
}
| Export | Rôle | Construit comme |
|---|---|---|
"." | Entrée principale — pour extraire le manifest | Externals : emdash, @emdash-cms/* |
"./sandbox" | Code backend exécuté dans le sandbox | Entièrement autonome (sans externals) |
"./admin" | Composants UI admin | Entièrement autonome |
Si "./sandbox" est absent, la commande cherche src/sandbox-entry.ts en secours.
Options
emdash plugin bundle [--dir <path>] [--outDir <path>]
| Flag | Défaut | Description |
|---|---|---|
--dir | Répertoire courant | Répertoire source du plugin |
--outDir, -o | dist | Ré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.js —
backend.jsne peut pas importerfs,path,child_process, etc. (le code sandbox s’exécute dans un isolate V8, pas dans Node.js) - Dimensions de l’icône —
icon.pngdevrait ê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 :
- La CLI ouvre le navigateur sur la page d’autorisation par appareil GitHub
- Vous saisissez le code affiché dans le terminal
- GitHub délivre un access token
- 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>]
| Flag | Défaut | Description |
|---|---|---|
--tarball | Dernier .tar.gz dans dist/ | Chemin explicite de l’archive |
--build | false | Exécuter emdash plugin bundle avant publication |
--dir | Répertoire courant | Répertoire du plugin (avec --build) |
--registry | https://marketplace.emdashcms.com | URL 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