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 :
- Flag
--token— jeton explicite sur la ligne de commande - Variable d’environnement
EMDASH_TOKEN - Identifiants stockés depuis
~/.config/emdash/auth.json(sauvegardés paremdash login) - 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 :
| Flag | Alias | Description | Défaut |
|---|---|---|---|
--url | -u | URL de l’instance EmDash | http://localhost:4321 |
--token | -t | Jeton d’authentification | Depuis env/identifiants stockés |
--json | Sortie 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
| Option | Alias | Description | Défaut |
|---|---|---|---|
--database | -d | Chemin du fichier de base | ./data.db |
--cwd | Répertoire de travail | Répertoire courant | |
--force | -f | Relancer le schéma et seed | false |
Comportement
- Lit la configuration
emdashdepuispackage.json - Crée le fichier de base de données si nécessaire
- Exécute les migrations principales (crée les tables système)
- Exécute le
schema.sqldu modèle si configuré - Exécute le
seed.sqldu 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
| Option | Alias | Description | Défaut |
|---|---|---|---|
--database | -d | Chemin du fichier de base | ./data.db |
--types | -t | Générer les types depuis le distant avant le démarrage | false |
--port | -p | Port du serveur de développement | 4321 |
--cwd | Répertoire de travail | Ré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
- Vérifie et exécute les migrations de base en attente
- Si
--typesest défini, génère les types TypeScript depuis une instance distante (URL depuis la variableEMDASH_URLouemdash.urldanspackage.json) - Démarre le serveur de développement Astro avec
EMDASH_DATABASE_URLdé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
| Option | Alias | Description | Défaut |
|---|---|---|---|
--url | -u | URL de l’instance EmDash | http://localhost:4321 |
--token | -t | Jeton d’authentification | Depuis env/identifiants |
--output | -o | Chemin de sortie des types | .emdash/types.ts |
--cwd | Répertoire de travail | Ré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
- Récupère le schéma depuis l’instance
- Génère les définitions de types TypeScript
- Écrit les types dans le fichier de sortie
- É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
| Option | Alias | Description | Défaut |
|---|---|---|---|
--url | -u | URL de l’instance EmDash | http://localhost:4321 |
Comportement
- Découvre les points de terminaison d’authentification depuis l’instance
- Si localhost et pas d’authentification configurée, utilise automatiquement le bypass dev
- Sinon, initie le flux OAuth Device — affiche un code et ouvre votre navigateur
- 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
| Option | Alias | Description | Défaut |
|---|---|---|---|
--url | -u | URL de l’instance EmDash | http://localhost:4321 |
emdash whoami
Affiche l’utilisateur actuellement authentifié.
npx emdash whoami [options]
Options
| Option | Alias | Description | Défaut |
|---|---|---|---|
--url | -u | URL de l’instance EmDash | http://localhost:4321 |
--token | -t | Jeton d’authentification | Depuis env/identifiants |
--json | Sortie 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
| Option | Description |
|---|---|
--status | Filtrer par statut |
--limit | Nombre maximum |
--cursor | Curseur de pagination |
content get <collection> <id>
npx emdash content get posts 01ABC123
npx emdash content get posts 01ABC123 --raw
| Option | Description |
|---|---|
--raw | Retourner 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
| Option | Description |
|---|---|
--data | Chaîne JSON avec les données |
--file | Lire les données depuis un fichier JSON |
--stdin | Lire les données depuis stdin |
--slug | Slug du contenu |
--status | Statut 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"}'
| Option | Description |
|---|---|
--rev | Jeton de révision depuis get (obligatoire) |
--data | Chaîne JSON avec les données |
--file | Lire 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
| Option | Description |
|---|---|
--at | Date 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"
| Option | Description |
|---|---|
--label | Libellé de la collection (obligatoire) |
--label-singular | Libellé au singulier |
--description | Description de la collection |
schema delete <collection>
npx emdash schema delete articles
npx emdash schema delete articles --force
| Option | Description |
|---|---|
--force | Ignorer 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
| Option | Description |
|---|---|
--type | Type de champ : string, text, number, integer, boolean, datetime, image, reference, portableText, json (obligatoire) |
--label | Libellé du champ (par défaut : slug du champ) |
--required | Si 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
| Option | Description |
|---|---|
--mime | Filtrer par type MIME |
--limit | Nombre d’éléments |
--cursor | Curseur 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"
| Option | Description |
|---|---|
--alt | Texte alternatif |
--caption | Légende |
media get <id>
npx emdash media get 01MEDIA123
media delete <id>
npx emdash media delete 01MEDIA123
emdash search
Recherche plein texte dans le contenu.
npx emdash search "hello world"
npx emdash search "hello" --collection posts --limit 5
| Option | Alias | Description |
|---|---|---|
--collection | -c | Filtrer par collection |
--limit | -l | Ré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
| Option | Alias | Description |
|---|---|---|
--limit | -l | Termes maximum |
--cursor | Curseur 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
| Option | Description |
|---|---|
--name | Libellé du terme (obligatoire) |
--slug | Slug du terme (par défaut : nom slugifié) |
--parent | ID du terme parent (pour les taxonomies hiérarchiques) |
emdash menu
Gestion des menus de navigation.
menu list
npx emdash menu list
menu get <name>
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
| Argument | Description | Défaut |
|---|---|---|
path | Chemin du fichier seed | .emdash/seed.json |
Options
| Option | Alias | Description | Défaut |
|---|---|---|---|
--database | -d | Chemin du fichier de base | ./data.db |
--cwd | Répertoire de travail | Répertoire courant | |
--validate | Valider seulement, ne pas appliquer | false | |
--no-content | Ignorer le contenu exemple | false | |
--on-conflict | Gestion des conflits : skip, update, error | skip | |
--uploads-dir | Répertoire pour les téléversements média | .emdash/uploads | |
--media-base-url | URL de base pour les fichiers média | /_emdash/api/media/file | |
--base-url | URL de base du site (pour les URL média absolues) |
Résolution du fichier seed
La commande recherche les fichiers seed dans cet ordre :
- Argument positionnel (si fourni)
.emdash/seed.json(convention)- Chemin depuis le champ
emdash.seeddepackage.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
| Option | Alias | Description | Défaut |
|---|---|---|---|
--database | -d | Chemin du fichier de base | ./data.db |
--cwd | Répertoire de travail | Répertoire courant | |
--with-content | Inclure le contenu (tout ou collections séparées par virgules) | ||
--no-pretty | Désactiver le formatage JSON | false |
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
$mediaet 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
| Variable | Description |
|---|---|
EMDASH_DATABASE_URL | URL de la base de données (défini automatiquement par dev) |
EMDASH_TOKEN | Jeton d’authentification pour les opérations distantes |
EMDASH_URL | URL distante par défaut pour types et dev --types |
EMDASH_AUTH_SECRET | Secret pour l’authentification par passkey |
EMDASH_PREVIEW_SECRET | Secret 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
| Code | Description |
|---|---|
0 | Succès |
1 | Erreur (configuration, réseau, base de données) |