Additional Features using MkDocs Plugins
Plugins are used to add new features into the MkDocs engine. Those plugins can change the way you manage and write your documents, or even can change the rendered content. This post showes the pluguns used in this site for reference.
Last update: 2023-02-07
Table of Content
Places to get MkDocs Plugins: Official List, Wheelodex, and GitHub.
Awesome Pages#
MkDocs Awesome Pages plugin simplifies configuring page titles and their entries order.
Install the plugin:
Enable it in the config file mkdocs.yml:
Create a YAML file named .pages in a directory and use a local nav attribute to customize the navigation in each folder with some more extra configurations:
-
A 3-dots
...entry is used to specify where all remaining items should be inserted. It can filter the remaining items using glob patterns or regular expressions. For example:The pattern is checked against the basename of remaining items - not their whole path, so it can be used to filter files in sub-folders.
-
Hide directory by setting the
hideattribute totrue. -
Optionally set the directory title using the
titleattribute.
Optionally specify a title for the navigation entry before its document path. For example: -
Collapse single nested pages by setting
collapse_single_pagesattribute totrue.
Example:
title: New section
nav:
- ... | introduction-*.md
- ...
- summary.md
- First page: page1.md
- Link Title: https://example.com
hide: false
collapse_single_pages: false

Section index#
This plugin is no longer used in this site! The feature navigation.indexes comes with Material theme already does the work of this plugin.
In MkDocs, each directory will become a section, and by default, section only contains its children pages. There is no page associated to a section. MkDocs Section Index is a plugin that attaches the first child page, usually an index page, to the section link.
Install the plugin:
Enable it in the config file mkdocs.yml:
plugins:
- search # built-in search must be always activated
- awesome-pages
- section-index # must be after awesome-pages # (1)
- Note that the feature
navigation.indexescomes with Material theme already to the work of this plugin.
The merged section page shows the section’s title from the directory name, not the attached page’s title.

Revision date#
To keep tracking the last modified date of a post, git-revision-date plugin can be used. A better alternative plugin is git-revision-date-localized which provides more types of date format (e.g. in time-ago format), and the creation date.
Install the plugin:
Enable it in the config file:
plugins:
- search # built-in search must be always activated
- git-revision-date-localized:
enable_creation_date: true
type: iso_date
This plugin creates new field in the post’s meta-data which content the creation and update date. This information is used to sort the posts by revision date to get recently updated items, as shown in the Recent blog posts page.
Print to PDF#
Enabling this plugin causes very long build time when you have lot of posts!
To export the posts on this blog, there are some plugins which can do it. However, most of them depend on Weasy Print which in turn depends on many other packages. There is one plugin that prints in an easy and simple way: use browser to print page by sending print command (like press Ctrl + S).
More detail of installation and configuration the MkDocs PDF with JS plugin for printing to PDF can be read in Print to PDF.
Macros#
This plugin is no longer used in this site!
MkDocs Macros is a plugin/ framework that makes it easy to produce richer and more beautiful pages. It can do two things:
-
Transform the markdown pages into a Jinja2 templates that can use variables, macros and filters.
-
Replace MkDocs plugins for a wide range of tasks: e.g. manipulating the navigation, adding files after the HTML pages have already been generated etc.
Install the plugin:
Enable it in the config file:
Incomplete data in macro
The macro {{navigation.pages}} contains a list of all pages, but the data of each page maybe not complete, such as title or meta-data.
This issue happens when rendering a the content of the first page, but it needs to know the content of the second page which has not been parsed already as it is waiting for the first page getting done.
DrawIO Exporter#
This plugin is no longer used in this site!
DrawIO Exporter is a great plugin that exports the .drawio diagrams to images at build time and insert them to the document. This plugin can replace the Mermaid plugin, and it is faster thanks to no JavaScript needed at runtime. It also helps to enable instant navigation mode of the Material theme.
Install the plugin:
Enable it in the config file:
To create end edit .drawio diagram, download and install the diagrams.net application.
To import a diagram, just use the syntax for inserting an image:
The plugin will generate an SVG image to a cache folder (default in docs\drawio-exporter), and then modify the image’s source to point to the generated image.
If the diagram is a multipage document, append the index of the page as an anchor in the image’s URL to select the target page:
Alternative method
Using Draw.io Integration extension in Visual Studio Code, I can save a DrawIO diagram as a .drawio.svg file, then use that file directly in the page as an usual image. However this method will not support multiple pages in the drawing:
Mermaid#
This plugin is no longer used in this site!
MkDocs Mermaid2 is a plugin to render textual graph description into Mermaid graphs (flow charts, sequence diagrams, pie charts, etc.).
Install the plugin:
Enable it in the config file:
And configure the code block parser for mermaid2 blocks:
markdown_extensions:
- pymdownx.superfences:
custom_fences:
- name: mermaid
class: mermaid
format: !!python/name:mermaid2.fence_mermaid
Example:
``` mermaid
graph LR
A[Start] --> B{Error?};
B -->|Yes| C[Hmm...];
C --> D[Debug];
D --> B;
B ---->|No| E[Yay!];
```
will render as: