VitePress · Schema

VitePress Page Frontmatter

Schema for YAML frontmatter in VitePress Markdown pages. Frontmatter allows per-page overrides of site-level and theme-level configuration, as well as page-specific settings like layout, hero content, and feature lists. Frontmatter is defined in the YAML block at the top of a Markdown file between triple-dash delimiters.

DocumentationMarkdownOpen SourceStatic Site GeneratorViteVue

Properties

Name Type Description
title string Override the page title. Overrides the site-level title config for this page.
titleTemplate object Override the title suffix template for this page. Set to false to disable the title suffix.
description string Override the page description meta tag. Overrides the site-level description for this page.
head array Additional head tags to inject for this page, appended after site-level head tags.
layout string The layout template to use for this page. 'doc' applies documentation styles, 'home' enables the landing page layout with hero and features, 'page' is a blank canvas without documentation styles.
navbar boolean Whether to display the navigation bar on this page.
sidebar boolean Whether to display the sidebar navigation on this page.
aside object Location of the aside/table-of-contents component. true=right, 'left'=left, false=hidden.
outline object Which header levels to display in the page outline. Overrides the themeConfig.outline setting.
lastUpdated object Whether to display the last updated timestamp on this page. Can be true/false or a specific date to override the git timestamp.
editLink boolean Whether to display the 'Edit this page' link on this page.
footer boolean Whether to display the footer on this page.
pageClass string Add a custom CSS class to the page container element for per-page styling.
hero object Hero section configuration. Only applies when layout is 'home'.
features array Features section configuration. Only applies when layout is 'home'. Renders a grid of feature cards below the hero.
View JSON Schema on GitHub

JSON Schema

