Kommandozeile (CLI)

Das Paket @entrydeck/cli bringt den Befehl entrydeck: anmelden, Inhaltstypen als JSON-Dateien versionieren, TypeScript-Typen erzeugen, Backups exportieren und importieren, Inhalte und Medien per Skript pflegen und Beispielstrukturen anlegen.

Stand: 19.10.2026

Auf dieser Seite

Neben dem Admin und der Delivery-API gibt es die Kommandozeile entrydeck aus dem Paket @entrydeck/cli. Sie spricht die Admin-API mit Ihrer Anmeldung und eignet sich für alles, was wiederholbar sein soll: Inhaltstypen in Git versionieren, Typen für das Frontend erzeugen, Sicherungen ziehen, Inhalte aus Dateien einspielen.

bash
npm install -g @entrydeck/cli        # oder: npx @entrydeck/cli …
entrydeck login --url https://entrydeck.app
entrydeck whoami
entrydeck schema pull --out schema/
entrydeck types --out src/types/entrydeck.d.ts

Jedes Kommando gibt Tabellen aus; --json liefert Rohdaten für Skripte, --verbose protokolliert die Requests (ohne Token), --help erklärt jedes Kommando. Exit-Codes: 0 ok · 1 Fehler · 2 Verwendung · 3 Anmeldung/Rechte · 4 nicht gefunden · 5 API · 6 Konflikt.

Anmeldung und Profile

Empfohlen: persönliches API-Token. Legen Sie im Admin unter *Einstellungen → API-Tokens* ein Token an — mit Namen, Ablauf (30, 90, 365 Tage oder nie) und optional auf einzelne Rechte beschränkt. Das Anlegen bestätigen Sie mit Ihrem Passwort oder einem 2FA-Code; der Klartext edk_… wird genau einmal angezeigt. Dann:

bash
entrydeck login --api-token edk_…          # oder: --api-token ohne Wert → Abfrage ohne Echo
ENTRYDECK_API_TOKEN=edk_… entrydeck whoami  # in CI ohne Profil

Die CLI speichert das Token in einem Profil (~/.config/entrydeck/config.json, Dateirechte 600). Ein API-Token ist unabhängig von Ihrer Browser-Sitzung, braucht keinen Refresh, wird mit Zeitpunkt und IP der letzten Nutzung geführt und lässt sich im Admin jederzeit einzeln widerrufen. Mit einem API-Token sind Passwort, Zwei-Faktor, Nutzerverwaltung und das Anlegen weiterer Tokens nicht erreichbar. Mehrere Umgebungen verwalten Sie über --profile, etwa --profile prod und --profile local; entrydeck config use <profil> setzt das Standardprofil.

Passwort-Login. Ohne --api-token fragt entrydeck login E-Mail und Passwort ab, bei aktiver Zwei-Faktor-Anmeldung zusätzlich den Code, und speichert Access- und Refresh-Token im Profil; abgelaufene Access-Tokens erneuert die CLI automatisch. Ist der Login der Instanz mit SmartCaptcha geschützt — auf entrydeck.app ist das der Fall —, lehnt der Server die Passwort-Anmeldung aus dem Terminal mit HTTP 422 ab; verwenden Sie dann ein API-Token.

Notlösung: Refresh-Token übernehmen. entrydeck login --token <wert> übernimmt das Refresh-Token Ihrer Browser-Sitzung (Entwicklerwerkzeuge → *Anwendung → Cookies* → cms_refresh). Zu beachten: Entrydeck führt je Nutzer genau ein Refresh-Token, das bei jeder Erneuerung rotiert. Sobald die CLI das Token übernimmt, ist die Browser-Sitzung beendet — und eine neue Browser-Anmeldung beendet die CLI-Sitzung. Deshalb nur, wenn kein API-Token möglich ist.

Nutzer eines Mandanten arbeiten automatisch in ihrem Mandanten. Super-Admins geben --tenant <id|slug> an oder hinterlegen den Mandanten mit entrydeck config set-tenant. Für CI-Umgebungen gibt es die Variablen ENTRYDECK_URL, ENTRYDECK_API_TOKEN, ENTRYDECK_TOKEN, ENTRYDECK_TENANT und ENTRYDECK_PROFILE.

Kommando Zweck
entrydeck login [--url] [--api-token] [--token] [--tenant] [--profile] anmelden (API-Token empfohlen), Profil speichern
entrydeck logout [--revoke] Zugang aus dem Profil entfernen; Refresh-Token optional serverseitig widerrufen (API-Tokens widerrufen Sie im Admin)
entrydeck whoami Nutzer, Mandant, Rollen
entrydeck tenants Mandanten (Super-Admin: alle)
entrydeck sites list Websites des Mandanten mit Site-Id, Sprachen, Domain
entrydeck config … Profile anzeigen, wechseln, Mandant oder URL setzen

Inhaltstypen als Dateien

bash
entrydeck schema pull [--out schema/]            # je Inhaltstyp eine Datei <slug>.json
entrydeck schema diff [--dir schema/]            # Unterschiede zum Server
entrydeck schema push [--dir schema/] [--dry-run] [--allow-delete]

