---
title: Changelog
description: >-
  Escreva as notas de lançamento como arquivos de conteúdo normais ou obtenha-as do GitHub Releases, e o Blume constrói automaticamente uma página de cronologia e um feed RSS.
---

O Blume traz um changelog pronto para usar. Escreva cada versão como um arquivo de conteúdo normal, marque com `type: changelog`, e o Blume reúne todas as entradas em uma página de cronologia gerada e em um feed RSS — sem layout para construir, sem lista para manter. Ou dispense os arquivos por completo e [alimente seu changelog a partir do GitHub Releases](#from-github-releases).

## Escrever uma entrada [#write-an-entry]

Uma entrada de changelog é uma página `.md` ou `.mdx` normal com `type: changelog` no frontmatter. Por convenção elas ficam em `changelog/`, mas o que importa é o tipo — não a pasta:

```mdx changelog/v1-2-0.mdx lineNumbers
---
title: v1.2.0
type: changelog
date: 2026-06-20
changelog:
  version: 1.2.0
  category: Features
---

A big batch of components landed this release — columns, frames, trees, and tooltips, plus code groups that render as proper language tabs.

- New `Accordion`, `Expandable`, and `Tooltip` components
- `CodeGroup` tabs with flush code blocks
```

Atribua uma `date` a cada entrada para que a cronologia e o feed ordenem da mais recente para a mais antiga. Uma data YAML sem aspas serve — o Blume normaliza.

### O objeto `changelog` [#the-changelog-object]

O objeto opcional `changelog` adiciona metadados mais ricos para a cronologia e o feed:

| Prop | Type | Default | Description |
| - | - | - | - |
| `changelog.version?` | `string` | - | Release version. Falls back to a v-prefixed label when there's no title. |
| `changelog.category?` | `string` | - | Shown as a tag beside the entry, e.g. Release, Features, Fixes. |
| `changelog.date?` | `string` | - | Publish date. May live here or at the top level — both feed the timeline and RSS feed. |

## A página de cronologia [#the-timeline-page]

Assim que você tiver pelo menos uma entrada `type: changelog`, o Blume gera automaticamente uma página **`/changelog`**. Ela é exibida como uma cronologia focada e de largura total — sem barra lateral nem índice — com cada entrada da mais recente para a mais antiga, mostrando a data, o rótulo e a tag `category` em uma coluna à esquerda, ao lado do conteúdo:

- O **título** da entrada vira o rótulo dela — ou `v{version}` quando não há título. Ele leva à página da própria entrada, então uma versão é ao mesmo tempo uma linha na cronologia e um permalink compartilhável.
- A `category` é exibida como uma tag ao lado da data.
- Os rascunhos e as entradas com `sidebar.hidden` são ignorados.

A página só aparece quando nada já ocupa a rota `/changelog`. Para substituí-la pelo seu próprio design, adicione uma [página personalizada](/docs/advanced/custom-pages) em `pages/changelog.astro` — ela assume o controle e o Blume para de gerar a cronologia padrão.

Como essa página é gerada e não escrita, ela não faz parte da árvore de conteúdo — então uma [aba](/docs/content/navigation#tabs) do cabeçalho que aponta para `/changelog` resolve para a entrada mais recente. Dê um `href` à aba para chegar ao índice em si:

```ts blume.config.ts
navigation: {
  tabs: [
    { label: "Changelog", path: "/changelog", href: "/changelog" },
  ],
}
```

### Agrupado por versão principal [#grouped-by-major-version]

Quando suas versões seguem o [semver](https://semver.org) e abrangem mais de uma versão principal, o Blume pagina a cronologia por versão principal. Apenas a linha principal mais recente é exibida, com um botão **Show N.x releases** no rodapé que revela a versão principal imediatamente mais antiga, um clique por vez:

- A detecção é automática — sem configuração. Ela só entra em ação quando todas as versões listadas correspondem a `major.minor.patch` e existe mais de uma versão principal; caso contrário, a cronologia continua plana.
- Ela tolera as tags com escopo que os monorepos publicam, então `pkg@2.0.0` fica agrupado em `2.x` e `pkg@1.4.0` em `1.x`.
- É melhoria progressiva: todas as versões continuam presentes no HTML da página (e no feed RSS e no índice de busca), então os leitores sem JavaScript — e os rastreadores — veem o histórico completo. O botão só recolhe as versões principais mais antigas depois que a página hidrata.

## A partir do GitHub Releases [#from-github-releases]

Em vez de escrever as entradas à mão, aponte a [fonte `github-releases`](/docs/content/sources#github-releases) integrada para um repositório e cada versão vira uma entrada `type: changelog` — a mesma cronologia e o mesmo feed, alimentados diretamente pelas versões que você já publica. O próprio [changelog](/changelog) do Blume é construído assim:

```ts blume.config.ts
content: {
  sources: [
    { type: "filesystem", root: "content" },
    {
      type: "github-releases",
      prefix: "changelog",
      owner: "acme",
      repo: "sdk",
    },
  ],
}
```

O nome da versão vira o título, a tag dela vira `changelog.version` e a respectiva data de publicação ordena a cronologia. Cada página de versão também recebe uma meta description única, resumida a partir das notas — sem markdown, sem títulos de seção nem prefixos de hash de commit dos changesets, cortada para o comprimento de trecho de busca que o [`blume audit`](/docs/reference/cli#auditing-the-built-site) verifica — em vez de recorrer à descrição do site. Um repositório privado se autentica com a variável de ambiente `GITHUB_TOKEN`. Veja [Fontes de conteúdo](/docs/content/sources#github-releases) para todas as opções.

## O feed RSS [#the-rss-feed]

O Blume também constrói um feed do changelog em **`/changelog/rss.xml`**, ordenado por `date` da mais recente para a mais antiga. Os feeds precisam de uma URL absoluta do site, então defina [`deployment.site`](/docs/deployment); o Blume então injeta uma tag `<link rel="alternate">` em todas as páginas para que os leitores o descubram automaticamente.

O feed vem ativado por padrão. Ajuste em [`seo.rss`](/docs/discoverability/rss):

```ts blume.config.ts lineNumbers
seo: {
  rss: {
    enabled: true,
    types: ["blog", "changelog"],
    limit: 50,
  },
}
```

Remova `"changelog"` de `rss.types` para dispensar o feed mantendo a cronologia.

## Dados estruturados [#structured-data]

Quando os [dados estruturados](/docs/discoverability/structured-data) estão ativos, cada entrada do changelog é emitida como um **`TechArticle`** do schema.org com a descrição e a data de publicação dela, para que os mecanismos de busca possam indexar as versões como artigos datados.

**[Frontmatter](/docs/reference/frontmatter#changelog)**

O esquema completo do frontmatter do changelog.

**[Custom Pages](/docs/advanced/custom-pages)**

Substitua a cronologia gerada pelo seu próprio layout.
