diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js
index 39efd4cf..075acf2e 100644
--- a/docs/.vitepress/config.js
+++ b/docs/.vitepress/config.js
@@ -38,6 +38,7 @@ function getGuideSidebar() {
{ text: 'Configuration', link: '/guide/configuration' },
{ text: 'Markdown Extensions', link: '/guide/markdown' },
{ text: 'Frontmatter', link: '/guide/frontmatter' },
+ { text: 'Global Computed', link: '/guide/global-computed' },
{ text: 'Customization', link: '/guide/customization' },
{ text: 'Deploying', link: '/guide/deploy' }
]
diff --git a/docs/guide/frontmatter.md b/docs/guide/frontmatter.md
index 3c6fb5d3..5fc176c4 100644
--- a/docs/guide/frontmatter.md
+++ b/docs/guide/frontmatter.md
@@ -9,7 +9,7 @@ editLink: true
---
```
-Between the triple-dashed lines, you can set [predefined variables](#predefined-variables), or even create custom ones of your own. These variables can be used via the \$page.frontmatter
variable.
+Between the triple-dashed lines, you can set [predefined variables](#predefined-variables), or even create custom ones of your own. These variables can be used via the \$frontmatter
variable.
Here’s an example of how you could use it in your Markdown file:
diff --git a/docs/guide/global-computed.md b/docs/guide/global-computed.md
new file mode 100644
index 00000000..f7de2fb2
--- /dev/null
+++ b/docs/guide/global-computed.md
@@ -0,0 +1,105 @@
+# Global Computed
+
+In VitePress, some core [computed properties](https://v3.vuejs.org/guide/computed.html#computed-properties) can be used by the default theme or custom themes. Or directly in Markdown pages using vue, for example using `{{ $frontmatter.title }}` to access the title defined in the frontmatter section of the page.
+
+## \$site
+
+This is the `$site` value of the site you’re currently reading:
+
+```json
+{
+ "title": "VitePress",
+ "description": "Vite & Vue powered static site generator.",
+ "lang": "en-US",
+ "locales": {},
+ "base": "/",
+ "head": [],
+ "themeConfig: $theme
+}
+```
+
+## \$page
+
+This is the `$page` value of the page you’re currently reading:
+
+```json
+{
+ "title": "Global Computed",
+ "relativePath": "guide/global-computed.md",
+ "lastUpdated": 1606297645000
+ "headers": [
+ {
+ "level": 2,
+ "title": "$site",
+ "slug": "site"
+ },
+ {
+ "level": 2,
+ "title": "$page",
+ "slug": "$page"
+ },
+ ...
+ ],
+ "frontmatter": $frontmatter,
+}
+```
+
+## \$frontmatter
+
+Reference of [\$page](#page).frontmatter.
+
+```json
+{
+ "title": "Docs with VitePress",
+ "editLink": true
+}
+```
+
+## \$theme
+
+Refers to `$site.themeConfig`.
+
+```json
+{
+ "repo": "vuejs/vitepress",
+ "docsDir": "docs",
+ "locales": {},
+ "editLinks": true,
+ "editLinkText": "Edit this page on GitHub",
+ "lastUpdated": "Last Updated",
+ "nav": [
+ {
+ "text": "Guide",
+ "link": "/"
+ },
+ ...
+ ],
+ "sidebar": {
+ "/": [
+ {
+ "text": "Introduction",
+ "children": [
+ {
+ "text": "What is VitePress?",
+ "link": "/"
+ },
+ ...
+ ]
+ }
+ ],
+ "/guide/": [
+ {
+ "text": "Introduction",
+ "children": [
+ {
+ "text": "What is VitePress?",
+ "link": "/"
+ },
+ ...
+ ]
+ }
+ ],
+ ...
+ },
+}
+```
diff --git a/src/client/app/index.ts b/src/client/app/index.ts
index f3eaa170..7749278d 100644
--- a/src/client/app/index.ts
+++ b/src/client/app/index.ts
@@ -87,6 +87,11 @@ export function createApp() {
return router.route.data
}
},
+ $frontmatter: {
+ get() {
+ return router.route.data.frontmatter
+ }
+ },
$theme: {
get() {
return siteDataByRouteRef.value.themeConfig