CLI-Referenz
Die EmDash CLI bietet Befehle zur Verwaltung einer EmDash CMS-Instanz – Datenbankeinrichtung, Typgenerierung, Inhalts-CRUD, Schemaverwaltung, Medien und mehr.
Installation
Abschnitt betitelt „Installation“Die CLI ist im emdash-Paket enthalten:
npm install emdashFü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.
Authentifizierung
Abschnitt betitelt „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:
--tokenFlag – explizites Token in der BefehlszeileEMDASH_TOKENUmgebungsvariable- Gespeicherte Anmeldedaten aus
~/.config/emdash/auth.json(gespeichert durchemdash login) - 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.
Häufige Flags
Abschnitt betitelt „Häufige Flags“Diese Flags sind bei allen Remote-Befehlen verfügbar:
| Flag | Alias | Beschreibung | Standard |
|---|---|---|---|
--url | -u | EmDash-Instanz-URL | http://localhost:4321 |
--token | -t | Authentifizierungs-Token | Aus Umgebung/gespeicherten Anmeldedaten |
--json | Ausgabe als JSON (für Pipes) | Automatisch von TTY erkannt |
Ausgabe
Abschnitt betitelt „Ausgabe“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.
Befehle
Abschnitt betitelt „Befehle“emdash init
Abschnitt betitelt „emdash init“Datenbank mit Kern-Schema und optionalen Template-Daten initialisieren.
npx emdash init [options]Optionen
Abschnitt betitelt „Optionen“| Option | Alias | Beschreibung | Standard |
|---|---|---|---|
--database | -d | Datenbank-Dateipfad | ./data.db |
--cwd | Arbeitsverzeichnis | Aktuelles Verzeichnis | |
--force | -f | Schema und Seed erneut ausführen | false |
Verhalten
Abschnitt betitelt „Verhalten“- Liest
emdash-Konfiguration auspackage.json - Erstellt die Datenbankdatei bei Bedarf
- Führt Kern-Migrationen aus (erstellt Systemtabellen)
- Führt Template
schema.sqlaus, falls konfiguriert - Führt Template
seed.sqlaus, falls konfiguriert
emdash dev
Abschnitt betitelt „emdash dev“Entwicklungsserver mit automatischer Datenbankeinrichtung starten.
npx emdash dev [options]Optionen
Abschnitt betitelt „Optionen“| Option | Alias | Beschreibung | Standard |
|---|---|---|---|
--database | -d | Datenbank-Dateipfad | ./data.db |
--types | -t | Generiere Typen von Remote-Instanz vor dem Start | false |
--port | -p | Dev-Server-Port | 4321 |
--cwd | Arbeitsverzeichnis | Aktuelles Verzeichnis |
Beispiele
Abschnitt betitelt „Beispiele“# Start dev servernpx emdash dev
# Benutzerdefinierter Portnpx emdash dev --port 3000
# Generiere Typen von Remote-Instanz vor dem Startnpx emdash dev --typesVerhalten
Abschnitt betitelt „Verhalten“- Prüft und führt ausstehende Datenbank-Migrationen aus
- Wenn
--typesgesetzt ist, generiert TypeScript-Typen von einer Remote-Instanz (URL ausEMDASH_URLUmgebung oderemdash.urlinpackage.json) - Startet Astro-Dev-Server mit gesetzter
EMDASH_DATABASE_URL
emdash types
Abschnitt betitelt „emdash types“Generiere TypeScript-Typen aus dem Schema einer laufenden EmDash-Instanz.
npx emdash types [options]Optionen
Abschnitt betitelt „Optionen“| Option | Alias | Beschreibung | Standard |
|---|---|---|---|
--url | -u | EmDash-Instanz-URL | http://localhost:4321 |
--token | -t | Authentifizierungs-Token | Aus Umgebung/gespeicherten Anmeldedaten |
--output | -o | Ausgabepfad für Typen | .emdash/types.ts |
--cwd | Arbeitsverzeichnis | Aktuelles Verzeichnis |
Beispiele
Abschnitt betitelt „Beispiele“# Typen vom lokalen Entwicklungsserver generierennpx emdash types
# Generiere von Remote-Instanznpx emdash types --url https://my-site.pages.dev
# Benutzerdefinierter Ausgabepfadnpx emdash types --output src/types/emdash.tsVerhalten
Abschnitt betitelt „Verhalten“- Holt das Schema von der Instanz
- Generiert TypeScript-Typdefinitionen
- Schreibt Typen in die Ausgabedatei
- Schreibt
schema.jsondaneben als Referenz
emdash login
Abschnitt betitelt „emdash login“Bei einer EmDash-Instanz mit OAuth Device Flow anmelden.
npx emdash login [options]Optionen
Abschnitt betitelt „Optionen“| Option | Alias | Beschreibung | Standard |
|---|---|---|---|
--url | -u | EmDash-Instanz-URL | http://localhost:4321 |
Verhalten
Abschnitt betitelt „Verhalten“- Entdeckt Authentifizierungs-Endpunkte von der Instanz
- Wenn localhost und keine Auth konfiguriert, verwendet automatisch Dev-Umgehung
- Andernfalls startet OAuth Device Flow – zeigt einen Code an und öffnet Ihren Browser
- 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.
emdash logout
Abschnitt betitelt „emdash logout“Abmelden und gespeicherte Anmeldedaten entfernen.
npx emdash logout [options]Optionen
Abschnitt betitelt „Optionen“| Option | Alias | Beschreibung | Standard |
|---|---|---|---|
--url | -u | EmDash-Instanz-URL | http://localhost:4321 |
emdash whoami
Abschnitt betitelt „emdash whoami“Zeigt den aktuell authentifizierten Benutzer an.
npx emdash whoami [options]Optionen
Abschnitt betitelt „Optionen“| Option | Alias | Beschreibung | Standard |
|---|---|---|---|
--url | -u | EmDash-Instanz-URL | http://localhost:4321 |
--token | -t | Authentifizierungs-Token | Aus Umgebung/gespeicherten Anmeldedaten |
--json | Ausgabe als JSON |
Zeigt E-Mail, Name, Rolle, Authentifizierungsmethode und Instanz-URL an.
emdash content
Abschnitt betitelt „emdash content“Inhaltselemente verwalten. Alle Unterbefehle nutzen die Remote-API über EmDashClient.
content list <collection>
Abschnitt betitelt „content list <collection>“npx emdash content list postsnpx emdash content list posts --status published --limit 10| Option | Beschreibung |
|---|---|
--status | Nach Status filtern |
--limit | Maximale Elemente |
--cursor | Paginierungs-Cursor |
content get <collection> <id>
Abschnitt betitelt „content get <collection> <id>“npx emdash content get posts 01ABC123npx emdash content get posts 01ABC123 --raw| Option | Beschreibung |
|---|---|
--raw | Gibt 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.
content create <collection>
Abschnitt betitelt „content create <collection>“npx emdash content create posts --data '{"title": "Hello"}'npx emdash content create posts --file post.json --slug hello-worldcat post.json | npx emdash content create posts --stdin| Option | Beschreibung |
|---|---|
--data | JSON-String mit Inhaltsdaten |
--file | Daten aus einer JSON-Datei lesen |
--stdin | Daten von stdin lesen |
--slug | Inhalts-Slug |
--status | Initialer Status (draft, published) |
Stelle Daten über genau eine der Optionen --data, --file oder --stdin bereit.
content update <collection> <id>
Abschnitt betitelt „content update <collection> <id>“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.
# 1. Element lesen und `_rev` notierennpx emdash content get posts 01ABC123
# 2. Update mit dem _rev aus Schritt 1npx emdash content update posts 01ABC123 \ --rev MToyMDI2LTAyLTE0... \ --data '{"title": "Aktualisiert"}'| Option | Beschreibung |
|---|---|
--rev | Revisions-Token von get (erforderlich) |
--data | JSON-String mit Inhaltsdaten |
--file | Daten 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.
content delete <collection> <id>
Abschnitt betitelt „content delete <collection> <id>“npx emdash content delete posts 01ABC123Löscht das Inhaltselement weich (verschiebt es in den Papierkorb).
content publish <collection> <id>
Abschnitt betitelt „content publish <collection> <id>“npx emdash content publish posts 01ABC123content unpublish <collection> <id>
Abschnitt betitelt „content unpublish <collection> <id>“npx emdash content unpublish posts 01ABC123content schedule <collection> <id>
Abschnitt betitelt „content schedule <collection> <id>“npx emdash content schedule posts 01ABC123 --at 2026-03-01T09:00:00Z| Option | Beschreibung |
|---|---|
--at | ISO 8601 Datum/Uhrzeit (erforderlich) |
content restore <collection> <id>
Abschnitt betitelt „content restore <collection> <id>“npx emdash content restore posts 01ABC123Stellt ein gelöschtes Inhaltselement wieder her.
emdash schema
Abschnitt betitelt „emdash schema“Verwalte Sammlungen und Felder.
schema list
Abschnitt betitelt „schema list“npx emdash schema listListet alle Sammlungen auf.
schema get <collection>
Abschnitt betitelt „schema get <collection>“npx emdash schema get postsZeigt eine Sammlung mit allen ihren Feldern an.
schema create <collection>
Abschnitt betitelt „schema create <collection>“npx emdash schema create articles --label Articlesnpx emdash schema create articles --label Articles --label-singular Article --description "Blog articles"| Option | Beschreibung |
|---|---|
--label | Sammlungsbezeichnung (erforderlich) |
--label-singular | Singularbezeichnung |
--description | Sammlungsbeschreibung |
schema delete <collection>
Abschnitt betitelt „schema delete <collection>“npx emdash schema delete articlesnpx emdash schema delete articles --force| Option | Beschreibung |
|---|---|
--force | Bestätigung überspringen |
Fordert zur Bestätigung auf, es sei denn, --force ist gesetzt.
schema add-field <collection> <field>
Abschnitt betitelt „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| Option | Beschreibung |
|---|---|
--type | Feldtyp: string, text, number, integer, boolean, datetime, image, reference, portableText, json (erforderlich) |
--label | Feldbezeichnung (Standard ist Feld-Slug) |
--required | Ob das Feld erforderlich ist |
schema remove-field <collection> <field>
Abschnitt betitelt „schema remove-field <collection> <field>“npx emdash schema remove-field posts featuredemdash media
Abschnitt betitelt „emdash media“Verwalte Medienelemente.
media list
Abschnitt betitelt „media list“npx emdash media listnpx emdash media list --mime image/png --limit 20| Option | Beschreibung |
|---|---|
--mime | Nach MIME-Typ filtern |
--limit | Anzahl der Elemente |
--cursor | Paginierungs-Cursor |
media upload <file>
Abschnitt betitelt „media upload <file>“npx emdash media upload ./photo.jpgnpx emdash media upload ./photo.jpg --alt "A sunset" --caption "Taken in Bristol"| Option | Beschreibung |
|---|---|
--alt | Alt-Text |
--caption | Bildunterschrift |
media get <id>
Abschnitt betitelt „media get <id>“npx emdash media get 01MEDIA123media delete <id>
Abschnitt betitelt „media delete <id>“npx emdash media delete 01MEDIA123emdash search
Abschnitt betitelt „emdash search“Volltextsuche über Inhalte hinweg.
npx emdash search "hello world"npx emdash search "hello" --collection posts --limit 5| Option | Alias | Beschreibung |
|---|---|---|
--collection | -c | Nach Sammlung filtern |
--limit | -l | Maximale Ergebnisse |
emdash taxonomy
Abschnitt betitelt „emdash taxonomy“Verwalte Taxonomien und Begriffe.
taxonomy list
Abschnitt betitelt „taxonomy list“npx emdash taxonomy listtaxonomy terms <name>
Abschnitt betitelt „taxonomy terms <name>“npx emdash taxonomy terms categoriesnpx emdash taxonomy terms tags --limit 50| Option | Alias | Beschreibung |
|---|---|---|
--limit | -l | Maximale Begriffe |
--cursor | Paginierungs-Cursor |
taxonomy add-term <taxonomy>
Abschnitt betitelt „taxonomy add-term <taxonomy>“npx emdash taxonomy add-term categories --name "Tech" --slug technpx emdash taxonomy add-term categories --name "Frontend" --parent 01PARENT123| Option | Beschreibung |
|---|---|
--name | Begriffslabel (erforderlich) |
--slug | Begriffsslug (Standard ist slugifizierter Name) |
--parent | Übergeordnete Begriff-ID (für hierarchische Taxonomien) |
emdash menu
Abschnitt betitelt „emdash menu“Verwalte Navigationsmenüs.
menu list
Abschnitt betitelt „menu list“npx emdash menu listmenu get <name>
Abschnitt betitelt „menu get <name>“npx emdash menu get primaryGibt das Menü mit allen seinen Elementen zurück.
emdash seed
Abschnitt betitelt „emdash seed“Wende eine Seed-Datei auf die Datenbank an. Dieser Befehl arbeitet direkt auf einer lokalen SQLite-Datei (kein laufender Server erforderlich).
npx emdash seed [path] [options]Argumente
Abschnitt betitelt „Argumente“| Argument | Beschreibung | Standard |
|---|---|---|
path | Pfad zur Seed-Datei | .emdash/seed.json |
Optionen
Abschnitt betitelt „Optionen“| Option | Alias | Beschreibung | Standard |
|---|---|---|---|
--database | -d | Datenbankdateipfad | ./data.db |
--cwd | Arbeitsverzeichnis | Aktuelles Verzeichnis | |
--validate | Nur validieren, nicht anwenden | false | |
--no-content | Beispielinhalt überspringen | false | |
--on-conflict | Konfliktbehandlung: skip, update, error | skip | |
--uploads-dir | Verzeichnis für Medien-Uploads | .emdash/uploads | |
--media-base-url | Basis-URL für Mediendateien | /_emdash/api/media/file | |
--base-url | Basis-URL der Website (für absolute Medien-URLs) |
Auflösung der Seed-Datei
Abschnitt betitelt „Auflösung der Seed-Datei“Der Befehl sucht nach Seed-Dateien in dieser Reihenfolge:
- Positionsargument (falls angegeben)
.emdash/seed.json(Konvention)- Pfad aus dem
package.json-Feldemdash.seed
emdash export-seed
Abschnitt betitelt „emdash export-seed“Exportiert Datenbankschema und -inhalt als Seed-Datei. Arbeitet direkt mit einer lokalen SQLite-Datei.
npx emdash export-seed [options] > seed.jsonOptionen
Abschnitt betitelt „Optionen“| Option | Alias | Beschreibung | Standard |
|---|---|---|---|
--database | -d | Datenbankdateipfad | ./data.db |
--cwd | Arbeitsverzeichnis | Aktuelles Verzeichnis | |
--with-content | Inhalt einbeziehen (alle oder kommagetrennte Sammlungen) | ||
--no-pretty | JSON-Formatierung deaktivieren | false |
Ausgabeformat
Abschnitt betitelt „Ausgabeformat“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
emdash auth secret
Abschnitt betitelt „emdash auth secret“Generiert ein sicheres Authentifizierungsgeheimnis für Ihren Deployment.
npx emdash auth secretGibt ein zufälliges Geheimnis aus, das für EMDASH_AUTH_SECRET geeignet ist.
Generierte Dateien
Abschnitt betitelt „Generierte Dateien“.emdash/types.ts
Abschnitt betitelt „.emdash/types.ts“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;}.emdash/schema.json
Abschnitt betitelt „.emdash/schema.json“Roh-Schema-Export für Tooling:
{ "version": "a1b2c3d4", "collections": [ { "slug": "posts", "label": "Posts", "fields": [...] } ]}Umgebungsvariablen
Abschnitt betitelt „Umgebungsvariablen“| Variable | Beschreibung |
|---|---|
EMDASH_DATABASE_URL | Datenbank-URL (wird automatisch von dev gesetzt) |
EMDASH_TOKEN | Authentifizierungstoken für Remote-Operationen |
EMDASH_URL | Standard-Remote-URL für types und dev --types |
EMDASH_AUTH_SECRET | Geheimnis für Passkey-Authentifizierung |
EMDASH_PREVIEW_SECRET | Geheimnis für die Generierung von Vorschau-Tokens |
Paket-Skripte
Abschnitt betitelt „Paket-Skripte“{ "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
Abschnitt betitelt „Exit-Codes“| Code | Beschreibung |
|---|---|
0 | Erfolg |
1 | Fehler (Konfiguration, Netzwerk, Datenbank) |