Official Themes
Learn about the official themes provided by VitePress and how to use them effectively.
Default Theme
The default theme is the primary theme that ships with VitePress, providing a clean and professional appearance suitable for documentation sites.
Features
Core Features
- Responsive Design: Adapts to all screen sizes
- Dark Mode: Built-in dark/light theme toggle
- Navigation: Flexible navbar and sidebar configuration
- Search: Integrated local search functionality
- Internationalization: Multi-language support
- Accessibility: WCAG compliant design
Advanced Features
- Custom Containers: Callouts, warnings, and info boxes
- Code Highlighting: Syntax highlighting with Shiki
- Math Support: LaTeX math expressions
- Mermaid Diagrams: Flowcharts and diagrams
- Team Pages: Showcase team members
- Home Page: Customizable landing page
Installation
The default theme is included with VitePress by default:
npm install vitepress
Basic Configuration
// .vitepress/config.js
import { defineConfig } from 'vitepress'
export default defineConfig({
title: 'My Documentation',
description: 'A VitePress site with default theme',
themeConfig: {
// Theme configuration options
nav: [
{ text: 'Home', link: '/' },
{ text: 'Guide', link: '/guide/' },
{ text: 'API', link: '/api/' }
],
sidebar: [
{
text: 'Guide',
items: [
{ text: 'Introduction', link: '/guide/introduction' },
{ text: 'Getting Started', link: '/guide/getting-started' }
]
}
],
socialLinks: [
{ icon: 'github', link: 'https://github.com/vuejs/vitepress' }
]
}
})
Theme Configuration Options
Site Branding
export default {
themeConfig: {
// Site title in navbar
siteTitle: 'My Documentation',
// Logo image
logo: '/logo.svg',
// Logo with different images for light/dark mode
logo: {
light: '/logo-light.svg',
dark: '/logo-dark.svg'
}
}
}
Navigation
export default {
themeConfig: {
nav: [
{ text: 'Home', link: '/' },
{ text: 'Guide', link: '/guide/' },
{
text: 'Dropdown',
items: [
{ text: 'Item A', link: '/item-a' },
{ text: 'Item B', link: '/item-b' }
]
}
]
}
}
Sidebar
export default {
themeConfig: {
sidebar: {
'/guide/': [
{
text: 'Guide',
items: [
{ text: 'Introduction', link: '/guide/introduction' },
{ text: 'Getting Started', link: '/guide/getting-started' }
]
}
],
'/api/': [
{
text: 'API Reference',
items: [
{ text: 'Configuration', link: '/api/configuration' },
{ text: 'Runtime API', link: '/api/runtime-api' }
]
}
]
}
}
}
Footer
export default {
themeConfig: {
footer: {
message: 'Released under the MIT License.',
copyright: 'Copyright © 2023-present Evan You'
}
}
}
Social Links
export default {
themeConfig: {
socialLinks: [
{ icon: 'github', link: 'https://github.com/vuejs/vitepress' },
{ icon: 'twitter', link: 'https://twitter.com/vuejs' },
{ icon: 'discord', link: 'https://discord.gg/vue' }
]
}
}
Home Page Configuration
Create a custom home page with hero section and features:
---
layout: home
hero:
name: VitePress
text: Vite & Vue powered static site generator
tagline: Simple, powerful, and performant. Meet the modern SSG framework you've always wanted.
image:
src: /logo-large.png
alt: VitePress
actions:
- theme: brand
text: Get Started
link: /guide/getting-started
- theme: alt
text: View on GitHub
link: https://github.com/vuejs/vitepress
features:
- title: "Vite: The DX that can't be beat"
details: Feel the speed of Vite. Instant server start and lightning fast HMR that stays fast regardless of the app size.
icon: ⚡
- title: Designed to be simplicity first
details: With Markdown-centered content, it's built to help you focus on writing and deployed with minimum configuration.
icon: 📝
- title: Power of Vue meets Markdown
details: Enhance your content with all the features of Vue in Markdown, while being able to customize your site with Vue.
icon: 🚀
---
Customization
CSS Variables
Customize the theme appearance using CSS variables:
/* .vitepress/theme/custom.css */
:root {
/* Colors */
--vp-c-brand: #646cff;
--vp-c-brand-light: #747bff;
--vp-c-brand-lighter: #9499ff;
--vp-c-brand-lightest: #bcc0ff;
--vp-c-brand-dark: #535bf2;
--vp-c-brand-darker: #454ce1;
/* Typography */
--vp-font-family-base: 'Inter', sans-serif;
--vp-font-family-mono: 'Fira Code', monospace;
/* Layout */
--vp-layout-max-width: 1440px;
--vp-sidebar-width: 272px;
--vp-nav-height: 64px;
}
Custom Components
Extend the theme with custom components:
// .vitepress/theme/index.js
import DefaultTheme from 'vitepress/theme'
import CustomComponent from './components/CustomComponent.vue'
import './custom.css'
export default {
...DefaultTheme,
enhanceApp({ app }) {
app.component('CustomComponent', CustomComponent)
}
}
Layout Slots
Use layout slots to add custom content:
<!-- .vitepress/theme/Layout.vue -->
<template>
<Layout>
<template #nav-bar-title-after>
<span class="version-badge">v1.0</span>
</template>
<template #nav-bar-content-after>
<div class="custom-nav-content">
<!-- Custom navigation content -->
</div>
</template>
<template #sidebar-nav-before>
<div class="sidebar-header">
<!-- Custom sidebar header -->
</div>
</template>
<template #page-top>
<div class="page-header">
<!-- Custom page header -->
</div>
</template>
<template #page-bottom>
<div class="page-footer">
<!-- Custom page footer -->
</div>
</template>
</Layout>
</template>
<script setup>
import DefaultTheme from 'vitepress/theme'
const { Layout } = DefaultTheme
</script>
Advanced Features
Search Configuration
export default {
themeConfig: {
search: {
provider: 'local',
options: {
translations: {
button: {
buttonText: 'Search',
buttonAriaLabel: 'Search'
},
modal: {
noResultsText: 'No results for',
resetButtonTitle: 'Clear search',
footer: {
selectText: 'to select',
navigateText: 'to navigate',
closeText: 'to close'
}
}
}
}
}
}
}
Edit Link Configuration
export default {
themeConfig: {
editLink: {
pattern: 'https://github.com/vuejs/vitepress/edit/main/docs/:path',
text: 'Edit this page on GitHub'
}
}
}
Last Updated
export default {
lastUpdated: true,
themeConfig: {
lastUpdatedText: 'Last updated'
}
}
Carbon Ads
export default {
themeConfig: {
carbonAds: {
code: 'your-carbon-code',
placement: 'your-carbon-placement'
}
}
}
Internationalization
Configure multiple languages:
export default {
locales: {
root: {
label: 'English',
lang: 'en'
},
zh: {
label: '中文',
lang: 'zh-CN',
link: '/zh/'
}
},
themeConfig: {
i18nRouting: true,
localeLinks: {
text: 'Languages',
items: [
{ text: 'English', link: '/' },
{ text: '中文', link: '/zh/' }
]
}
}
}
Team Pages
Create beautiful team pages to showcase contributors:
---
layout: page
---
<script setup>
import {
VPTeamPage,
VPTeamPageTitle,
VPTeamMembers
} from 'vitepress/theme'
const members = [
{
avatar: 'https://www.github.com/yyx990803.png',
name: 'Evan You',
title: 'Creator',
links: [
{ icon: 'github', link: 'https://github.com/yyx990803' },
{ icon: 'twitter', link: 'https://twitter.com/youyuxi' }
]
}
]
</script>
<VPTeamPage>
<VPTeamPageTitle>
<template #title>Our Team</template>
<template #lead>Meet the people behind this project.</template>
</VPTeamPageTitle>
<VPTeamMembers :members="members" />
</VPTeamPage>
Theme Migration
From VuePress
Key differences when migrating from VuePress:
- Configuration: Different config structure
- Components: New component names and APIs
- Styling: CSS variable system
- Plugins: Different plugin architecture
Migration Steps
Update Dependencies:
bashnpm uninstall vuepress npm install vitepress
Update Configuration:
js// Old VuePress config module.exports = { title: 'My Site', themeConfig: { nav: [...], sidebar: [...] } } // New VitePress config export default { title: 'My Site', themeConfig: { nav: [...], sidebar: [...] } }
Update Frontmatter:
yaml# Old --- sidebar: auto --- # New --- outline: deep ---
Performance Optimization
Bundle Analysis
# Build with bundle analysis
npm run build -- --analyze
Code Splitting
// Dynamic imports for large components
const HeavyComponent = defineAsyncComponent(() =>
import('./components/HeavyComponent.vue')
)
Image Optimization
<!-- Use optimized images -->