vitepress-frontmatter-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://apievangelist.com/schemas/vitepress/vitepress-frontmatter.json",
  "title": "VitePress Page Frontmatter",
  "description": "Schema for YAML frontmatter in VitePress Markdown pages. Frontmatter allows per-page overrides of site-level and theme-level configuration, as well as page-specific settings like layout, hero content, and feature lists. Frontmatter is defined in the YAML block at the top of a Markdown file between triple-dash delimiters.",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "description": "Override the page title. Overrides the site-level title config for this page."
    },
    "titleTemplate": {
      "oneOf": [
        { "type": "string" },
        { "type": "boolean" }
      ],
      "description": "Override the title suffix template for this page. Set to false to disable the title suffix."
    },
    "description": {
      "type": "string",
      "description": "Override the page description meta tag. Overrides the site-level description for this page."
    },
    "head": {
      "type": "array",
      "description": "Additional head tags to inject for this page, appended after site-level head tags.",
      "items": {
        "type": "array",
        "description": "A head element tuple: [tag, attributes] or [tag, attributes, innerHTML].",
        "minItems": 2,
        "maxItems": 3
      }
    },
    "layout": {
      "type": "string",
      "description": "The layout template to use for this page. 'doc' applies documentation styles, 'home' enables the landing page layout with hero and features, 'page' is a blank canvas without documentation styles.",
      "enum": ["doc", "home", "page"],
      "default": "doc"
    },
    "navbar": {
      "type": "boolean",
      "description": "Whether to display the navigation bar on this page.",
      "default": true
    },
    "sidebar": {
      "type": "boolean",
      "description": "Whether to display the sidebar navigation on this page.",
      "default": true
    },
    "aside": {
      "description": "Location of the aside/table-of-contents component. true=right, 'left'=left, false=hidden.",
      "oneOf": [
        { "type": "boolean" },
        { "type": "string", "enum": ["left"] }
      ],
      "default": true
    },
    "outline": {
      "description": "Which header levels to display in the page outline. Overrides the themeConfig.outline setting.",
      "oneOf": [
        { "type": "number", "minimum": 1, "maximum": 6 },
        {
          "type": "array",
          "minItems": 2,
          "maxItems": 2,
          "items": { "type": "number", "minimum": 1, "maximum": 6 }
        },
        { "type": "string", "enum": ["deep"] },
        { "type": "boolean", "enum": [false] }
      ]
    },
    "lastUpdated": {
      "description": "Whether to display the last updated timestamp on this page. Can be true/false or a specific date to override the git timestamp.",
      "oneOf": [
        { "type": "boolean" },
        { "type": "string", "format": "date" }
      ],
      "default": true
    },
    "editLink": {
      "type": "boolean",
      "description": "Whether to display the 'Edit this page' link on this page.",
      "default": true
    },
    "footer": {
      "type": "boolean",
      "description": "Whether to display the footer on this page.",
      "default": true
    },
    "pageClass": {
      "type": "string",
      "description": "Add a custom CSS class to the page container element for per-page styling."
    },
    "hero": {
      "$ref": "#/$defs/HeroConfig",
      "description": "Hero section configuration. Only applies when layout is 'home'."
    },
    "features": {
      "type": "array",
      "description": "Features section configuration. Only applies when layout is 'home'. Renders a grid of feature cards below the hero.",
      "items": { "$ref": "#/$defs/FeatureItem" }
    }
  },
  "$defs": {
    "HeroConfig": {
      "type": "object",
      "description": "Configuration for the home page hero section.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The main name/brand text displayed prominently in the hero. Falls back to the site title if not set."
        },
        "text": {
          "type": "string",
          "description": "The hero tagline displayed below the name."
        },
        "tagline": {
          "type": "string",
          "description": "Additional subtext displayed below the main text."
        },
        "image": {
          "description": "An image displayed alongside the hero text. Can be a path string or an object with light/dark variants.",
          "oneOf": [
            { "type": "string" },
            {
              "type": "object",
              "properties": {
                "src": { "type": "string", "description": "Path to the hero image." },
                "alt": { "type": "string", "description": "Alt text for the hero image." },
                "light": { "type": "string", "description": "Path to the light mode hero image." },
                "dark": { "type": "string", "description": "Path to the dark mode hero image." }
              }
            }
          ]
        },
        "actions": {
          "type": "array",
          "description": "Call-to-action buttons displayed in the hero section.",
          "items": { "$ref": "#/$defs/HeroAction" }
        }
      }
    },
    "HeroAction": {
      "type": "object",
      "description": "A call-to-action button in the hero section.",
      "required": ["text", "link"],
      "properties": {
        "theme": {
          "type": "string",
          "description": "Visual style of the button.",
          "enum": ["brand", "alt"],
          "default": "brand"
        },
        "text": {
          "type": "string",
          "description": "Button label text."
        },
        "link": {
          "type": "string",
          "description": "URL the button links to."
        },
        "target": {
          "type": "string",
          "description": "HTML target attribute for the button link."
        },
        "rel": {
          "type": "string",
          "description": "HTML rel attribute for the button link."
        }
      }
    },
    "FeatureItem": {
      "type": "object",
      "description": "A feature card displayed in the features grid on the home page.",
      "required": ["title"],
      "properties": {
        "icon": {
          "description": "An emoji, image path, or object with light/dark image variants for the feature icon.",
          "oneOf": [
            { "type": "string" },
            {
              "type": "object",
              "properties": {
                "src": { "type": "string", "description": "Image path for the icon." },
                "alt": { "type": "string", "description": "Alt text for the icon image." },
                "light": { "type": "string", "description": "Image path for light mode icon." },
                "dark": { "type": "string", "description": "Image path for dark mode icon." },
                "width": { "type": "string", "description": "Width of the icon image." },
                "height": { "type": "string", "description": "Height of the icon image." }
              }
            }
          ]
        },
        "title": {
          "type": "string",
          "description": "The feature card title."
        },
        "details": {
          "type": "string",
          "description": "Descriptive text for the feature card."
        },
        "link": {
          "type": "string",
          "description": "URL to link to when the feature card is clicked."
        },
        "linkText": {
          "type": "string",
          "description": "Link text displayed at the bottom of the feature card."
        },
        "rel": {
          "type": "string",
          "description": "HTML rel attribute for the feature card link."
        },
        "target": {
          "type": "string",
          "description": "HTML target attribute for the feature card link."
        }
      }
    }
  }
}