O CLI do EmDash fornece comandos para gerenciar uma instância EmDash CMS — configuração de banco de dados, geração de tipos, CRUD de conteúdo, gerenciamento de schema, mídia e mais.
Instalação
O CLI está incluído no pacote emdash. Instale com o seguinte comando:
npm install emdash
Execute comandos com npx emdash ou adicione scripts ao package.json. O binário também está disponível como em para brevidade.
Autenticação
Comandos que usam o cliente remoto compartilhado resolvem a autenticação nesta ordem:
- Flag
--token— token explícito na linha de comando - Variável de ambiente
EMDASH_TOKEN - Credenciais salvas de
~/.config/emdash/auth.json(salvas poremdash login) - Bypass de desenvolvimento — se a URL é localhost e nenhum token está disponível, autentica automaticamente via endpoint de bypass dev
Esses comandos aceitam os flags --url (de EMDASH_URL, com fallback para http://localhost:4321) e --token. Os comandos de autenticação têm suas próprias opções de conexão. Ao apontar para um servidor de desenvolvimento local, nenhum token é necessário.
Flags comuns
Esses flags estão disponíveis em comandos que usam o cliente remoto compartilhado:
| Flag | Alias | Descrição | Padrão |
|---|---|---|---|
--url | -u | URL da instância EmDash | EMDASH_URL ou http://localhost:4321 |
--token | -t | Token de autenticação | De env/credenciais salvas |
--header "Name: Value" | -H | Header de requisição customizado; repetível | De EMDASH_HEADERS/credenciais salvas |
--json | Saída como JSON (para piping) | Auto-detectado de TTY |
Saída
Quando stdout é um TTY, o CLI imprime resultados formatados com consola. Quando em pipe ou quando --json está definido, produz JSON bruto em stdout — adequado para jq ou outras ferramentas.
Comandos
emdash dev
Inicia o servidor de desenvolvimento com configuração automática do banco de dados.
npx emdash dev [options]
Opções
| Opção | Alias | Descrição | Padrão |
|---|---|---|---|
--database | -d | Caminho do arquivo de banco de dados | ./data.db |
--types | -t | Gerar tipos do remoto antes de iniciar | false |
--port | -p | Porta do servidor de desenvolvimento | 4321 |
--cwd | Diretório de trabalho | Diretório atual |
Exemplos
# Iniciar servidor de desenvolvimento
npx emdash dev
# Porta customizada
npx emdash dev --port 3000
# Gerar tipos do remoto antes de iniciar
npx emdash dev --types
Comportamento
- Verifica e executa migrações de banco de dados pendentes
- Se
--typesestá definido, gera tipos TypeScript de uma instância remota (URL da variávelEMDASH_URLouemdash.urlnopackage.json) - Inicia o servidor de desenvolvimento Astro com
EMDASH_DATABASE_URLdefinido
emdash types
Gera tipos TypeScript do schema de uma instância EmDash em execução.
npx emdash types [options]
Opções
| Opção | Alias | Descrição | Padrão |
|---|---|---|---|
--url | -u | URL da instância EmDash | http://localhost:4321 |
--token | -t | Token de autenticação | De env/credenciais salvas |
--output | -o | Caminho de saída dos tipos | .emdash/types.ts |
--cwd | Diretório de trabalho | Diretório atual |
Exemplos
# Gerar tipos do servidor de desenvolvimento local
npx emdash types
# Gerar de instância remota
npx emdash types --url https://my-site.pages.dev
# Caminho de saída customizado
npx emdash types --output src/types/emdash.ts
Comportamento
- Busca o schema da instância
- Gera as definições de tipos TypeScript
- Escreve os tipos no arquivo de saída
- Escreve um
schema.jsonao lado para referência
emdash login
Faz login em uma instância EmDash usando OAuth Device Flow.
npx emdash login [options]
Opções
| Opção | Alias | Descrição | Padrão |
|---|---|---|---|
--url | -u | URL da instância EmDash | http://localhost:4321 |
Comportamento
- Descobre os endpoints de autenticação da instância
- Se localhost e nenhuma auth configurada, usa automaticamente o bypass de desenvolvimento
- Caso contrário, inicia OAuth Device Flow — mostra um código e abre o navegador
- Pesquisa a autorização, depois salva credenciais em
~/.config/emdash/auth.json
Credenciais salvas são usadas automaticamente por todos os comandos subsequentes direcionados à mesma instância.
emdash logout
Faz logout e remove as credenciais salvas.
npx emdash logout [options]
emdash whoami
Mostra o usuário autenticado atual.
npx emdash whoami [options]
Mostra email, nome, papel, método de autenticação e URL da instância.
emdash content
Gerenciar itens de conteúdo. Todos os subcomandos usam a API remota via EmDashClient.
content list <collection>
npx emdash content list posts
npx emdash content list posts --status published --limit 10
| Opção | Descrição |
|---|---|
--status | Filtrar por status |
--limit | Máximo de itens |
--cursor | Cursor de paginação |
content get <collection> <id>
npx emdash content get posts 01ABC123
npx emdash content get posts 01ABC123 --raw
| Opção | Descrição |
|---|---|
--raw | Retornar Portable Text bruto (pular conversão markdown) |
A resposta inclui um token _rev. Passe-o para content update para provar que viu o estado atual antes de sobrescrever.
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
| Opção | Descrição |
|---|---|
--data | String JSON com dados do conteúdo |
--file | Ler dados de um arquivo JSON |
--stdin | Ler dados do stdin |
--slug | Slug do conteúdo |
--locale | Locale do conteúdo |
--translation-of | ID de um item de conteúdo para vincular como tradução |
--draft | Manter como rascunho em vez de auto-publicar |
Forneça dados via exatamente uma das opções --data, --file ou --stdin. Novos itens são auto-publicados a menos que --draft esteja definido.
content update <collection> <id>
Você deve fornecer o token _rev de um get anterior para provar que viu o estado atual:
# 1. Ler o item, anotar o _rev
npx emdash content get posts 01ABC123
# 2. Atualizar com o _rev do passo 1
npx emdash content update posts 01ABC123 \
--rev MToyMDI2LTAyLTE0... \
--data '{"title": "Atualizado"}'
| Opção | Descrição |
|---|---|
--rev | Token de revisão do get (obrigatório) |
--data | String JSON com dados do conteúdo |
--file | Ler dados de um arquivo JSON |
Se o item mudou desde seu get, o servidor retorna 409 Conflict — releia e tente novamente.
content delete <collection> <id>
npx emdash content delete posts 01ABC123
Exclusão suave do item de conteúdo (movido para a lixeira).
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
| Opção | Descrição |
|---|---|
--at | Data e hora ISO 8601 (obrigatório) |
content restore <collection> <id>
npx emdash content restore posts 01ABC123
Restaura um item de conteúdo excluído.
emdash schema
Gerenciar coleções e campos.
schema list
npx emdash schema list
Lista todas as coleções.
schema get <collection>
npx emdash schema get posts
Mostra uma coleção com todos os seus campos.
schema create <collection>
npx emdash schema create articles --label Articles
npx emdash schema create articles --label Articles --label-singular Article --description "Artigos do blog"
| Opção | Descrição |
|---|---|
--label | Rótulo da coleção (obrigatório) |
--label-singular | Rótulo singular |
--description | Descrição da coleção |
schema delete <collection>
npx emdash schema delete articles
npx emdash schema delete articles --force
| Opção | Descrição |
|---|---|
--force | Pular confirmação |
schema add-field <collection> <field>
npx emdash schema add-field posts body --type portableText --label "Conteúdo do corpo"
npx emdash schema add-field posts featured --type boolean --required
| Opção | Descrição |
|---|---|
--type | Tipo de campo: string, text, number, integer, boolean, datetime, image, reference, portableText, json (obrigatório) |
--label | Rótulo do campo (padrão o slug do campo) |
--required | Se o campo é obrigatório |
schema remove-field <collection> <field>
npx emdash schema remove-field posts featured
emdash media
Gerenciar itens de mídia.
media list
npx emdash media list
npx emdash media list --mime image/png --limit 20
media upload <file>
npx emdash media upload ./photo.jpg
npx emdash media upload ./photo.jpg --alt "Um pôr do sol" --caption "Tirada em Bristol"
media get <id>
npx emdash media get 01MEDIA123
media delete <id>
npx emdash media delete 01MEDIA123
media repair-usage
Repara os índices de uso de mídia do conteúdo para uma coleção ou todas as coleções de conteúdo.
npx emdash media repair-usage --collection posts
npx emdash media repair-usage --all
npx emdash media repair-usage --all --json
| Opção | Alias | Descrição |
|---|---|---|
--collection | -c | Reparar uma coleção de conteúdo |
--all | Reparar todas as coleções de conteúdo |
emdash search
Pesquisa de texto completo em todo o conteúdo.
npx emdash search "hello world"
npx emdash search "hello" --collection posts --limit 5
emdash taxonomy
Gerenciar taxonomias e termos.
taxonomy list
npx emdash taxonomy list
taxonomy terms <name>
npx emdash taxonomy terms categories
npx emdash taxonomy terms tags --limit 50
taxonomy add-term <taxonomy>
npx emdash taxonomy add-term categories --name "Tech" --slug tech
npx emdash taxonomy add-term categories --name "Frontend" --parent 01PARENT123
emdash menu
Gerenciar menus de navegação.
menu list
npx emdash menu list
menu get <name>
npx emdash menu get primary
emdash export-seed
Exportar schema do banco de dados e conteúdo como arquivo seed.
npx emdash export-seed [options] > seed.json
Opções
| Opção | Alias | Descrição | Padrão |
|---|---|---|---|
--database | -d | Caminho do arquivo de banco de dados | ./data.db |
--cwd | Diretório de trabalho | Diretório atual | |
--with-content | Incluir conteúdo (tudo ou coleções separadas por vírgula) | ||
--no-pretty | Desabilitar formatação JSON | false |
Formato de saída
O arquivo seed exportado inclui:
- Configurações: Título do site, tagline, links sociais
- Coleções: Todas as definições de coleção com campos
- Taxonomias: Definições de taxonomia e termos
- Menus: Menus de navegação com itens
- Áreas de widget: Áreas de widget e widgets
- Conteúdo (se solicitado): Entradas com referências
$mediae sintaxe$ref:
emdash secrets generate
Gera um EMDASH_ENCRYPTION_KEY para seu deployment. A chave é usada para criptografar segredos de plugins em repouso.
npx emdash secrets generate
Imprime a nova chave em stdout. Redirecione para seu armazenamento de segredos ou escreva diretamente no seu arquivo .env local com --write:
npx emdash secrets generate --write .env
emdash secrets fingerprint <key>
Imprime a impressão digital de 8 caracteres (kid) de uma chave sem expor seu valor:
npx emdash secrets fingerprint emdash_enc_v1_...
Arquivos gerados
.emdash/types.ts
O comando emdash types gera interfaces TypeScript para cada coleção:
// Gerado pelo CLI EmDash
// Não edite manualmente - execute `emdash types` para regenerar
import type { PortableTextBlock } from "emdash";
export interface Post {
id: string;
title: string;
content: PortableTextBlock[];
publishedAt: Date | null;
}
.emdash/schema.json
O comando também escreve uma exportação de schema bruto para ferramentas:
{
"version": "a1b2c3d4",
"collections": [
{
"slug": "posts",
"label": "Posts",
"fields": [...]
}
]
}
Variáveis de ambiente
| Variável | Descrição |
|---|---|
EMDASH_DATABASE_URL | URL do banco de dados (definida automaticamente por dev) |
EMDASH_TOKEN | Token de auth para operações remotas |
EMDASH_URL | URL padrão para comandos que usam o cliente remoto compartilhado |
EMDASH_HEADERS | Headers de requisição customizados separados por nova linha para o cliente remoto compartilhado e login |
EMDASH_ENCRYPTION_KEY | Chave para criptografar segredos de plugins em repouso. Fornecida pelo operador — nunca armazenada no banco de dados. Gerar com emdash secrets generate. |
EMDASH_PREVIEW_SECRET | Substituição opcional para o segredo HMAC de preview. Quando não definido, EmDash gera e persiste um na tabela de opções. |
EMDASH_IP_SALT | Substituição opcional para o salt do hash IP do comentarista. Quando não definido, EmDash gera e persiste um na tabela de opções. |
EMDASH_AUTH_SECRET | Obsoleto. Usado como fonte de salt IP se definido. Novas instalações não devem defini-lo. |
Scripts do pacote
Adicione comandos do CLI como scripts do package.json:
{
"scripts": {
"dev": "emdash dev",
"types": "emdash types",
"export-seed": "emdash export-seed",
"db:reset": "rm -f data.db"
}
}
Códigos de saída
| Código | Descrição |
|---|---|
0 | Sucesso |
1 | Erro (configuração, rede, banco de dados) |