Blades uses mustache templates with the amazingly fast Ramhorns engine. While their syntax is extremely simple (and can be learned in a few minutes), they are surprisingly expressive.

The templates are loaded from the templates subdirectory, or secondarily from the $theme_dir/$theme/templates directory if a theme is specified in the config. Here is the list of variables at your disposal, all with their type specified.

These variables are common for all pages:

// The data of the whole site site: Site // Main page in the site index: Page // A dictionary of all the taxonomies used in the site classification: Map<string, Taxonomy>


When rendering a page, these variables are available:

// Title of the page title: string // Date when the page was created date: Option<DateTime> // Image representing the page image: string // A brief summary of the page summary: string // The main content of the page content: string

// The full link of the page, with the site URL included permalink: string // The path of the page, beginning with /, without the last segment // When rendered as section ({{#path}}), it acts as a list of Ancestors path: string // The trailing segment of this page's URL // Without the .html extension // For sections, it's the folder name rather than index slug: string

// A list of classifications for each of the provided taxonomies taxonomies: Map<string, List<string>> // A list of pictures provided by this page pictures: List<Picture>

// Is this page a section? is_section: bool // Is the page hidden from the list of its parent's subpages and subsections? hidden: bool // A priority of this page for SEO, in the range of 0-1 priority: float

// The page one level up in the hierarchy (for the index page it's itself) parent: Page // The previous page on this level, if any previous: Option<Page> // The next page in this level, if any next: Option<Page> // A list of all the subpages (empty if not section) pages: List<Page> // A list of all the subsections (empty if not section) subsections: List<Page> // Available when the subpages are paginated pagination: Option<Pagination>

// The user provided values of any type extra: Map<string, Any> // Marks whether this page is the active one // Can be used to highlight the current page in a list of pages active: bool


When the pagination is available, you can use these variables in the pagination section ({{#pagination}} ... {{/pagination}}):

// Number of the current page in the paginated pages current: integer // Number of the previous page in the paginated pages // This is also its slug previous: Option<integer> // Number of the next page in the paginated pages // This is also its slug next: Option<integer> // Number of the paginated pages length: integer


When the page path is used as a section ({{#path}} ... {{/path}}), it is interpreted as a list of ancestors. This makes making breadcrumbs possible. For the path segments, the following are available:

// Name of the current path segment name: string // The full path up to this segment full: string


When the date is available, you can use these variables in the datetime section ({{#date}} ... {{/date}}), roughly corresponding to strftime:

// Year y: integer // Month m: integer // Day, 0-padded d: integer // Day, space-padded e: integer // Hour H: integer // Minute M: integer // Second S: integer // First 3 letters of the English month name b: string // First 3 letters of the English weekday name a: string


When pictures are available, you can use these variables in the pictures section ({{#pictures}} ... {{/pictures}} for a list of them):

# Id string of the picture, used for the generated URL in the gallery page pid: string # An associated caption of the picture caption: string # An alternative text displayed when the image can't be loaded of for accessibility alt: string # File name of the image file: string # Date and time of when the image was taken taken: Option<DateTime> // The full link of the picture, with the site URL included permalink: string


When a page contains come picture, the gallery is created. The page of each photo in the gallery gets the following variables:

// The current picture current: Picture // The previous picture in the list (the last one for the first one) previous: Picture // The next picture in the list (the first one for the last one) next: Picture // The parent page, from which this gallery is generated parent: Page


Each taxonomy that is rendered gets the following variables:

// Full name of the taxonomy title: string // A short name of the taxonomy, used in the URL slug: string // A brief description of the taxonomy description: string // A list of keys used in this taxonomy and their corresponding pages keys: List<KeyPages>

Key pages

When keys in the taxonomy are available, you can use these variables in the keys section ({{#keys}} ... {{/keys}} for a list of them):

// Name of this key (also used in the URL of the key page) key: str // All the pages with this key in this taxonomy pages: List<Page>

Taxonomy key

When rendering a page of a single taxonomy key, these variables are available:

// Name of this key (also used in the URL) title: string // The parent taxonomy where this key belongs to taxonomy: Taxonomy // The pages using this key pages: List<Page> // Optional pagination, if enabled for this taxonomy pagination: Option<Pagination>


The data of the whole site, available for every page in the site section ({{#site}} ... {{/site}}):

// The main title of the site title: string // The main URL of the site url: string description: string keywords: string // A representative image of the site image: string // Info about the author of the site author: Author

// Path of the site where the assets are moved to assets: string // Is sitemap rendered? sitemap: bool // Is atom feed rendered? atom: bool // Is RSS feed rendered? rss: bool // Are taxonomies not explicitly defined in the config, but used in some page rendered? implicit_taxonomies: bool // Are pages without date provided assigned the date of file creation? dates_of_creation: bool

// The user provided values of any type extra: Map<string, Any>


Info about the site author, available as a subsection of site ({{#site}}{{#author}} ... {{/author}}{{/site}}):

name: string uri: string email: string avatar: string