Browse documentation

Start here

OverviewYour first siteBuild and inspect your siteWrite useful documentationGlossaryTroubleshooting

Shape your site

ConfigurationAuthoring recipesSections and identityCustomize the home pageThemesCustom CSS (advanced)Machine-readable contractsVisual fixturesMathematics

Publish safely

Audit your documentationGitHub PagesPre-publish checklistHistorical documentationQualification evidenceMigration

Pascal and project internals

PasWeave integrationArchitectureArchitecture analysisProject specification (historical)

Project decisions

BoundariesHistory and customisationRelease-tag publicationReader-first documentationLocal syntax highlightingExisting-repository adoptionGitHub Pages setupDocumentation auditSimple configurationv1.0 stable contractDocSprout rebrand

Keep documentation for older releases

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.