pull schreibt die Inhaltstypen des Mandanten als stabil sortierte JSON-Dateien — feste Reihenfolge der Schlüssel, Felder mit name, type, label, required zuerst —, damit Änderungen in Git lesbar bleiben. diff zeigt neue Typen, geänderte Metadaten und hinzugefügte, geänderte oder entfernte Felder. push legt neue Typen an und ändert vorhandene; Felder, die lokal fehlen, bleiben auf dem Server erhalten und werden erst mit --allow-delete entfernt (dasselbe Flag archiviert Typen ohne Datei). --dry-run zeigt nur, was passieren würde.

json
{
  "slug": "blogbeitrag",
  "name": "Blogbeitrag",
  "groupName": "Blog",
  "icon": "newspaper",
  "sortOrder": 0,
  "status": "active",
  "searchSchema": null,
  "fieldsSchema": {
    "fields": [
      { "name": "titel", "type": "text", "label": "Titel", "required": true },
      { "name": "text", "type": "richtext", "label": "Text" }
    ]
  }
}

TypeScript-Typen für das Frontend

bash
entrydeck types [--out types/entrydeck.d.ts] [--website <id|slug|siteId>] [--no-literals]

Die CLI holt den API-Key der Website über die Admin-API, liest GET /delivery/schema und erzeugt mit der Logik von entrydeck-generate-types je Inhaltstyp ein …Data-Interface, Entry<…>-Aliasse und die Zuordnung EntrydeckTypes. Sie müssen den API-Key dafür nicht selbst heraussuchen. Bei einer einzigen Website entfällt --website; --admin baut das Schema aus den Inhaltstypen des Mandanten, --from schema.json arbeitet offline.

Export, Import und Sicherungen

bash
entrydeck export [--scope tenant|website] [--website <id|slug>] [--no-media] --out backup.zip
entrydeck import backup.zip [--mode merge|replace] [--dry-run] [--yes]
entrydeck backups list | create | download <id> | restore <id> | delete <id> | schedule [off|daily|weekly]

Das ZIP entspricht dem Backup-Modul des Admins (manifest.json plus eine JSON-Datei je Bereich, Medien unter media/). import zeigt zuerst den Plan als Tabelle — je Bereich, wie viele Zeilen neu angelegt, aktualisiert, wiederverwendet, gelöscht, archiviert oder übersprungen werden, dazu Warnungen und Umbenennungen — und fragt nach, bevor der Import als Hintergrund-Job startet; die CLI zeigt Schritt und Fortschritt bis zum Ende. merge ergänzt anhand von Slugs, replace ersetzt den Bestand. backups create legt eine Sicherung im Speicher des Mandanten an, restore spielt sie zurück (mit Plan und Rückfrage wie beim Import).

Inhalte und Medien per Skript

bash
entrydeck content list blogbeitrag --locale de --state published
entrydeck content get blogbeitrag hallo-welt > hallo-welt.json
entrydeck content push hallo-welt.json          # oder ein Verzeichnis mit JSON-Dateien
entrydeck media upload bild.jpg titel.png --folder blog

content get liefert einen Eintrag im Dateiformat von push: { "type", "state", "translations": { "de": { "slug", "data", "seo" } } } oder die Kurzform { "type", "locale", "slug", "data" } für eine Sprache. push findet vorhandene Einträge über Slug + Sprache (oder id), ersetzt ihre Übersetzungen und legt fehlende Einträge an — ideal, um Inhalte aus anderen Systemen oder generierte Texte einzuspielen. Medien- und Relationsfelder enthalten Ids; media upload gibt sie aus (bis zu 20 Dateien je Aufruf, Ordner über Id, Name oder Pfad).

Beispielstruktur anlegen

bash
entrydeck seed list
entrydeck seed blog [--locale de] [--dry-run]

seed legt Inhaltstypen aus den mitgelieferten Vorlagen an — blog etwa „Person“ und „Blogbeitrag“ mit einer Autorin und drei Beiträgen samt Platzhalter-Titelbildern, faq drei FAQ-Einträge, team drei Personen. Vorhandene Typen und Einträge werden wiederverwendet bzw. aktualisiert; der Befehl lässt sich gefahrlos wiederholen.

English summary

CLI. npm install -g @entrydeck/cli provides the entrydeck command. The recommended login is a personal API token created under *Settings → API tokens* in the admin (name, expiry, optional permission scopes; confirmed with password or 2FA code, shown once): entrydeck login --api-token edk_… or ENTRYDECK_API_TOKEN in CI. It is stored per profile in ~/.config/entrydeck/config.json (mode 600; several environments via --profile), needs no refresh, is independent of the browser session and can be revoked individually; password, two-factor, user management and token creation are blocked for API tokens. entrydeck login without a token authenticates with e-mail, password and (if enabled) a 2FA code, which SmartCaptcha-protected instances such as entrydeck.app reject from a terminal. As a last resort entrydeck login --token <value> takes the cms_refresh cookie of your browser session — each user has exactly one refresh token, so the browser session ends. Commands: whoami, tenants, sites list, schema pull|diff|push (one JSON file per content type, stable key order, never deletes fields without --allow-delete), types (TypeScript interfaces via the SDK's generate-types, API key fetched for you), export / import (backup ZIPs, plan table, job progress) and backups list|create|download|restore|delete|schedule, content list|get|push (upsert by slug + locale), media upload|list|folders, seed blog|faq|team. --json prints raw data, --verbose logs requests without tokens, exit codes are stable (0 ok, 2 usage, 3 auth, 4 not found, 5 API, 6 conflict).