Configuration

Overview

Without any configuration, the page is pretty minimal, and the user has no way to navigate around the site. To customize your site, let’s first create a .vitepress directory inside your docs directory. This is where all VitePress-specific files will be placed. Your project structure is probably like this:

.
├─ docs
│  ├─ .vitepress
│  │  └─ config.js
│  └─ index.md
└─ package.json

The essential file for configuring a VitePress site is .vitepress/config.js, which should export a JavaScript object:

export default {
  title: 'Hello VitePress',
  description: 'Just playing around.'
}

Check out the Config Reference for a full list of options.

Config Intellisense

Since VitePress ships with TypeScript typings, you can leverage your IDE's intellisense with jsdoc type hints:

/**
 * @type {import('vitepress').UserConfig}
 */
const config = {
  // ...
}

export default config

Alternatively, you can use the defineConfig helper at which should provide intellisense without the need for jsdoc annotations:

import { defineConfig } from 'vitepress'

export default defineConfig({
  // ...
})

VitePress also directly supports TS config files. You can use .vitepress/config.ts with the defineConfig helper as well.

Typed Theme Config

By default, defineConfig helper leverages the theme config type from default theme:

import { defineConfig } from 'vitepress'

export default defineConfig({
  themeConfig: {
    // Type is `DefaultTheme.Config`
  }
})

If you use a custom theme and want type checks for the theme config, you'll need to use defineConfigWithTheme instead, and pass the config type for your custom theme via a generic argument:

import { defineConfigWithTheme } from 'vitepress'
import { ThemeConfig } from 'your-theme'

export default defineConfigWithTheme<ThemeConfig>({
  themeConfig: {
    // Type is `ThemeConfig`
  }
})