<!-- Lazy loading -->
<img src="/images/hero.jpg" loading="lazy" alt="Hero image" />
Troubleshooting
Common Issues
Build Errors
- Check Node.js version compatibility
- Verify all dependencies are installed
- Clear cache and node_modules
Styling Issues
- Ensure CSS variables are properly defined
- Check for conflicting styles
- Verify import paths
Navigation Problems
- Validate sidebar configuration
- Check file paths and links
- Ensure proper frontmatter
Debug Mode
# Enable debug mode
DEBUG=vitepress:* npm run dev
Performance Issues
- Optimize images and assets
- Use code splitting
- Enable compression
- Implement caching strategies
Best Practices
Content Organization
- Use clear folder structure
- Implement consistent naming
- Organize by feature or topic
- Maintain proper hierarchy
SEO Optimization
- Use descriptive titles and descriptions
- Implement proper heading structure
- Add meta tags and structured data
- Generate sitemaps
Accessibility
- Use semantic HTML
- Provide alt text for images
- Ensure keyboard navigation
- Maintain color contrast
Performance
- Optimize images and assets
- Use lazy loading
- Implement code splitting
- Monitor bundle size
Future Roadmap
Upcoming Features
- Enhanced theme customization
- Improved performance
- Better accessibility
- Advanced internationalization
Community Contributions
- Theme marketplace
- Plugin ecosystem
- Documentation improvements
- Bug fixes and enhancements
The default theme continues to evolve with regular updates and improvements. Stay updated with the latest releases for new features and optimizations.