"ALWAYS use when writing code importing \"vitepress\". Consult for debugging, best practices, or modifying vitepress."
Install
npx skillscat add harlan-zw/vue-ecosystem-skills/vitepress-skilld Install via the SkillsCat registry.
vuejs/vitepress vitepress
Version: 1.6.4 (Aug 2025)
Deps: @docsearch/css@3.8.2, @docsearch/js@3.8.2, @iconify-json/simple-icons@^1.2.21, @shikijs/core@^2.1.0, @shikijs/transformers@^2.1.0, @shikijs/types@^2.1.0, @types/markdown-it@^14.1.2, @vitejs/plugin-vue@^5.2.1, @vue/devtools-api@^7.7.0, @vue/shared@^3.5.13, @vueuse/core@^12.4.0, @vueuse/integrations@^12.4.0, focus-trap@^7.6.4, mark.js@8.11.1, minisearch@^7.1.1, shiki@^2.1.0, vite@^5.4.14, vue@^3.5.13
Tags: latest: 1.6.4 (Aug 2025), next: 2.0.0-alpha.16 (Jan 2026)
References: Docs — API reference, guides • GitHub Issues — bugs, workarounds, edge cases • Releases — changelog, breaking changes, new APIs
API Changes
This section documents version-specific API changes — prioritize recent major/minor releases.
BREAKING:
pathname://— protocol dropped in v1.0.0-rc.9, usetarget="_self"ortarget="_blank"instead sourceBREAKING:
shikiSetup— renamed fromshikijiSetupin v1.0.0-rc.41 following the migration fromshikijiback toshikisourceBREAKING:
sidebaritems —childrenkey was renamed toitemsin v1.0.0, and top-level items no longer supportlinksourceBREAKING:
collapsed— replacedcollapsiblesidebar option in v1.0.0-alpha.44;collapsed: trueimplies collapsible sourceBREAKING:
markdown.headers— disabled by default since v1.0.0-alpha.57;PageDatano longer includes headers unless explicitly enabled sourceNEW:
onAfterPageLoad— router hook added in v1.4.0, triggered after the page is loaded and before it is rendered sourceNEW:
onBeforePageLoad— router hook added in v1.0.0-beta.4, allows executing logic before a page load starts sourceNEW:
useData().hash— new property in v1.1.0 that provides a reactive reference to the current URL hash sourceNEW:
useSidebar()— exposed in v1.0.0-beta.4, provides access to sidebar state and logic in custom themes sourceNEW:
defineClientComponent()— helper added in v1.0.0-alpha.59 for creating components that only render on the client sourceNEW:
onContentUpdated— hook now triggers on frontmatter-only changes as of v1.4.0 sourceNEW:
createContentLoader()— helper added in v1.0.0-alpha.53 to load content from markdown files with glob support sourceNEW:
mergeConfig()— utility exported in v1.0.0-rc.25 to assist in merging VitePress configurations sourceNEW:
appearance: 'force-auto'— new option added in v1.3.0 to force color scheme based on user system preference source
Also changed: PageData.filePath new alpha.75 · Theme.extends new alpha.50 · Theme.setup deprecated alpha.50 · Theme.NotFound deprecated alpha.50 · on-demand social icons experimental v1.5.0 · externalLinkIcon option new beta.4 · cleanUrls stable alpha.41 · metaChunk experimental beta.6 · rewrites experimental alpha.41 · sitemap experimental beta.7
Best Practices
- Use
createContentLoaderfor archives and indexes over manual data loading — automatically handles caching and minimizes client-side JSON weight source
import { createContentLoader } from 'vitepress'
export default createContentLoader('posts/*.md', { excerpt: true })- Wrap browser-only components with
defineClientComponent— prevents SSR/SSG build failures when libraries accesswindowordocumenton import source
<script setup>
import { defineClientComponent } from 'vitepress'
const ClientOnlyComp = defineClientComponent(() => import('./BrowserComponent.vue'))
</script>Prefer relative URLs for images and assets in Markdown — enables Vite's hashing pipeline and automatic base64 inlining for small files source
Use the
withBase()helper for dynamic paths in theme components — ensures assets resolve correctly regardless of the site's deploymentbaseURL sourceEnable
cleanUrls: trueonly when server-side support is confirmed — prevents broken direct links on platforms that do not automatically map/footo/foo.htmlsourceTarget rewritten paths for relative links when using
rewrites— links must resolve against the final URL structure, not the source directory structure sourcePass large Markdown or HTML blocks via the
contentproperty in dynamic route loaders — prevents bloating the client-side JavaScript payload with serialized params source
// [pkg].paths.js
export default {
async paths() {
return [{ params: { id: '1' }, content: '## Large Content' }]
}
}Use
<script client>for minimal interactivity in MPA mode — standard<script setup>in MPA mode is used for server-side templating only and lacks reactivity sourceProgrammatically exclude pages from search via the
_renderhook — allows complex filtering logic based on file path or frontmatter during the indexing phase source
// .vitepress/config.ts
themeConfig: {
search: {
provider: 'local',
options: {
_render(src, env, md) {
if (env.frontmatter?.search === false) return ''
return md.render(src, env)
}
}
}
}- Employ
defineConfigWithTheme<DefaultTheme.Config>for site configuration — provides full TypeScript inference and validation for both core and default theme settings source