Référence CLI

Sur cette page

Le CLI EmDash fournit des commandes pour gérer une instance EmDash CMS — configuration de la base de données, génération de types, CRUD de contenu, gestion du schéma, médias, et plus encore.

Installation

Le CLI est inclus dans le paquet emdash :

npm install emdash

Exécutez les commandes avec npx emdash ou ajoutez des scripts dans package.json. Le binaire est aussi disponible sous le nom em pour plus de concision.

Authentification

Les commandes qui communiquent avec une instance EmDash en cours d’exécution (tout sauf init, seed, export-seed et auth secret) résolvent l’authentification dans cet ordre :

  1. Flag --token — jeton explicite sur la ligne de commande
  2. Variable d’environnement EMDASH_TOKEN
  3. Identifiants stockés depuis ~/.config/emdash/auth.json (sauvegardés par emdash login)
  4. Bypass développement — si l’URL est localhost et qu’aucun jeton n’est disponible, s’authentifie automatiquement via le point de terminaison de bypass dev

La plupart des commandes acceptent les flags --url (défaut http://localhost:4321) et --token. Pour cibler un serveur de développement local, aucun jeton n’est nécessaire.

Flags communs

Ces flags sont disponibles sur toutes les commandes distantes :

FlagAliasDescriptionDéfaut
--url-uURL de l’instance EmDashhttp://localhost:4321
--token-tJeton d’authentificationDepuis env/identifiants stockés
--jsonSortie au format JSON (pour le piping)Auto-détecté depuis TTY

Sortie

Lorsque stdout est un TTY, le CLI formate les résultats avec consola. Lorsque la sortie est redirigée ou lorsque --json est défini, il produit du JSON brut sur stdout — adapté à jq ou d’autres outils.

Commandes

emdash init

Initialise la base de données avec le schéma principal et les données de modèle optionnelles.

npx emdash init [options]

Options

OptionAliasDescriptionDéfaut
--database-dChemin du fichier de base./data.db
--cwdRépertoire de travailRépertoire courant
--force-fRelancer le schéma et seedfalse

Comportement

  1. Lit la configuration emdash depuis package.json
  2. Crée le fichier de base de données si nécessaire
  3. Exécute les migrations principales (crée les tables système)
  4. Exécute le schema.sql du modèle si configuré
  5. Exécute le seed.sql du modèle si configuré

emdash dev

Démarre le serveur de développement avec configuration automatique de la base de données.

npx emdash dev [options]

Options

OptionAliasDescriptionDéfaut
--database-dChemin du fichier de base./data.db
--types-tGénérer les types depuis le distant avant le démarragefalse
--port-pPort du serveur de développement4321
--cwdRépertoire de travailRépertoire courant

Exemples

# Démarrer le serveur de développement
npx emdash dev

# Port personnalisé
npx emdash dev --port 3000

# Générer les types depuis le distant avant le démarrage
npx emdash dev --types

Comportement

  1. Vérifie et exécute les migrations de base en attente
  2. Si --types est défini, génère les types TypeScript depuis une instance distante (URL depuis la variable EMDASH_URL ou emdash.url dans package.json)
  3. Démarre le serveur de développement Astro avec EMDASH_DATABASE_URL défini

emdash types

Génère les types TypeScript depuis le schéma d’une instance EmDash en cours d’exécution.

npx emdash types [options]

Options

OptionAliasDescriptionDéfaut
--url-uURL de l’instance EmDashhttp://localhost:4321
--token-tJeton d’authentificationDepuis env/identifiants
--output-oChemin de sortie des types.emdash/types.ts
--cwdRépertoire de travailRépertoire courant

Exemples

# Générer les types depuis le serveur de développement local
npx emdash types

# Générer depuis une instance distante
npx emdash types --url https://my-site.pages.dev

# Chemin de sortie personnalisé
npx emdash types --output src/types/emdash.ts

Comportement

  1. Récupère le schéma depuis l’instance
  2. Génère les définitions de types TypeScript
  3. Écrit les types dans le fichier de sortie
  4. Écrit schema.json à côté pour référence

emdash login

Connexion à une instance EmDash via le flux OAuth Device.

npx emdash login [options]

Options

OptionAliasDescriptionDéfaut
--url-uURL de l’instance EmDashhttp://localhost:4321

Comportement

  1. Découvre les points de terminaison d’authentification depuis l’instance
  2. Si localhost et pas d’authentification configurée, utilise automatiquement le bypass dev
  3. Sinon, initie le flux OAuth Device — affiche un code et ouvre votre navigateur
  4. Attend l’autorisation, puis sauvegarde les identifiants dans ~/.config/emdash/auth.json

Les identifiants sauvegardés sont utilisés automatiquement par toutes les commandes suivantes ciblant la même instance.

emdash logout

Déconnexion et suppression des identifiants stockés.

npx emdash logout [options]

Options

OptionAliasDescriptionDéfaut
--url-uURL de l’instance EmDashhttp://localhost:4321

emdash whoami

Affiche l’utilisateur actuellement authentifié.

npx emdash whoami [options]

Options

OptionAliasDescriptionDéfaut
--url-uURL de l’instance EmDashhttp://localhost:4321
--token-tJeton d’authentificationDepuis env/identifiants
--jsonSortie au format JSON

Affiche l’e-mail, le nom, le rôle, la méthode d’authentification et l’URL de l’instance.

emdash content

Gestion des éléments de contenu. Toutes les sous-commandes utilisent l’API distante via EmDashClient.

content list <collection>

npx emdash content list posts
npx emdash content list posts --status published --limit 10
OptionDescription
--statusFiltrer par statut
--limitNombre maximum
--cursorCurseur de pagination

content get <collection> <id>

npx emdash content get posts 01ABC123
npx emdash content get posts 01ABC123 --raw
OptionDescription
--rawRetourner le Portable Text brut (sans conversion markdown)

La réponse inclut un jeton _rev — passez-le à content update pour prouver que vous avez vu ce que vous écrasez.

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
OptionDescription
--dataChaîne JSON avec les données
--fileLire les données depuis un fichier JSON
--stdinLire les données depuis stdin
--slugSlug du contenu
--statusStatut initial (draft, published)

Fournissez les données via exactement un des flags --data, --file ou --stdin.

content update <collection> <id>

Comme un éditeur de fichiers qui exige de lire avant d’écrire — vous devez fournir le jeton _rev d’un get précédent pour prouver que vous avez vu l’état actuel. Cela évite d’écraser accidentellement des modifications que vous n’avez pas vues.

# 1. Lire l'élément, noter le _rev
npx emdash content get posts 01ABC123

# 2. Mettre à jour avec le _rev de l'étape 1
npx emdash content update posts 01ABC123 \
  --rev MToyMDI2LTAyLTE0... \
  --data '{"title": "Updated"}'
OptionDescription
--revJeton de révision depuis get (obligatoire)
--dataChaîne JSON avec les données
--fileLire les données depuis un fichier JSON

Si l’élément a changé depuis votre get, le serveur renvoie 409 Conflict — relisez et réessayez.

content delete <collection> <id>

npx emdash content delete posts 01ABC123

Suppression logique de l’élément de contenu (déplacé vers la corbeille).

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
OptionDescription
--atDate et heure ISO 8601 (obligatoire)

content restore <collection> <id>

npx emdash content restore posts 01ABC123

Restaure un élément de contenu mis à la corbeille.

emdash schema

Gestion des collections et des champs.

schema list

npx emdash schema list

Liste toutes les collections.

schema get <collection>

npx emdash schema get posts

Affiche une collection avec tous ses champs.

schema create <collection>

npx emdash schema create articles --label Articles
npx emdash schema create articles --label Articles --label-singular Article --description "Articles de blog"
OptionDescription
--labelLibellé de la collection (obligatoire)
--label-singularLibellé au singulier
--descriptionDescription de la collection

schema delete <collection>

npx emdash schema delete articles
npx emdash schema delete articles --force
OptionDescription
--forceIgnorer la confirmation

Demande une confirmation sauf si --force est défini.

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
OptionDescription
--typeType de champ : string, text, number, integer, boolean, datetime, image, reference, portableText, json (obligatoire)
--labelLibellé du champ (par défaut : slug du champ)
--requiredSi le champ est obligatoire

schema remove-field <collection> <field>

npx emdash schema remove-field posts featured

emdash media

Gestion des éléments média.

media list

npx emdash media list
npx emdash media list --mime image/png --limit 20
OptionDescription
--mimeFiltrer par type MIME
--limitNombre d’éléments
--cursorCurseur de pagination

media upload <file>

npx emdash media upload ./photo.jpg
npx emdash media upload ./photo.jpg --alt "Un coucher de soleil" --caption "Pris à Bristol"
OptionDescription
--altTexte alternatif
--captionLégende

media get <id>

npx emdash media get 01MEDIA123

media delete <id>

npx emdash media delete 01MEDIA123

Recherche plein texte dans le contenu.

npx emdash search "hello world"
npx emdash search "hello" --collection posts --limit 5
OptionAliasDescription
--collection-cFiltrer par collection
--limit-lRésultats maximum

emdash taxonomy

Gestion des taxonomies et des termes.

taxonomy list

npx emdash taxonomy list

taxonomy terms <name>

npx emdash taxonomy terms categories
npx emdash taxonomy terms tags --limit 50
OptionAliasDescription
--limit-lTermes maximum
--cursorCurseur de pagination

taxonomy add-term <taxonomy>

npx emdash taxonomy add-term categories --name "Tech" --slug tech
npx emdash taxonomy add-term categories --name "Frontend" --parent 01PARENT123
OptionDescription
--nameLibellé du terme (obligatoire)
--slugSlug du terme (par défaut : nom slugifié)
--parentID du terme parent (pour les taxonomies hiérarchiques)

emdash menu

Gestion des menus de navigation.

npx emdash menu list
npx emdash menu get primary

Renvoie le menu avec tous ses éléments.

emdash seed

Applique un fichier seed à la base de données. Cette commande fonctionne directement sur un fichier SQLite local (aucun serveur en cours d’exécution nécessaire).

npx emdash seed [path] [options]

Arguments

ArgumentDescriptionDéfaut
pathChemin du fichier seed.emdash/seed.json

Options

OptionAliasDescriptionDéfaut
--database-dChemin du fichier de base./data.db
--cwdRépertoire de travailRépertoire courant
--validateValider seulement, ne pas appliquerfalse
--no-contentIgnorer le contenu exemplefalse
--on-conflictGestion des conflits : skip, update, errorskip
--uploads-dirRépertoire pour les téléversements média.emdash/uploads
--media-base-urlURL de base pour les fichiers média/_emdash/api/media/file
--base-urlURL de base du site (pour les URL média absolues)

Résolution du fichier seed

La commande recherche les fichiers seed dans cet ordre :

  1. Argument positionnel (si fourni)
  2. .emdash/seed.json (convention)
  3. Chemin depuis le champ emdash.seed de package.json

emdash export-seed

Exporte le schéma et le contenu de la base de données sous forme de fichier seed. Fonctionne directement sur un fichier SQLite local.

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

Options

OptionAliasDescriptionDéfaut
--database-dChemin du fichier de base./data.db
--cwdRépertoire de travailRépertoire courant
--with-contentInclure le contenu (tout ou collections séparées par virgules)
--no-prettyDésactiver le formatage JSONfalse

Format de sortie

Le fichier seed exporté inclut :

  • Settings : Titre du site, slogan, liens sociaux
  • Collections : Toutes les définitions de collections avec champs
  • Taxonomies : Définitions de taxonomies et termes
  • Menus : Menus de navigation avec éléments
  • Widget Areas : Zones de widgets et widgets
  • Content (si demandé) : Entrées avec références $media et syntaxe $ref: pour la portabilité

emdash auth secret

Génère un secret d’authentification sécurisé pour votre déploiement.

npx emdash auth secret

Produit un secret aléatoire adapté à EMDASH_AUTH_SECRET.

Fichiers générés

.emdash/types.ts

Interfaces TypeScript générées par 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

Export de schéma brut pour l’outillage :

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

Variables d’environnement

VariableDescription
EMDASH_DATABASE_URLURL de la base de données (défini automatiquement par dev)
EMDASH_TOKENJeton d’authentification pour les opérations distantes
EMDASH_URLURL distante par défaut pour types et dev --types
EMDASH_AUTH_SECRETSecret pour l’authentification par passkey
EMDASH_PREVIEW_SECRETSecret pour la génération de jetons d’aperçu

Scripts package

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

Codes de sortie

CodeDescription
0Succès
1Erreur (configuration, réseau, base de données)