Ir al contenido

Referencia de la CLI

La CLI de EmDash proporciona comandos para gestionar una instancia de EmDash CMS — configuración de base de datos, generación de tipos, CRUD de contenido, gestión de esquemas, medios y más.

La CLI está incluida en el paquete emdash:

Ventana de terminal
npm install emdash

Ejecuta comandos con npx emdash o añade scripts a package.json. El binario también está disponible como em para abreviar.

Los comandos que se comunican con una instancia de EmDash en ejecución (todos excepto init, seed, export-seed y auth secret) resuelven la autenticación en este orden:

  1. Bandera --token — token explícito en la línea de comandos
  2. Variable de entorno EMDASH_TOKEN
  3. Credenciales almacenadas de ~/.config/emdash/auth.json (guardadas por emdash login)
  4. Omisión de desarrollo — si la URL es localhost y no hay token disponible, se autentica automáticamente a través del endpoint de omisión de desarrollo

La mayoría de los comandos aceptan las banderas --url (por defecto http://localhost:4321) y --token. Cuando se apunta a un servidor de desarrollo local, no se necesita token.

Estas banderas están disponibles en todos los comandos remotos:

BanderaAliasDescripciónPor defecto
--url-uURL de la instancia EmDashhttp://localhost:4321
--token-tToken de autenticaciónDesde entorno/credenciales almacenadas
--jsonSalida como JSON (para piping)Detectado automáticamente desde TTY

Cuando stdout es un TTY, la CLI imprime los resultados de forma legible con consola. Cuando se redirige la salida o cuando se establece --json, envía JSON sin formato a stdout — adecuado para jq u otras herramientas.

Inicializa la base de datos con el esquema central y datos de plantilla opcionales.

Ventana de terminal
npx emdash init [options]
OpciónAliasDescripciónPor defecto
--database-dRuta del archivo de base de datos./data.db
--cwdDirectorio de trabajoDirectorio actual
--force-fRe-ejecutar esquema y datos inicialesfalse
  1. Lee la configuración emdash de package.json
  2. Crea el archivo de base de datos si es necesario
  3. Ejecuta las migraciones centrales (crea las tablas del sistema)
  4. Ejecuta schema.sql de la plantilla si está configurado
  5. Ejecuta seed.sql de la plantilla si está configurado

Inicia el servidor de desarrollo con configuración automática de la base de datos.

Ventana de terminal
npx emdash dev [options]
OpciónAliasDescripciónPor defecto
--database-dRuta del archivo de base de datos./data.db
--types-tGenerar tipos desde remoto antes de iniciarfalse
--port-pPuerto del servidor de desarrollo4321
--cwdDirectorio de trabajoDirectorio actual
Ventana de terminal
# Start dev server
npx emdash dev
# Puerto personalizado
npx emdash dev --port 3000
# Generar tipos desde remoto antes de iniciar
npx emdash dev --types
  1. Verifica y ejecuta migraciones de base de datos pendientes
  2. Si se establece --types, genera tipos de TypeScript desde una instancia remota (URL de la variable de entorno EMDASH_URL o emdash.url en package.json)
  3. Inicia el servidor de desarrollo de Astro con EMDASH_DATABASE_URL establecido

Genera tipos de TypeScript a partir del esquema de una instancia de EmDash en ejecución.

Ventana de terminal
npx emdash types [options]
OpciónAliasDescripciónPor defecto
--url-uURL de la instancia EmDashhttp://localhost:4321
--token-tToken de autenticaciónDesde entorno/credenciales almacenadas
--output-oRuta de salida para los tipos.emdash/types.ts
--cwdDirectorio de trabajoDirectorio actual
Ventana de terminal
# Generar tipos desde el servidor local de desarrollo
npx emdash types
# Generar desde instancia remota
npx emdash types --url https://my-site.pages.dev
# Ruta de salida personalizada
npx emdash types --output src/types/emdash.ts
  1. Obtiene el esquema de la instancia
  2. Genera definiciones de tipos de TypeScript
  3. Escribe los tipos en el archivo de salida
  4. Escribe schema.json junto a él como referencia

Inicia sesión en una instancia de EmDash usando OAuth Device Flow.

Ventana de terminal
npx emdash login [options]
OpciónAliasDescripciónPor defecto
--url-uURL de la instancia EmDashhttp://localhost:4321
  1. Descubre los endpoints de autenticación de la instancia
  2. Si es localhost y no hay autenticación configurada, usa la omisión de desarrollo automáticamente
  3. De lo contrario, inicia OAuth Device Flow — muestra un código y abre tu navegador
  4. Sondea la autorización, luego guarda las credenciales en ~/.config/emdash/auth.json

Las credenciales guardadas se usan automáticamente en todos los comandos posteriores que apunten a la misma instancia.

Cierra sesión y elimina las credenciales almacenadas.

Ventana de terminal
npx emdash logout [options]
OpciónAliasDescripciónPor defecto
--url-uURL de la instancia EmDashhttp://localhost:4321

Muestra el usuario autenticado actual.

Ventana de terminal
npx emdash whoami [options]
OpciónAliasDescripciónPor defecto
--url-uURL de la instancia EmDashhttp://localhost:4321
--token-tToken de autenticaciónDesde entorno/credenciales almacenadas
--jsonSalida como JSON

Muestra correo electrónico, nombre, rol, método de autenticación y URL de la instancia.

Gestiona elementos de contenido. Todos los subcomandos usan la API remota a través de EmDashClient.

Ventana de terminal
npx emdash content list posts
npx emdash content list posts --status published --limit 10
OpciónDescripción
--statusFiltrar por estado
--limitMáximo de elementos
--cursorCursor de paginación
Ventana de terminal
npx emdash content get posts 01ABC123
npx emdash content get posts 01ABC123 --raw
OpciónDescripción
--rawDevuelve Portable Text crudo (omite la conversión a markdown)

La respuesta incluye un token _rev — pásalo a content update para demostrar que has visto lo que estás sobrescribiendo.

Ventana de terminal
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
OpciónDescripción
--dataCadena JSON con datos del contenido
--fileLee datos de un archivo JSON
--stdinLee datos de stdin
--slugSlug del contenido
--statusEstado inicial (draft, published)

Proporciona datos mediante exactamente una de las opciones --data, --file o --stdin.

Como un editor de archivos que requiere que leas antes de escribir — debes proporcionar el token _rev de un get previo para demostrar que has visto el estado actual. Esto evita sobrescribir accidentalmente cambios que no has visto.

Ventana de terminal
# 1. Lee el elemento y anota el `_rev`
npx emdash content get posts 01ABC123
# 2. Actualizar con el _rev del paso 1
npx emdash content update posts 01ABC123 \
--rev MToyMDI2LTAyLTE0... \
--data '{"title": "Actualizado"}'
OpciónDescripción
--revToken de revisión de get (requerido)
--dataCadena JSON con datos del contenido
--fileLee datos de un archivo JSON

Si el elemento ha cambiado desde tu get, el servidor devuelve 409 Conflicto — vuelve a leer e inténtalo de nuevo.

Ventana de terminal
npx emdash content delete posts 01ABC123

Elimina suavemente el elemento de contenido (lo mueve a la papelera).

Ventana de terminal
npx emdash content publish posts 01ABC123
Ventana de terminal
npx emdash content unpublish posts 01ABC123
Ventana de terminal
npx emdash content schedule posts 01ABC123 --at 2026-03-01T09:00:00Z
OpciónDescripción
--atFecha y hora ISO 8601 (requerida)
Ventana de terminal
npx emdash content restore posts 01ABC123

Restaura un elemento de contenido de la papelera.

Gestiona colecciones y campos.

Ventana de terminal
npx emdash schema list

Enumera todas las colecciones.

Ventana de terminal
npx emdash schema get posts

Muestra una colección con todos sus campos.

Ventana de terminal
npx emdash schema create articles --label Articles
npx emdash schema create articles --label Articles --label-singular Article --description "Blog articles"
OpciónDescripción
--labelEtiqueta de la colección (requerida)
--label-singularEtiqueta en singular
--descriptionDescripción de la colección
Ventana de terminal
npx emdash schema delete articles
npx emdash schema delete articles --force
OpciónDescripción
--forceOmite la confirmación

Solicita confirmación a menos que se establezca --force.

Ventana de terminal
npx emdash schema add-field posts body --type portableText --label "Body Content"
npx emdash schema add-field posts featured --type boolean --required
OpciónDescripción
--typeTipo de campo: string, text, number, integer, boolean, datetime, image, reference, portableText, json (requerido)
--labelEtiqueta del campo (por defecto, el slug del campo)
--requiredSi el campo es obligatorio
Ventana de terminal
npx emdash schema remove-field posts featured

Gestiona elementos multimedia.

Ventana de terminal
npx emdash media list
npx emdash media list --mime image/png --limit 20
OpciónDescripción
--mimeFiltrar por tipo MIME
--limitNúmero de elementos
--cursorCursor de paginación
Ventana de terminal
npx emdash media upload ./photo.jpg
npx emdash media upload ./photo.jpg --alt "A sunset" --caption "Taken in Bristol"
OpciónDescripción
--altTexto alternativo
--captionTexto del pie de foto
Ventana de terminal
npx emdash media get 01MEDIA123
Ventana de terminal
npx emdash media delete 01MEDIA123

Búsqueda de texto completo en todo el contenido.

Ventana de terminal
npx emdash search "hello world"
npx emdash search "hello" --collection posts --limit 5
OpciónAliasDescripción
--collection-cFiltrar por colección
--limit-lResultados máximos

Gestiona taxonomías y términos.

Ventana de terminal
npx emdash taxonomy list
Ventana de terminal
npx emdash taxonomy terms categories
npx emdash taxonomy terms tags --limit 50
OpciónAliasDescripción
--limit-lTérminos máximos
--cursorCursor de paginación
Ventana de terminal
npx emdash taxonomy add-term categories --name "Tech" --slug tech
npx emdash taxonomy add-term categories --name "Frontend" --parent 01PARENT123
OpciónDescripción
--nameEtiqueta del término (requerida)
--slugSlug del término (por defecto, el nombre convertido a slug)
--parentID del término padre (para taxonomías jerárquicas)

Gestiona menús de navegación.

Ventana de terminal
npx emdash menu list
Ventana de terminal
npx emdash menu get primary

Devuelve el menú con todos sus elementos.

Aplica un archivo de semilla a la base de datos. Este comando funciona directamente en un archivo SQLite local (no se necesita un servidor en ejecución).

Ventana de terminal
npx emdash seed [path] [options]
ArgumentoDescripciónValor por defecto
pathRuta al archivo de semilla.emdash/seed.json
OpciónAliasDescripciónValor por defecto
--database-dRuta del archivo de base de datos./data.db
--cwdDirectorio de trabajoDirectorio actual
--validateSolo validar, no aplicarfalse
--no-contentOmitir contenido de ejemplofalse
--on-conflictManejo de conflictos: skip, update, errorskip
--uploads-dirDirectorio para subidas de medios.emdash/uploads
--media-base-urlURL base para archivos de medios/_emdash/api/media/file
--base-urlURL base del sitio (para URLs absolutas de medios)

El comando busca archivos de semilla en este orden:

  1. Argumento posicional (si se proporciona)
  2. .emdash/seed.json (convención)
  3. Ruta desde el campo emdash.seed de package.json

Exporta el esquema y contenido de la base de datos como un archivo de semilla. Funciona directamente sobre un archivo SQLite local.

Ventana de terminal
npx emdash export-seed [options] > seed.json
OpciónAliasDescripciónValor por defecto
--database-dRuta del archivo de base de datos./data.db
--cwdDirectorio de trabajoDirectorio actual
--with-contentIncluir contenido (todo o colecciones separadas por comas)
--no-prettyDeshabilitar formato JSONfalse

El archivo de semilla exportado incluye:

  • Configuraciones: Título del sitio, eslogan, enlaces sociales
  • Colecciones: Todas las definiciones de colecciones con campos
  • Taxonomías: Definiciones de taxonomías y términos
  • Menús: Menús de navegación con elementos
  • Áreas de Widgets: Áreas de widgets y widgets
  • Contenido (si se solicita): Entradas con referencias $media y sintaxis $ref: para portabilidad

Genera un secreto de autenticación seguro para tu despliegue.

Ventana de terminal
npx emdash auth secret

Produce un secreto aleatorio adecuado para EMDASH_AUTH_SECRET.

Interfaces TypeScript generadas por 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;
}

Exportación de esquema crudo para herramientas:

{
"version": "a1b2c3d4",
"collections": [
{
"slug": "posts",
"label": "Posts",
"fields": [...]
}
]
}
VariableDescripción
EMDASH_DATABASE_URLURL de la base de datos (establecida automáticamente por dev)
EMDASH_TOKENToken de autenticación para operaciones remotas
EMDASH_URLURL remota predeterminada para types y dev --types
EMDASH_AUTH_SECRETSecreto para autenticación con clave de acceso
EMDASH_PREVIEW_SECRETSecreto para generación de tokens de vista previa
{
"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"
}
}
CódigoDescripción
0Éxito
1Error (configuración, red, base de datos)