Sobald Sie ein Plugin gebaut haben, können Sie es im EmDash Marketplace veröffentlichen, damit andere Sites es aus dem Admin-Dashboard installieren können.
Voraussetzungen
Vor der Veröffentlichung sollte Ihr Plugin:
- Eine gültige
package.jsonmit dem Export"."auf Ihren Plugin-Einstieg haben definePlugin()mit einer eindeutigenidund gültiger semver-versionverwenden- Seine
capabilitiesdeklarieren (welche APIs es braucht)
Bundle-Format
Veröffentlichte Plugins werden als .tar.gz-Tarballs verteilt mit:
| Datei | Erforderlich | Beschreibung |
|---|---|---|
manifest.json | Ja | Plugin-Metadaten aus definePlugin() extrahiert |
backend.js | Nein | Gebundener Sandbox-Code (eigenständiges ES-Modul) |
admin.js | Nein | Gebundener Admin-UI-Code |
README.md | Nein | Plugin-Dokumentation |
icon.png | Nein | Plugin-Icon (256x256 PNG) |
screenshots/ | Nein | Bis zu 5 Screenshots (PNG/JPEG, max. 1920x1080) |
Die manifest.json wird automatisch aus Ihrem definePlugin()-Aufruf erzeugt. Sie enthält Plugin-ID, Version, Capabilities, Hook-Namen, Route-Namen und Admin-Konfiguration — aber keinen ausführbaren Code.
Ein Bundle erstellen
Der Befehl emdash plugin bundle erzeugt einen Tarball aus Ihrem Plugin-Quellcode:
cd packages/plugins/my-plugin
emdash plugin bundle
Das bewirkt:
- Ihre
package.jsonlesen, um Entrypoints zu finden - Den Haupteintrag mit tsdown bauen, um das Manifest zu extrahieren
backend.jsbündeln (minifiziert, tree-shaken, eigenständig)admin.jsbündeln, falls ein Export"./admin"existiert- Assets sammeln (README, Icon, Screenshots)
- Das Bundle validieren (Größenlimits, keine Node.js-Builtins im Backend)
{id}-{version}.tar.gznachdist/schreiben
Entrypoint-Auflösung
Der Bundle-Befehl findet Ihren Code über package.json-Exports:
{
"exports": {
".": { "import": "./dist/index.mjs" },
"./sandbox": { "import": "./dist/sandbox-entry.mjs" },
"./admin": { "import": "./dist/admin.mjs" }
}
}
| Export | Zweck | Wird gebaut als |
|---|---|---|
"." | Haupteintrag — zum Extrahieren des Manifests | Externals: emdash, @emdash-cms/* |
"./sandbox" | Backend-Code, der in der Sandbox läuft | Vollständig eigenständig (keine Externals) |
"./admin" | Admin-UI-Komponenten | Vollständig eigenständig |
Fehlt "./sandbox", sucht der Befehl nach src/sandbox-entry.ts als Fallback.
Optionen
emdash plugin bundle [--dir <path>] [--outDir <path>]
| Flag | Standard | Beschreibung |
|---|---|---|
--dir | Aktuelles Verzeichnis | Plugin-Quellverzeichnis |
--outDir, -o | dist | Ausgabeverzeichnis für den Tarball |
Validierung
Der Bundle-Befehl prüft:
- Größenlimit — Gesamt-Bundle muss unter 5MB liegen
- Keine Node.js-Builtins —
backend.jsdarffs,path,child_processusw. nicht importieren (Sandbox-Code läuft in einer V8-Isolate, nicht in Node.js) - Icon-Maße —
icon.pngsollte 256x256 sein (warnt bei Abweichung, nimmt es trotzdem auf) - Screenshot-Limits — Max. 5 Screenshots, max. 1920x1080
Veröffentlichen
Der Befehl emdash plugin publish lädt Ihren Tarball in den Marketplace hoch:
emdash plugin publish
Damit wird der neueste .tar.gz in Ihrem dist/-Verzeichnis gefunden und hochgeladen. Sie können den Tarball auch explizit angeben oder vor dem Publish bauen:
# Expliziter Tarball-Pfad
emdash plugin publish --tarball dist/my-plugin-1.0.0.tar.gz
# Zuerst bauen, dann veröffentlichen
emdash plugin publish --build
Authentifizierung
Beim ersten Publish authentifiziert die CLI Sie über GitHub:
- Die CLI öffnet den Browser auf GitHubs Device-Authorization-Seite
- Sie geben den im Terminal angezeigten Code ein
- GitHub stellt ein Access Token aus
- Die CLI tauscht es gegen ein Marketplace-JWT (gespeichert in
~/.config/emdash/auth.json)
Das Token gilt 30 Tage. Nach Ablauf werden Sie beim nächsten Publish zur erneuten Authentifizierung aufgefordert.
Authentifizierung können Sie auch separat verwalten:
# Anmelden ohne zu veröffentlichen
emdash plugin login
# Abmelden (gespeichertes Token löschen)
emdash plugin logout
Erstmalige Registrierung
Existiert Ihre Plugin-ID im Marketplace noch nicht, registriert emdash plugin publish sie automatisch, bevor die erste Version hochgeladen wird.
Versionsanforderungen
Jede veröffentlichte Version muss eine höhere semver als die letzte haben. Sie können keine bestehende Version überschreiben oder erneut veröffentlichen.
Security Audit
Jede veröffentlichte Version durchläuft ein automatisiertes Security Audit. Der Marketplace scannt Ihre backend.js und admin.js auf:
- Daten-Exfiltrationsmuster
- Credential-Harvesting über Settings
- Obfuskierten Code
- Ressourcenmissbrauch (Crypto-Mining usw.)
- Verdächtige Netzwerkaktivität
Das Audit liefert ein Urteil pass, warn oder fail, das in der Marketplace-Listing des Plugins angezeigt wird. Je nach Enforcement-Level des Marketplaces kann ein fail die Veröffentlichung komplett blockieren.
Optionen
emdash plugin publish [--tarball <path>] [--build] [--dir <path>] [--registry <url>]
| Flag | Standard | Beschreibung |
|---|---|---|
--tarball | Neuester .tar.gz in dist/ | Expliziter Tarball-Pfad |
--build | false | Vor dem Publish emdash plugin bundle ausführen |
--dir | Aktuelles Verzeichnis | Plugin-Verzeichnis (mit --build) |
--registry | https://marketplace.emdashcms.com | Marketplace-URL |
Kompletter Workflow
Typischer Publish-Zyklus:
# 1. Änderungen vornehmen
# 2. Version in definePlugin() und package.json erhöhen
# 3. Bundle und Publish in einem Schritt
emdash plugin publish --build
Oder Sie prüfen das Bundle zuerst:
# Tarball bauen
emdash plugin bundle
# Ausgabe prüfen
tar tzf dist/my-plugin-1.1.0.tar.gz
# Veröffentlichen
emdash plugin publish