CLI-Referenz

Auf dieser Seite

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

Installation

Die CLI ist im emdash-Paket enthalten:

npm install emdash

Führen Sie Befehle mit npx emdash aus oder fügen Sie Skripte zu package.json hinzu. Die Binärdatei ist der Kürze halber auch als em verfügbar.

Authentifizierung

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 — expliziter Token in der Befehlszeile
  2. EMDASH_TOKEN-Umgebungsvariable
  3. Gespeicherte Anmeldedaten aus ~/.config/emdash/auth.json (gespeichert durch emdash login)
  4. Dev-Bypass — wenn die URL localhost ist und kein Token verfügbar ist, erfolgt die Authentifizierung automatisch über den Dev-Bypass-Endpunkt

Die meisten Befehle akzeptieren die Flags --url (Standard http://localhost:4321) und --token. Wenn Sie einen lokalen Entwicklungsserver ansprechen, ist kein Token erforderlich.

Allgemeine Flags

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

FlagAliasBeschreibungStandard
--url-uURL der EmDash-Instanzhttp://localhost:4321
--token-tAuth-TokenAus Umgebung/gespeicherten Anmeldedaten
--jsonAusgabe als JSON (zum Pipen)Automatisch von TTY erkannt

Ausgabe

Wenn stdout ein TTY ist, gibt die CLI Ergebnisse mit consola formatiert aus. Beim Pipen oder wenn --json gesetzt ist, wird rohes JSON auf stdout ausgegeben — geeignet für jq oder andere Werkzeuge.

Befehle

emdash init

Initialisiert die Datenbank mit dem Kernschema und optionalen Vorlagendaten.

npx emdash init [options]

Optionen

OptionAliasBeschreibungStandard
--database-dPfad zur Datenbankdatei./data.db
--cwdArbeitsverzeichnisAktuelles Verzeichnis
--force-fSchema und Seed erneut ausführenfalse

Verhalten

  1. Liest die emdash-Konfiguration aus package.json
  2. Erstellt die Datenbankdatei bei Bedarf
  3. Führt Kernmigrationen aus (erstellt Systemtabellen)
  4. Führt die Vorlage schema.sql aus, falls konfiguriert
  5. Führt die Vorlage seed.sql aus, falls konfiguriert

emdash dev

Startet den Entwicklungsserver mit automatischer Datenbankeinrichtung.

npx emdash dev [options]

Optionen

OptionAliasBeschreibungStandard
--database-dPfad zur Datenbankdatei./data.db
--types-tTypen von Remote vor dem Start generierenfalse
--port-pPort des Entwicklungsservers4321
--cwdArbeitsverzeichnisAktuelles Verzeichnis

Beispiele

# Start dev server
npx emdash dev

# Custom port
npx emdash dev --port 3000

# Generate types from remote before starting
npx emdash dev --types

Verhalten

  1. Prüft auf ausstehende Datenbankmigrationen und führt diese aus
  2. Wenn --types gesetzt ist, werden TypeScript-Typen von einer Remote-Instanz generiert (URL aus der Umgebungsvariable EMDASH_URL oder emdash.url in package.json)
  3. Startet den Astro-Entwicklungsserver mit gesetztem EMDASH_DATABASE_URL

emdash types

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

npx emdash types [options]

Optionen

OptionAliasBeschreibungStandard
--url-uURL der EmDash-Instanzhttp://localhost:4321
--token-tAuth-TokenAus Umgebung/gespeicherten Anmeldedaten
--output-oAusgabepfad für Typen.emdash/types.ts
--cwdArbeitsverzeichnisAktuelles Verzeichnis

Beispiele

# Generate types from local dev server
npx emdash types

# Generate from remote instance
npx emdash types --url https://my-site.pages.dev

# Custom output path
npx emdash types --output src/types/emdash.ts

Verhalten

  1. Ruft das Schema von der Instanz ab
  2. Generiert TypeScript-Typdefinitionen
  3. Schreibt die Typen in die Ausgabedatei
  4. Schreibt schema.json als Referenz daneben

emdash login

Meldet Sie bei einer EmDash-Instanz über OAuth Device Flow an.

npx emdash login [options]

Optionen

OptionAliasBeschreibungStandard
--url-uURL der EmDash-Instanzhttp://localhost:4321

Verhalten

  1. Erkennt die Auth-Endpunkte der Instanz
  2. Wenn localhost und keine Authentifizierung konfiguriert ist, wird automatisch der Dev-Bypass verwendet
  3. Andernfalls wird der OAuth Device Flow gestartet — zeigt einen Code an und öffnet Ihren Browser
  4. Wartet auf die Autorisierung und speichert dann die Anmeldedaten in ~/.config/emdash/auth.json

Gespeicherte Anmeldedaten werden automatisch von allen nachfolgenden Befehlen verwendet, die dieselbe Instanz ansprechen.

emdash logout

Meldet Sie ab und entfernt gespeicherte Anmeldedaten.

npx emdash logout [options]

Optionen

OptionAliasBeschreibungStandard
--url-uURL der EmDash-Instanzhttp://localhost:4321

emdash whoami

Zeigt den aktuell authentifizierten Benutzer an.

npx emdash whoami [options]

Optionen

OptionAliasBeschreibungStandard
--url-uURL der EmDash-Instanzhttp://localhost:4321
--token-tAuth-TokenAus Umgebung/gespeicherten Anmeldedaten
--jsonAusgabe als JSON

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

emdash content

Verwaltet Inhaltselemente. Alle Unterbefehle verwenden die Remote-API über EmDashClient.

content list <collection>

npx emdash content list posts
npx emdash content list posts --status published --limit 10
OptionBeschreibung
--statusNach Status filtern
--limitMaximale Anzahl Elemente
--cursorPaginierungscursor

content get <collection> <id>

npx emdash content get posts 01ABC123
npx emdash content get posts 01ABC123 --raw
OptionBeschreibung
--rawRohes Portable Text zurückgeben (Markdown-Konvertierung überspringen)

Die Antwort enthält einen _rev-Token — übergeben Sie ihn an content update, um zu belegen, dass Sie den aktuellen Stand gesehen haben, den Sie überschreiben.

content create <collection>

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
--statusAnfangsstatus (draft, published)

Geben Sie Daten über genau eine der Optionen --data, --file oder --stdin an.

content update <collection> <id>

Wie ein Dateieditor, der erfordert, dass Sie vor dem Schreiben lesen — Sie müssen den _rev-Token aus einem vorherigen get angeben, um zu belegen, dass Sie den aktuellen Stand gesehen haben. Dies verhindert das versehentliche Überschreiben von Änderungen, die Sie nicht gesehen haben.

# 1. Read the item, note the _rev
npx emdash content get posts 01ABC123

# 2. Update with the _rev from step 1
npx emdash content update posts 01ABC123 \
  --rev MToyMDI2LTAyLTE0... \
  --data '{"title": "Updated"}'
OptionBeschreibung
--revRevisionstoken aus get (erforderlich)
--dataJSON-String mit Inhaltsdaten
--fileDaten aus einer JSON-Datei lesen

Wenn sich das Element seit Ihrem get geändert hat, gibt der Server 409 Conflict zurück — lesen Sie erneut und versuchen Sie es nochmals.

content delete <collection> <id>

npx emdash content delete posts 01ABC123

Löscht das Inhaltselement vorläufig (verschiebt es in den Papierkorb).

content publish <collection> <id>

npx emdash content publish posts 01ABC123

content unpublish <collection> <id>

npx emdash content unpublish posts 01ABC123

content schedule <collection> <id>

npx emdash content schedule posts 01ABC123 --at 2026-03-01T09:00:00Z
OptionBeschreibung
--atISO-8601-Datum und -Uhrzeit (erforderlich)

content restore <collection> <id>

npx emdash content restore posts 01ABC123

Stellt ein gelöschtes Inhaltselement wieder her.

emdash schema

Verwaltet Sammlungen und Felder.

schema list

npx emdash schema list

Listet alle Sammlungen auf.

schema get <collection>

npx emdash schema get posts

Zeigt eine Sammlung mit all ihren Feldern an.

schema create <collection>

npx emdash schema create articles --label Articles
npx emdash schema create articles --label Articles --label-singular Article --description "Blog articles"
OptionBeschreibung
--labelSammlungsbezeichnung (erforderlich)
--label-singularBezeichnung im Singular
--descriptionSammlungsbeschreibung

schema delete <collection>

npx emdash schema delete articles
npx emdash schema delete articles --force
OptionBeschreibung
--forceBestätigung überspringen

Fordert eine Bestätigung an, es sei denn, --force ist gesetzt.

schema add-field <collection> <field>

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 der Feld-Slug)
--requiredOb das Feld erforderlich ist

