CLI & Build
O Seed oferece uma CLI completa para criar projetos, desenvolver com live reload e gerar builds de produção.
Comandos
seed init
```bash seed init <nome> [--components <src>] ```
Cria um novo projeto com a estrutura completa de pastas e um seed.yaml inicial. O seed-theme é instalado automaticamente via Git. Passe --components para usar uma biblioteca de componentes alternativa.
seed dev
```bash seed dev <pasta> [porta] ```
Inicia o dev server com live reload na porta 8000 (padrão). Durante o servidor, teclas de atalho estão disponíveis:
| Tecla | Ação |
|---|---|
o | Abre o browser |
b | Rebuilda todos os arquivos |
h | Abre o component explorer no browser |
r | Reinicia o servidor |
q | Encerra |
seed build
```bash seed build <pasta> [--no-optimize-images] ```
Gera o build de produção em dist/ e copia os assets de src/assets/ e do tema (se houver) para dist/static/. O build é incremental: arquivos sem mudança de conteúdo mantêm a data de modificação anterior, e arquivos que deixaram de ser gerados (fonte renomeada/apagada) são removidos de dist/. --no-optimize-images desativa a geração de srcset/webp responsivo só para essa execução. Detalhes completos em Build & Assets.
seed theme-install / theme-update
```bash seed theme-install <projeto> <path|github-url> seed theme-update <projeto> <path|github-url> ```
Instala ou atualiza um tema em themes/ e atualiza o seed.yaml. Se o tema já estiver instalado, theme-install pergunta antes de sobrescrever.
seed lint
```bash seed lint <arquivo.seed|pasta> ```
Analisa arquivos .seed e reporta problemas semânticos sem modificar nenhum arquivo. Retorna exit 1 se houver diagnósticos — útil em CI.
O linter detecta:
- Componentes não registrados (
@nomeque não existe no YAML nem no HTML spec) - Tags reservadas para
<head>usadas no body (@title,@meta, etc.) - Valores inválidos em props de modifier (
variant=inexistente) - Slots obrigatórios não preenchidos em componentes com template
```bash # arquivo único seed lint src/index.seed # pasta inteira seed lint src/ # → src/index.seed:12: componente não registrado: @cards # → src/index.seed:34: @button: valor inválido 'larg' para 'size' ```
seed fmt
```bash seed fmt <arquivo.seed|pasta> [--write] [--check] ```
Formata arquivos .seed normalizando indentação (2 espaços) e o formato de props (vírgula + espaço). Por padrão imprime o resultado formatado no stdout sem modificar o arquivo.
| Flag | Comportamento |
|---|---|
| (sem flag) | Imprime o resultado formatado no stdout |
--write | Reescreve o arquivo in-place |
--check | Retorna exit 1 se o arquivo não está formatado (CI) |
```bash # visualizar sem modificar seed fmt src/index.seed # formatar in-place seed fmt src/index.seed --write # checar pasta inteira em CI seed fmt src/ --check ```
O formatter é idempotente: rodar duas vezes produz o mesmo resultado. Comentários (//, /* */) e front matter YAML são preservados exatamente como estão no source.
seed components
```bash seed components <pasta-do-projeto> [--output caminho] ```
Gera uma referência em Markdown de todos os componentes disponíveis no projeto (tema + src/components/): tag, classe base, modifier groups e slots de template, quando existirem. Por padrão salva em components-reference.md na raiz do projeto; --output escolhe outro caminho.
seed contract
```bash seed contract [pasta-do-projeto] [--output caminho] ```
Gera em Markdown o "contrato" do Seed: como escrever arquivos .seed válidos e estruturar um projeto, incluindo a lista de componentes disponíveis quando uma pasta de projeto é informada. Sem argumento, gera só a parte base (sintaxe e estrutura, sem componentes de um projeto específico). Sem --output, o resultado vai para stdout em vez de um arquivo.
seed.yaml
O arquivo seed.yaml na raiz do projeto configura o tema e o comportamento de build:
```yaml theme: seed-theme # tema instalado em themes/seed-theme/ js: file # inline | file (padrão: file) css: file # inline | file (padrão: file) minify: false # minificar HTML (padrão: false) ```
js e css controlam como os assets do tema são entregues: file gera <script src="..."> e <link rel="stylesheet">, enquanto inline injeta o conteúdo diretamente no HTML.
Estrutura de output
```
dist/
├── index.html # sempre — páginas renderizadas
├── ...demais páginas .html
├── sitemap.xml # quando `url` está configurado
├── robots.txt # quando `url` está configurado
├── llms.txt # quando `llms` está ativo
├── llms-full.txt # quando `llms` está ativo
└── static/
├── styles.<hash>.css # quando `optimize-css` está ativo
├── seed.<hash>.js # quando há scripts de componente ou tema
└── ...demais assets
```Feito com ❤️ e Seed