Skip to content

Setting up versioning

Material for MkDocs makes it easy to deploy multiple versions of your project documentation by integrating with external utilities that add those capabilities to MkDocs, i.e. mike. When deploying a new version, older versions of your documentation remain untouched.

Configuration

Versioning

Source · Utility

mike makes it easy to deploy multiple versions of your project documentation. It integrates natively with Material for MkDocs and can be enabled via mkdocs.yml:

extra:
  version:
    provider: mike

This will render a version selector in the header next to the title of your project:

Version selection

A demo is worth a thousand words — check it out at squidfunk.github.io/mkdocs-material-example-versioning

Why use mike?

mike is built around the idea that once you've generated your docs for a particular version, you should never need to touch that version again. This means you never have to worry about breaking changes in MkDocs, since your old docs (built with an old version of MkDocs) are already generated and sitting in your gh-pages branch.

While mike is flexible, it's optimized around putting your docs in a <major>.<minor> directory, with optional aliases (e.g. latest or dev) to particularly notable versions. This makes it easy to make permalinks to whatever version of the documentation you want to direct people to.

Note that you don't need to run mike install-extras as noted in the official documentation, as mike is now natively integrated with Material for MkDocs.

Version warning

Source · Insiders only

If you're using versioning, you might want to display a warning when the user visits any other version than the latest version. Using theme extension, you can define the outdated block:

{% block outdated %}
  You're not viewing the latest version.
  <a href="{{ '../' ~ base_url }}"> <!-- (1) -->
    <strong>Click here to go to latest.</strong>
  </a>
{% endblock %}
  1. Given this value for the href attribute, the link will always redirect to the root of your site, which will then redirect to the latest version. This ensures that older versions of your site do not depend on a specific alias, e.g. latest, to allow for changing the alias later on without breaking earlier versions.

This will render a version warning above the header:

Version warning

By default, the default version is identified by the latest alias. If you wish to set another alias as the latest version, e.g. stable, add the following to mkdocs.yml:

extra:
  version:
    default: stable

Make sure that this matches the default version.

Stay on page

Source · Insiders only

Insiders improves the user experience when switching between versions: if version A and B contain a page with the same path name, the user will stay on the current page:

docs.example.com/0.1/     -> docs.example.com/0.2/
docs.example.com/0.1/foo/ -> docs.example.com/0.2/foo/
docs.example.com/0.1/bar/ -> docs.example.com/0.2/bar/
docs.example.com/0.1/     -> docs.example.com/0.2/
docs.example.com/0.1/foo/ -> docs.example.com/0.2/
docs.example.com/0.1/bar/ -> docs.example.com/0.2/

A demo is worth a thousand words — check it out at squidfunk.github.io/mkdocs-material-example-versioning

Usage

While this section outlines the basic workflow for publishing new versions, it's best to check out the official documentation to make yourself familar with mike.

Publishing a new version

If you want to publish a new version of your project documentation, choose a version identifier and update the alias set as the default version with:

mike deploy --push --update-aliases 0.1 latest

Note that every version will be deployed as a subdirectory of your site_url, e.g.:

  • docs.example.com/0.1/
  • docs.example.com/0.2/
  • ...

Setting a default version

When starting with mike, a good idea is to set an alias as a default version, e.g. latest, and when publishing a new version, always update the alias to point to the latest version:

mike set-default --push latest

When publishing a new version, mike will create a redirect in the root of your project documentation to the version associated with the alias:

docs.example.com docs.example.com/0.1

Back to top