schema remove-field <collection> <field>

npx emdash schema remove-field posts featured

emdash media

Verwaltet Medienelemente.

media list

npx emdash media list
npx emdash media list --mime image/png --limit 20
OptionBeschreibung
--mimeNach MIME-Typ filtern
--limitAnzahl der Elemente
--cursorPaginierungscursor

media upload <file>

npx emdash media upload ./photo.jpg
npx emdash media upload ./photo.jpg --alt "A sunset" --caption "Taken in Bristol"
OptionBeschreibung
--altAlternativtext
--captionBeschriftungstext

media get <id>

npx emdash media get 01MEDIA123

media delete <id>

npx emdash media delete 01MEDIA123

Volltextsuche über alle Inhalte.

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

emdash taxonomy

Verwaltet Taxonomien und Begriffe.

taxonomy list

npx emdash taxonomy list

taxonomy terms <name>

npx emdash taxonomy terms categories
npx emdash taxonomy terms tags --limit 50
OptionAliasBeschreibung
--limit-lMaximale Begriffe
--cursorPaginierungscursor

taxonomy add-term <taxonomy>

npx emdash taxonomy add-term categories --name "Tech" --slug tech
npx emdash taxonomy add-term categories --name "Frontend" --parent 01PARENT123
OptionBeschreibung
--nameBegriffsbezeichnung (erforderlich)
--slugBegriffs-Slug (Standard ist der slugifizierte Name)
--parentÜbergeordneter Begriffs-ID (für hierarchische Taxonomien)

