Browse documentation

Keep documentation for older releases

On this page

A historical site lets someone using version 1.0 read the version 1.0 guide, even after version 2.0 changes the project. DocSprout builds each release from the files saved in that release’s Git tag.

If you only want the latest documentation, you can skip this page and use the single-version Pages path.

Create the version manifest

Save docs/versions.json:

{
  "schema_version": 1,
  "current": "1.1.0",
  "versions": [
    {"release": "1.1.0", "source_ref": "v1.1.0"},
    {"release": "1.0.0", "source_ref": "v1.0.0"}
  ]
}

release is the label readers see. source_ref is the Git tag containing that release’s files. current must match one item in the list.

Use a tag such as v1.1.0 or a full 40-character commit SHA. Do not use a moving branch name such as main, because its files can change later.

Why the release check is strict

Run this after committing the manifest and creating the current tag:

docsprout check-release

The check confirms that:

These rules prevent a public release label from quietly showing different words later. The glossary explains HEAD, immutable, source ref, tag and SHA.

Build every release

Run:

docsprout build-all --output build/docs-site

DocSprout reads every tag into a temporary folder and builds only the files that existed there. It never copies today’s guide into an older release.

Older tags do not need DocSprout configuration. If a tag contains only Markdown, DocSprout creates simple navigation from those historical files. It chooses a home page from index.md, README.md, a familiar start page, or the first available document.

Follow the safe release order

The order is: update manifest, check, commit the release branch, push it, open the PR, wait for CI, merge, create the annotated tag on the merge commit, run the release check and full build, then push the tag. Use the exact commands in the pre-publish checklist.

The maintained historical example demonstrates two small releases. Its automated test builds the same Git history twice and compares every generated byte.