seed.yaml
O arquivo seed.yaml na raiz do projeto é o ponto central de configuração. Ele define o tema ativo e controla como os assets são entregues no build.
Referência completa
```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 # true | false (padrão: false)
optimize-css: true # roda `npx @tailwindcss/cli` no build (padrão: true)
optimize-images: true # gera srcset/webp responsivo no build (padrão: true)
url: https://meusite.com # URL base — ativa sitemap, canonical, OG, JSON-LD
lang: pt-BR # idioma padrão do <html> e og:locale (padrão: en)
timezone: America/Sao_Paulo # timezone IANA para todos os campos de data
image: /static/og.png # imagem social padrão do site (og:image/twitter:image)
ga: G-XXXXXXXXXX # Google Analytics 4 — Measurement ID (build)
ga-dev: G-DEV000 # GA4 — Measurement ID (dev)
gtm: GTM-XXXXXXX # Google Tag Manager — Container ID (build)
gtm-dev: GTM-DEV # GTM — Container ID (dev)
head: | # HTML custom injetado no <head>
<meta name="custom" content="value">
person: # dono do site — author: true e JSON-LD Person/publisher
name: Jane Doe
url: https://meusite.com
sameAs:
- https://x.com/jane # twitter:site é derivado daqui
breadcrumbs: # JSON-LD BreadcrumbList (padrão: habilitado)
enabled: true
labels:
blog: Blog # rótulo customizado por segmento de URL
collections: # coleções genéricas (opcional)
team:
dir: team
sort: name
order: asc
per_page: 0 # 0 = sem paginação
blog: # atalho para coleção blog (opcional)
dir: blog # diretório dos posts (padrão: blog)
sort: publish_date # campo de ordenação por data editorial
order: desc # asc ou desc (padrão: desc)
drafts: false # incluir drafts no build (padrão: false)
per_page: 0 # itens por página — 0 = sem paginação (padrão: 0)
list_layout: list # nome do layout de listagem (padrão: list)
item_layout: item # nome do layout por post (padrão: item)
tags: false # true → gera páginas de arquivo /blog/tags/<tag>/
dates: off # off | day | month → arquivos /blog/<data>/
author: # autor padrão de todo item da coleção (JSON-LD + template)
name: Jane Doe
```theme
Nome do tema instalado em themes/. O Seed vai carregar componentes de themes/<nome>/components/ e assets de themes/<nome>/assets/.
```yaml theme: seed-theme ```
Se omitido, nenhum tema é carregado — apenas componentes em src/components/ ficam disponíveis.
js e css
Controlam como os assets do tema (meu-tema.js, meu-tema.css) são entregues ao browser:
| Modo | Comportamento | Quando usar |
|---|---|---|
file | Gera <script src="static/..."> e <link rel="stylesheet" href="static/..."> | Padrão. Permite cache do browser, ideal para produção |
inline | Injeta o conteúdo do arquivo diretamente no HTML | Sites que precisam de HTML completamente auto-contido (email, embed) |
Os dois modos são independentes — é válido ter js: inline com css: file ou qualquer combinação.
Scripts de componentes individuais (arquivo .js ao lado do .yaml) são sempre injetados inline, independentemente do modo configurado.
minify
Quando true, o HTML gerado pelo seed build é minificado via minify-html — remove espaços desnecessários, comentários HTML e atributos redundantes.
```yaml minify: true ```
- Reduz o tamanho dos arquivos HTML gerados
- Preserva espaços dentro de
<pre>e<code>por design - Não afeta o
seed dev— o dev server serve sempre HTML legível
url
URL base do site. Quando definida, o seed build gera automaticamente um sitemap.xml em dist/:
```yaml url: https://meusite.com.br ```
Se omitido, o sitemap não é gerado. Para detalhes, veja Sitemap.
llms
Gera arquivos em markdown do conteúdo do site para consumo por LLMs. Aceita um valor simples (modo) ou um dicionário com opções adicionais:
```yaml # forma simples llms: both # index | full | both | true # forma dicionário llms: mode: both nav: _sidebar.seed # arquivo .seed usado para ordenar o índice orphans: skip # skip | include skip: [meu-componente] # nomes extras a descartar (estende o padrão) ```
index gera dist/llms.txt (índice: título + URL + descrição de cada página); full gera dist/llms-full.txt (markdown completo concatenado); both/true geram os dois. Sem llms definido, nenhum arquivo é gerado. Esta documentação usa llms: both. Detalhes completos em llms.txt.
collections e blog
Configura coleções de conteúdo (equipe, portfólio, blog etc.). O blog pode ser configurado com a chave blog: como atalho, ou dentro de collections:. Se omitido, o Seed detecta automaticamente a presença de src/blog/ e usa os valores padrão.
```yaml
# Coleções genéricas
collections:
team:
dir: team
sort: name
order: asc
per_page: 0 # 0 = sem paginação
list_layout: list
item_layout: item
# Atalho para o blog
blog:
dir: blog # diretório dos posts (padrão: blog)
sort: publish_date # campo de ordenação por data editorial
order: desc # asc ou desc (padrão: desc)
drafts: false # incluir drafts no build (padrão: false)
per_page: 10 # itens por página — 0 = sem paginação
list_layout: list # nome do layout de listagem (padrão: list)
item_layout: item # nome do layout por post (padrão: item)
```tags: true gera páginas de arquivo por tag (/blog/tags/<slug>/); dates: day ou dates: month geram arquivos cronológicos (/blog/<YYYY-MM-DD>/ ou /blog/<YYYY-MM>/). Ambos exigem publish_date em todo item — o build falha apontando o arquivo se faltar. author: define o autor padrão (JSON-LD e variável {author_name} no template) para todo item da coleção; uma página pode sobrescrever com author_name próprio ou remover com author: false.
Para detalhes completos, veja Coleções e @each e Blog.
lang e timezone
lang define o idioma padrão do documento (<html lang="...">) e a base do og:locale — cada página pode sobrescrever com seu próprio lang no front matter. timezone define o fuso horário IANA usado para normalizar todos os campos de data (publish_date, update_date, expire_date, creation_date); um valor inválido gera erro de build.
```yaml lang: pt-BR timezone: America/Sao_Paulo ```
Para o modelo completo de datas e publicação, veja Coleções e @each. Para lang/hreflang/Open Graph/JSON-LD, veja SEO & Metadados.
person e breadcrumbs
person descreve o dono do site — usado quando uma página tem author: true e para o JSON-LD Person/publisher na home. breadcrumbs controla a geração automática de BreadcrumbList (JSON-LD, não visual):
```yaml
person:
name: Jane Doe
url: https://meusite.com
sameAs:
- https://x.com/jane
breadcrumbs:
enabled: true
labels:
blog: Blog
```Detalhes completos em SEO & Metadados.
ga e ga-dev
Injeta automaticamente o snippet do Google Analytics 4. Use ga para produção e ga-dev para o dev server:
```yaml ga: G-PROD000000 ga-dev: G-DEV0000000 ```
Para detalhes completos, veja Google Analytics.
gtm e gtm-dev
Injeta os snippets do Google Tag Manager (head + body). Use gtm para produção e gtm-dev para o dev server:
```yaml gtm: GTM-PROD000 gtm-dev: GTM-DEV0000 ```
Para detalhes completos, veja Google Tag Manager.
head
Injeta HTML arbitrário no <head> de todas as páginas — fontes, meta tags, scripts de terceiros:
```yaml head: | <link rel="preconnect" href="https://fonts.googleapis.com"> <meta property="og:image" content="https://meusite.com/og.png"> ```
Diferente de ga/gtm, o head é injetado tanto no dev quanto no build. Para detalhes completos, veja Conteúdo Custom no Head.
Sem seed.yaml
O arquivo é opcional. Se não existir, o Seed roda sem tema, sem minificação e com assets em modo file. Útil para projetos simples com componentes apenas em src/components/.
Feito com ❤️ e Seed