emdash menu

Verwaltet Navigationsmenüs.

npx emdash menu list
npx emdash menu get primary

Gibt das Menü mit all seinen Einträgen zurück.

emdash seed

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

npx emdash seed [path] [options]

Argumente

ArgumentBeschreibungStandard
pathPfad zur Seed-Datei.emdash/seed.json

Optionen

OptionAliasBeschreibungStandard
--database-dPfad zur Datenbankdatei./data.db
--cwdArbeitsverzeichnisAktuelles Verzeichnis
--validateNur validieren, nicht anwendenfalse
--no-contentBeispielinhalte ü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)

Auflösung der Seed-Datei

Der Befehl sucht in dieser Reihenfolge nach Seed-Dateien:

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

emdash export-seed

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

npx emdash export-seed [options] > seed.json

Optionen

OptionAliasBeschreibungStandard
--database-dPfad zur Datenbankdatei./data.db
--cwdArbeitsverzeichnisAktuelles Verzeichnis
--with-contentInhalte einschließen (alle oder kommagetrennte Sammlungen)
--no-prettyJSON-Formatierung deaktivierenfalse

Ausgabeformat

Die exportierte Seed-Datei enthält:

  • Einstellungen: Seitentitel, Tagline, 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
  • Inhalte (falls angefordert): Einträge mit $media-Referenzen und $ref:-Syntax für Portabilität

emdash auth secret

Generiert ein sicheres Authentifizierungsgeheimnis für Ihre Bereitstellung.

npx emdash auth secret

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

Generierte Dateien

.emdash/types.ts

Von emdash types generierte TypeScript-Schnittstellen:

// 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;
}

.emdash/schema.json

Roher Schema-Export für Werkzeuge:

{
  "version": "a1b2c3d4",
  "collections": [
    {
      "slug": "posts",
      "label": "Posts",
      "fields": [...]
    }
  ]
}

Umgebungsvariablen

VariableBeschreibung
EMDASH_DATABASE_URLDatenbank-URL (wird automatisch von dev gesetzt)
EMDASH_TOKENAuth-Token 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 Vorschau-Token-Generierung

Paketskripte

{
	"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"
	}
}

Exit-Codes

CodeBeschreibung
0Erfolg
1Fehler (Konfiguration, Netzwerk, Datenbank)