Plugins veröffentlichen

Auf dieser Seite

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.json mit dem Export "." auf Ihren Plugin-Einstieg haben
  • definePlugin() mit einer eindeutigen id und gültiger semver-version verwenden
  • Seine capabilities deklarieren (welche APIs es braucht)

Bundle-Format

Veröffentlichte Plugins werden als .tar.gz-Tarballs verteilt mit:

DateiErforderlichBeschreibung
manifest.jsonJaPlugin-Metadaten aus definePlugin() extrahiert
backend.jsNeinGebundener Sandbox-Code (eigenständiges ES-Modul)
admin.jsNeinGebundener Admin-UI-Code
README.mdNeinPlugin-Dokumentation
icon.pngNeinPlugin-Icon (256x256 PNG)
screenshots/NeinBis 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:

  1. Ihre package.json lesen, um Entrypoints zu finden
  2. Den Haupteintrag mit tsdown bauen, um das Manifest zu extrahieren
  3. backend.js bündeln (minifiziert, tree-shaken, eigenständig)
  4. admin.js bündeln, falls ein Export "./admin" existiert
  5. Assets sammeln (README, Icon, Screenshots)
  6. Das Bundle validieren (Größenlimits, keine Node.js-Builtins im Backend)
  7. {id}-{version}.tar.gz nach dist/ 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" }
  }
}
ExportZweckWird gebaut als
"."Haupteintrag — zum Extrahieren des ManifestsExternals: emdash, @emdash-cms/*
"./sandbox"Backend-Code, der in der Sandbox läuftVollständig eigenständig (keine Externals)
"./admin"Admin-UI-KomponentenVollständig eigenständig

Fehlt "./sandbox", sucht der Befehl nach src/sandbox-entry.ts als Fallback.

Optionen

emdash plugin bundle [--dir <path>] [--outDir <path>]
FlagStandardBeschreibung
--dirAktuelles VerzeichnisPlugin-Quellverzeichnis
--outDir, -odistAusgabeverzeichnis für den Tarball

Validierung

Der Bundle-Befehl prüft:

  • Größenlimit — Gesamt-Bundle muss unter 5MB liegen
  • Keine Node.js-Builtinsbackend.js darf fs, path, child_process usw. nicht importieren (Sandbox-Code läuft in einer V8-Isolate, nicht in Node.js)
  • Icon-Maßeicon.png sollte 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:

  1. Die CLI öffnet den Browser auf GitHubs Device-Authorization-Seite
  2. Sie geben den im Terminal angezeigten Code ein
  3. GitHub stellt ein Access Token aus
  4. 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>]
FlagStandardBeschreibung
--tarballNeuester .tar.gz in dist/Expliziter Tarball-Pfad
--buildfalseVor dem Publish emdash plugin bundle ausführen
--dirAktuelles VerzeichnisPlugin-Verzeichnis (mit --build)
--registryhttps://marketplace.emdashcms.comMarketplace-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