Obsidian Site

Getting Started

Getting Started

This guide walks you through setting up a new documentation site using Obsidian Site from scratch.

Prerequisites

  • Node.js v22.12.0 or newer
  • npm (included with Node.js)
  • An Obsidian vault (or a folder of Markdown files)

1. Get the project

Clone or download the Obsidian Site repository:

git clone https://github.com/your-org/obsidian-site.git my-docs
cd my-docs

2. Install dependencies

npm install

3. Connect your vault

By default, Obsidian Site looks for a vault/ directory in the project root. You have two options:

Option A — Copy your vault Copy your Obsidian vault folder into the project root and rename it vault/:

cp -r /path/to/my-obsidian-vault ./vault

Option B — Change the vault path Open vault.config.ts and update the vaultPath field:

vaultPath: '../my-obsidian-vault',

4. Configure your site

Edit vault.config.ts to set your site name, description, and preferences. See Customization for all available options.

export const siteConfig = {
  siteName: 'My Docs',
  description: 'My project documentation',
  homeNote: 'index',        // which note to show on /
  lang: 'en',
};

5. Start the dev server

npm run dev

Your site is now available at http://localhost:4321. Changes to your vault files will hot-reload automatically.

6. Set your home note

Create an index.md file at the root of your vault. This note will be rendered at /. If no index.md exists, visitors will see a 404 page.

---
title: Welcome
---

# My Documentation

Welcome to my docs! Here you'll find...

Folder structure in the vault

Folders in your vault become path segments in the URL:

Vault pathURL
index.md/
Guide.md/guide
API/Overview.md/api/overview
API/Reference.md/api/reference
💡Tip

Note naming File names are converted to URL slugs: spaces become hyphens, letters are lowercased. My Feature Guide.md/my-feature-guide.

Link between notes using Obsidian's [[wikilink]] syntax:

See [[API/Overview]] for the full reference.
See [[Guide|Getting Started Guide]] to use a custom label.

Both forms are resolved at build time and become proper <a> tags.

Linked notes