Editor-friendly templates
Alto
Alto is a minimal and modern template for static documentation sites.
Important
This template is no longer actively maintained but remains available for reference and learning. For production sites, we recommend our modern templates.
Alto is a minimal and modern Hugo template for static documentation sites, created by and optimized for CloudCannon. Browse through a live demo.
Designed initially for open-source software, Alto has many built-in features to aid both site users and documentation writers:
- Built-in static search with Pagefind;
- Twelve pre-configured Hugo shortcodes, including diff syntax highlighting, GitHub Gist embeds, and tree diagram formatter;
- Light/dark modes, with configurable color palettes;
- Easily configurable navigation and footer content;
- Flexible grouping options for docs pages;
- Automatic anchor links to subheadings;
- Optional announcement banner;
- Styled with Sass;
- Optimized for editing and publishing on CloudCannon.
Showcase
CloudCannon uses Alto as the documentation site template for our own open-source tools. Take a look at these sample sites to see what's possible with static documentation on Alto:
Expectations
Dependencies
- This template expects
alpinejsto be installed by the site. - This template expects Pagefind to run after a site build.
General info
Required information can be seen in the data/meta.yml
project_name- Used for SEO tags, alt text, and similar places
default_og_image- Self explanatory
favicon- set the path to the favicon files
Writing documentation
This site template is intended to be used as a documentation site with a landing page.
content/_index.mdshould be used for the homepage.content/docs/_index.mdrepresents the/docs/page.- All other pages in
docswill live at their respective path.- i.e.
content/docs/this/that.mdrepresents/docs/this/that/
- i.e.
Front matter
title- Used as the page h1, and in page SEO tags
nav_title- Used as a shorter title variant in the side navigation
nav_section- Determines which heading this page should be placed under in the side navigation
- A heading value being referenced here creates it, they are not stored elsewhere
weight- Determines the order in which pages appear in the side navigation (lower is higher)
Navigation
The site side-navigation only supports one level of nesting, and is configured via the nav_section front matter.
The top-level groups are in the order that they are first encountered after sorting all pages by weight. Lowering a page's weight may move the nav_section for that page up the hierarchy.
Pages can be placed outside of a group (alongside the homepage) by assigning them the nav_section of Root.
Shortcodes
Diffcode
This template provides a diffcode shortcode that can provide source highlighting alongside diff highlighting. This shortcode should wrap a markdown code block that has a tagged language. For example, from the pagefind docs:
{{< diffcode >}}
```js
new PagefindUI({
element: "#search",
+ mergeIndex: [{
+ bundlePath: "https://docs.example.com/_pagefind"
+ }]
})
```
{{< /diffcode >}}
The code block will be rendered with the leading + removed from each line, and those lines will then be highlighted green to represent a diff.
Tree
This template provides a tree shortcode that can help render an ASCII directory tree structure. The given char (default >) will be replaced with the appropriate box drawing character from the supported set. For example:
{{% tree %}}
package.json
_includes/
>> _layouts/
> >> default.liquid
> >> page.liquid
>> file.liquid
_site/
>> index.html
{{% /tree %}}
Will output:
package.json
_includes/
├─ _layouts/
│ ├─ default.liquid
│ └─ page.liquid
└─ file.liquid
_site/
└─ index.html
The tree shortcode delegates its output to diffcode automatically, so lines can be prepended with a + character to represent new files.
Page links
All headings on doc pages will have a clickable hash link inserted in the left gutter.
Banner
data/banner.yml can be provided to show a banner on the top of each page:
enable_banner- Set to
trueto show the banner
- Set to
html- HTML (placed inside of a
<p>tag) to show in the banner. Supports adding alpine directives.
- HTML (placed inside of a
id- An ID used to store that the banner has been closed in localStorage. Make sure to change this when adding a new banner so that users who dismissed the last one will see it.
show_until- A date timestamp, after which the banner should not be shown. This is useful for time-sensitive banners, such as a notice about a new release.
Important
This template is no longer actively maintained but remains available for reference and learning. For production sites, we recommend our modern templates.
Alto is a minimal and modern Eleventy template for static documentation sites, created by and optimized for CloudCannon. Browse through a live demo.
Designed initially for open-source software, Alto has many built-in features to aid both site users and documentation writers:
- Built-in static search with Pagefind;
- Eleven pre-configured shortcodes, including diff syntax highlighting, GitHub Gist embeds, and tree diagram formatter;
- Light/dark modes, with configurable color palettes;
- Easily configurable navigation and footer content;
- Flexible grouping options for docs pages;
- Automatic anchor links to subheadings;
- Optional announcement banner;
- Styled with Sass;
- Optimized for editing and publishing on CloudCannon.
Showcase
CloudCannon uses Alto as the documentation site template for our own open-source tools. Take a look at these sample sites to see what's possible with static documentation on Alto:
Expectations
Dependencies
- This template expects
alpinejsto be installed by the site. - This template expects Pagefind to run after a site build.
General info
Required information can be seen in the data/meta.yml
project_name- Used for SEO tags, alt text, and similar places
default_og_image- Self explanatory
favicon- set the path to the favicon files
Writing documentation
This site template is intended to be used as a documentation site with a landing page.
pages/index.mdshould be used for the homepage.docs/_index.mdrepresents the/docs/page.- All other pages in
docswill live at their respective path.- i.e.
docs/this/that.mdrepresents/docs/this/that/
- i.e.
Front matter
title- Used as the page h1, and in page SEO tags
eleventyNavigation > key- Used as a shorter title variant in the side navigation
tags- Determines which heading this page should be placed under in the side navigation
- 'page' refers to top level pages and will not display a category heading in the navigation
order- Determines the order in which pages appear in the side navigation (lower is higher)
Navigation
The site side-navigation only supports one level of nesting, and is configured via the eleventyNavigation front matter.
The top-level groups (tags: 'page') are in the order that they are first encountered after sorting all pages by order. Lowering a page's weight may move the eleventyNavigation for that page up the hierarchy.
Pages can be placed outside of a group (alongside the homepage) by assigning them the tags of page.
Shortcodes
Diffcode
This template provides a diffcode shortcode that can provide source highlighting alongside diff highlighting. This shortcode should wrap a markdown code block that has a tagged language. For example, from the pagefind docs:
{% capture content %}
```js
new PagefindUI({
element: "#search",
+ mergeIndex: [{
+ bundlePath: "https://docs.example.com/_pagefind"
+ }]
})
```
{% endcapture %}
{% diffcode content %}
The code block will be rendered with the leading + removed from each line, and those lines will then be highlighted green to represent a diff.
Tree
This template provides a tree shortcode that can help render an ASCII directory tree structure. The given char (default >) will be replaced with the appropriate box drawing character from the supported set. For example:
{% capture treecontent %}
package.json
_includes/
>> _layouts/
> >> default.liquid
> >> page.liquid
>> file.liquid
_site/
>> index.html
{% endcapture %}{% tree treecontent %}
Will output:
package.json
_includes/
├─ _layouts/
│ ├─ default.liquid
│ └─ page.liquid
└─ file.liquid
_site/
└─ index.html
The tree shortcode delegates its output to diffcode automatically, so lines can be prepended with a + character to represent new files.
Page links
All headings on doc pages will have a clickable hash link inserted in the left gutter.
Banner
data/banner.yml can be provided to show a banner on the top of each page:
enable_banner- Set to
trueto show the banner
- Set to
html- HTML (placed inside of a
<p>tag) to show in the banner. Supports adding alpine directives.
- HTML (placed inside of a
id- An ID used to store that the banner has been closed in localStorage. Make sure to change this when adding a new banner so that users who dismissed the last one will see it.
show_until- A date timestamp, after which the banner should not be shown. This is useful for time-sensitive banners, such as a notice about a new release.