Page properties
Use page.* to access metadata from the current page's frontmatter. These properties let you dynamically reference page values without hardcoding them.
For project-level configuration, see Project properties. For shared values defined once in retype.yml, see the Data object section.
Basic usage
---
author: Jane Smith
---
This guide was written by {{ page.author }}.
Output:
This guide was written by Jane Smith.
Common properties
Date properties
Use page.created and page.lastUpdated when you want to show when a page was first created and when it was last updated.
---
created: 2024-05-14
lastUpdated: 2026-03-01
---
Published: {{ page.created }}
Updated: {{ page.lastUpdated }}
Output:
Published: 2024-05-14
Updated: 2026-03-01
Working with arrays
Access individual items using bracket notation:
---
tags: [guide, tutorial, beginner]
authors: [Alice, Bob, Charlie]
---
First tag: {{ page.tags[0] }}
Second author: {{ page.authors[1] }}
Output:
First tag: guide
Second author: Bob
Nested properties
Access nested objects using dot notation:
---
author:
name: Jane Smith
email: jane@example.com
meta:
title: Custom SEO Title
---
Author: {{ page.author.name }}
Email: {{ page.author.email }}
Meta title: {{ page.meta.title }}
Output:
Author: Jane Smith
Email: jane@example.com
Meta title: Custom SEO Title
Data object
Use data in a page's frontmatter to define custom values for that page only.
---
title: Release notes
data:
version: v5.1
owner:
name: Jane Smith
links:
feedback: https://example.com/feedback
features:
- Faster search
- New includes support
---
Access these values through page.data:
{{ page.data.version }}
{{ page.data.owner.name }}
{{ page.data.links.feedback }}
Page data keys are also exposed as top-level template variables, so these are equivalent:
{{ page.data.version }}
{{ page.data["version"] }}
{{ version }}
Samples
Show page-specific release information:
This page covers release **{{ page.data.version }}**.
Render page-specific contact details:
Maintained by {{ page.data.owner.name }}.
Generate links stored with the page content:
- [Send feedback]({{ page.data.links.feedback }})
Loop through page-specific lists:
{{ for feature in page.data.features }}
- {{ feature }}
{{ end }}
If the same key exists in both places, page data overrides project data for the current page. Use page.data.* for page-specific values and project.data.* for shared values from retype.yml.
Escaping template syntax
Inline escaping
To display literal {{ }} syntax without the template engine processing it, wrap the content in opening {%{ and closing }%} escape tags:
{%{ {{ page.title }} }%}
This is useful when documenting template syntax or showing code samples that include double curly braces.
Page-level escaping
To disable templating for an entire page, set templating: false in the page settings:
---
templating: false
---
Project-level escaping
To disable templating project-wide, update your retype.yml with the following:
templating:
enabled: false