Zum Inhalt springen

CLI-Referenz

Die EmDash CLI bietet Befehle zur Verwaltung einer EmDash CMS-Instanz – Datenbankeinrichtung, Typgenerierung, Inhalts-CRUD, Schemaverwaltung, Medien und mehr.

Die CLI ist im emdash-Paket enthalten:

Terminal-Fenster
npm install emdash

Führen Sie Befehle mit npx emdash aus oder ergänzen Sie passende Skripte in package.json. Das Binary ist außerdem als Kurzform em verfügbar.

Befehle, die mit einer laufenden EmDash-Instanz kommunizieren (alles außer init, seed, export-seed und auth secret), lösen die Authentifizierung in dieser Reihenfolge auf:

  1. --token Flag – explizites Token in der Befehlszeile
  2. EMDASH_TOKEN Umgebungsvariable
  3. Gespeicherte Anmeldedaten aus ~/.config/emdash/auth.json (gespeichert durch emdash login)
  4. Dev-Umgehung – wenn die URL localhost ist und kein Token verfügbar ist, authentifiziert automatisch über den Dev-Umgehungs-Endpunkt

Die meisten Befehle akzeptieren --url (Standard http://localhost:4321) und --token Flags. Bei einem lokalen Dev-Server wird kein Token benötigt.

Diese Flags sind bei allen Remote-Befehlen verfügbar:

FlagAliasBeschreibungStandard
--url-uEmDash-Instanz-URLhttp://localhost:4321
--token-tAuthentifizierungs-TokenAus Umgebung/gespeicherten Anmeldedaten
--jsonAusgabe als JSON (für Pipes)Automatisch von TTY erkannt

Wenn stdout ein TTY ist, gibt die CLI Ergebnisse mit consola formatiert aus. Bei Pipes oder wenn --json gesetzt ist, gibt sie rohes JSON an stdout aus – geeignet für jq oder andere Tools.

Datenbank mit Kern-Schema und optionalen Template-Daten initialisieren.

Terminal-Fenster
npx emdash init [options]
OptionAliasBeschreibungStandard
--database-dDatenbank-Dateipfad./data.db
--cwdArbeitsverzeichnisAktuelles Verzeichnis
--force-fSchema und Seed erneut ausführenfalse
  1. Liest emdash-Konfiguration aus package.json
  2. Erstellt die Datenbankdatei bei Bedarf
  3. Führt Kern-Migrationen aus (erstellt Systemtabellen)
  4. Führt Template schema.sql aus, falls konfiguriert
  5. Führt Template seed.sql aus, falls konfiguriert

Entwicklungsserver mit automatischer Datenbankeinrichtung starten.

Terminal-Fenster
npx emdash dev [options]
OptionAliasBeschreibungStandard
--database-dDatenbank-Dateipfad./data.db
--types-tGeneriere Typen von Remote-Instanz vor dem Startfalse
--port-pDev-Server-Port4321
--cwdArbeitsverzeichnisAktuelles Verzeichnis
Terminal-Fenster
# Start dev server
npx emdash dev
# Benutzerdefinierter Port
npx emdash dev --port 3000
# Generiere Typen von Remote-Instanz vor dem Start
npx emdash dev --types
  1. Prüft und führt ausstehende Datenbank-Migrationen aus
  2. Wenn --types gesetzt ist, generiert TypeScript-Typen von einer Remote-Instanz (URL aus EMDASH_URL Umgebung oder emdash.url in package.json)
  3. Startet Astro-Dev-Server mit gesetzter EMDASH_DATABASE_URL

Generiere TypeScript-Typen aus dem Schema einer laufenden EmDash-Instanz.

Terminal-Fenster
npx emdash types [options]
OptionAliasBeschreibungStandard
--url-uEmDash-Instanz-URLhttp://localhost:4321
--token-tAuthentifizierungs-TokenAus Umgebung/gespeicherten Anmeldedaten
--output-oAusgabepfad für Typen.emdash/types.ts
--cwdArbeitsverzeichnisAktuelles Verzeichnis
Terminal-Fenster
# Typen vom lokalen Entwicklungsserver generieren
npx emdash types
# Generiere von Remote-Instanz
npx emdash types --url https://my-site.pages.dev
# Benutzerdefinierter Ausgabepfad
npx emdash types --output src/types/emdash.ts
  1. Holt das Schema von der Instanz
  2. Generiert TypeScript-Typdefinitionen
  3. Schreibt Typen in die Ausgabedatei
  4. Schreibt schema.json daneben als Referenz

Bei einer EmDash-Instanz mit OAuth Device Flow anmelden.

Terminal-Fenster
npx emdash login [options]
OptionAliasBeschreibungStandard
--url-uEmDash-Instanz-URLhttp://localhost:4321
  1. Entdeckt Authentifizierungs-Endpunkte von der Instanz
  2. Wenn localhost und keine Auth konfiguriert, verwendet automatisch Dev-Umgehung
  3. Andernfalls startet OAuth Device Flow – zeigt einen Code an und öffnet Ihren Browser
  4. Fragt auf Autorisierung ab, speichert dann Anmeldedaten in ~/.config/emdash/auth.json

Gespeicherte Anmeldedaten werden automatisch von allen nachfolgenden Befehlen für dieselbe Instanz verwendet.

Abmelden und gespeicherte Anmeldedaten entfernen.

Terminal-Fenster
npx emdash logout [options]
OptionAliasBeschreibungStandard
--url-uEmDash-Instanz-URLhttp://localhost:4321

Zeigt den aktuell authentifizierten Benutzer an.

Terminal-Fenster
npx emdash whoami [options]
OptionAliasBeschreibungStandard
--url-uEmDash-Instanz-URLhttp://localhost:4321
--token-tAuthentifizierungs-TokenAus Umgebung/gespeicherten Anmeldedaten
--jsonAusgabe als JSON

Zeigt E-Mail, Name, Rolle, Authentifizierungsmethode und Instanz-URL an.

Inhaltselemente verwalten. Alle Unterbefehle nutzen die Remote-API über EmDashClient.

Terminal-Fenster
npx emdash content list posts
npx emdash content list posts --status published --limit 10
OptionBeschreibung
--statusNach Status filtern
--limitMaximale Elemente
--cursorPaginierungs-Cursor
Terminal-Fenster
npx emdash content get posts 01ABC123
npx emdash content get posts 01ABC123 --raw
OptionBeschreibung
--rawGibt rohen Portable Text zurück (überspringt Markdown-Konvertierung)

Die Antwort enthält ein _rev-Token — übergebe es an content update, um zu beweisen, dass du gesehen hast, was du überschreibst.

Terminal-Fenster
npx emdash content create posts --data '{"title": "Hello"}'
npx emdash content create posts --file post.json --slug hello-world
cat post.json | npx emdash content create posts --stdin
OptionBeschreibung
--dataJSON-String mit Inhaltsdaten
--fileDaten aus einer JSON-Datei lesen
--stdinDaten von stdin lesen
--slugInhalts-Slug
--statusInitialer Status (draft, published)

Stelle Daten über genau eine der Optionen --data, --file oder --stdin bereit.

Wie ein Dateieditor, der verlangt, dass du zuerst liest, bevor du schreibst — du musst das _rev-Token aus einem vorherigen get angeben, um zu beweisen, dass du den aktuellen Zustand gesehen hast. Dies verhindert das versehentliche Überschreiben von Änderungen, die du nicht gesehen hast.

Terminal-Fenster
# 1. Element lesen und `_rev` notieren
npx emdash content get posts 01ABC123
# 2. Update mit dem _rev aus Schritt 1
npx emdash content update posts 01ABC123 \
--rev MToyMDI2LTAyLTE0... \
--data '{"title": "Aktualisiert"}'
OptionBeschreibung
--revRevisions-Token von get (erforderlich)
--dataJSON-String mit Inhaltsdaten
--fileDaten aus einer JSON-Datei lesen

Wenn sich das Element seit Ihrem get geändert hat, antwortet der Server mit 409 Conflict. Lesen Sie den Eintrag erneut und versuchen Sie es noch einmal.

Terminal-Fenster
npx emdash content delete posts 01ABC123

Löscht das Inhaltselement weich (verschiebt es in den Papierkorb).

Terminal-Fenster
npx emdash content publish posts 01ABC123
Terminal-Fenster
npx emdash content unpublish posts 01ABC123
Terminal-Fenster
npx emdash content schedule posts 01ABC123 --at 2026-03-01T09:00:00Z
OptionBeschreibung
--atISO 8601 Datum/Uhrzeit (erforderlich)
Terminal-Fenster
npx emdash content restore posts 01ABC123

Stellt ein gelöschtes Inhaltselement wieder her.

Verwalte Sammlungen und Felder.

Terminal-Fenster
npx emdash schema list

Listet alle Sammlungen auf.

Terminal-Fenster
npx emdash schema get posts

Zeigt eine Sammlung mit allen ihren Feldern an.

Terminal-Fenster
npx emdash schema create articles --label Articles
npx emdash schema create articles --label Articles --label-singular Article --description "Blog articles"
OptionBeschreibung
--labelSammlungsbezeichnung (erforderlich)
--label-singularSingularbezeichnung
--descriptionSammlungsbeschreibung
Terminal-Fenster
npx emdash schema delete articles
npx emdash schema delete articles --force
OptionBeschreibung
--forceBestätigung überspringen

Fordert zur Bestätigung auf, es sei denn, --force ist gesetzt.

Terminal-Fenster
npx emdash schema add-field posts body --type portableText --label "Body Content"
npx emdash schema add-field posts featured --type boolean --required
OptionBeschreibung
--typeFeldtyp: string, text, number, integer, boolean, datetime, image, reference, portableText, json (erforderlich)
--labelFeldbezeichnung (Standard ist Feld-Slug)
--requiredOb das Feld erforderlich ist
Terminal-Fenster
npx emdash schema remove-field posts featured

Verwalte Medienelemente.

Terminal-Fenster
npx emdash media list
npx emdash media list --mime image/png --limit 20
OptionBeschreibung
--mimeNach MIME-Typ filtern
--limitAnzahl der Elemente
--cursorPaginierungs-Cursor
Terminal-Fenster
npx emdash media upload ./photo.jpg
npx emdash media upload ./photo.jpg --alt "A sunset" --caption "Taken in Bristol"
OptionBeschreibung
--altAlt-Text
--captionBildunterschrift
Terminal-Fenster
npx emdash media get 01MEDIA123
Terminal-Fenster
npx emdash media delete 01MEDIA123

Volltextsuche über Inhalte hinweg.

Terminal-Fenster
npx emdash search "hello world"
npx emdash search "hello" --collection posts --limit 5
OptionAliasBeschreibung
--collection-cNach Sammlung filtern
--limit-lMaximale Ergebnisse

Verwalte Taxonomien und Begriffe.

Terminal-Fenster
npx emdash taxonomy list
Terminal-Fenster
npx emdash taxonomy terms categories
npx emdash taxonomy terms tags --limit 50
OptionAliasBeschreibung
--limit-lMaximale Begriffe
--cursorPaginierungs-Cursor
Terminal-Fenster
npx emdash taxonomy add-term categories --name "Tech" --slug tech
npx emdash taxonomy add-term categories --name "Frontend" --parent 01PARENT123
OptionBeschreibung
--nameBegriffslabel (erforderlich)
--slugBegriffsslug (Standard ist slugifizierter Name)
--parentÜbergeordnete Begriff-ID (für hierarchische Taxonomien)

Verwalte Navigationsmenüs.

Terminal-Fenster
npx emdash menu list
Terminal-Fenster
npx emdash menu get primary

Gibt das Menü mit allen seinen Elementen zurück.

Wende eine Seed-Datei auf die Datenbank an. Dieser Befehl arbeitet direkt auf einer lokalen SQLite-Datei (kein laufender Server erforderlich).

Terminal-Fenster
npx emdash seed [path] [options]
ArgumentBeschreibungStandard
pathPfad zur Seed-Datei.emdash/seed.json
OptionAliasBeschreibungStandard
--database-dDatenbankdateipfad./data.db
--cwdArbeitsverzeichnisAktuelles Verzeichnis
--validateNur validieren, nicht anwendenfalse
--no-contentBeispielinhalt überspringenfalse
--on-conflictKonfliktbehandlung: skip, update, errorskip
--uploads-dirVerzeichnis für Medien-Uploads.emdash/uploads
--media-base-urlBasis-URL für Mediendateien/_emdash/api/media/file
--base-urlBasis-URL der Website (für absolute Medien-URLs)

Der Befehl sucht nach Seed-Dateien in dieser Reihenfolge:

  1. Positionsargument (falls angegeben)
  2. .emdash/seed.json (Konvention)
  3. Pfad aus dem package.json-Feld emdash.seed

Exportiert Datenbankschema und -inhalt als Seed-Datei. Arbeitet direkt mit einer lokalen SQLite-Datei.

Terminal-Fenster
npx emdash export-seed [options] > seed.json
OptionAliasBeschreibungStandard
--database-dDatenbankdateipfad./data.db
--cwdArbeitsverzeichnisAktuelles Verzeichnis
--with-contentInhalt einbeziehen (alle oder kommagetrennte Sammlungen)
--no-prettyJSON-Formatierung deaktivierenfalse

Die exportierte Seed-Datei enthält:

  • Einstellungen: Seitentitel, Slogan, Social-Media-Links
  • Sammlungen: Alle Sammlungsdefinitionen mit Feldern
  • Taxonomien: Taxonomiedefinitionen und Begriffe
  • Menüs: Navigationsmenüs mit Einträgen
  • Widget-Bereiche: Widget-Bereiche und Widgets
  • Inhalt (falls angefordert): Einträge mit $media-Referenzen und $ref:-Syntax für Portabilität

Generiert ein sicheres Authentifizierungsgeheimnis für Ihren Deployment.

Terminal-Fenster
npx emdash auth secret

Gibt ein zufälliges Geheimnis aus, das für EMDASH_AUTH_SECRET geeignet ist.

TypeScript-Schnittstellen, generiert von emdash types:

// Generated by EmDash CLI
// Do not edit manually - run `emdash types` to regenerate
import type { PortableTextBlock } from "emdash";
export interface Post {
id: string;
title: string;
content: PortableTextBlock[];
publishedAt: Date | null;
}

Roh-Schema-Export für Tooling:

{
"version": "a1b2c3d4",
"collections": [
{
"slug": "posts",
"label": "Posts",
"fields": [...]
}
]
}
VariableBeschreibung
EMDASH_DATABASE_URLDatenbank-URL (wird automatisch von dev gesetzt)
EMDASH_TOKENAuthentifizierungstoken für Remote-Operationen
EMDASH_URLStandard-Remote-URL für types und dev --types
EMDASH_AUTH_SECRETGeheimnis für Passkey-Authentifizierung
EMDASH_PREVIEW_SECRETGeheimnis für die Generierung von Vorschau-Tokens
{
"scripts": {
"dev": "emdash dev",
"init": "emdash init",
"types": "emdash types",
"seed": "emdash seed",
"export-seed": "emdash export-seed",
"db:reset": "rm -f data.db && emdash init"
}
}
CodeBeschreibung
0Erfolg
1Fehler (Konfiguration, Netzwerk, Datenbank)