Vault
The vault feature turns an Obsidian vault into a static website. Folder structure is completely ignored — only frontmatter decides what gets published and where.
Philosophy: The vault tree is private filing. The frontmatter is the public address.
Setup
Add vault to your standard() config:
// astro.config.mjs
import { defineConfig } from “astro/config”;
import standard from “@stnd/core”;
export default defineConfig({
integrations: [
standard({
vault: “./vault”, // path relative to app root
}),
],
});
That’s it. @stnd/core automatically injects the catch-all route and builds the page index at build time.
Frontmatter Contract
Every note that should be published must have publish: true. Everything else is private by default.
—
title: My Note
publish: true
visibility: public # public (default) | unlisted | private
permalink: /my-note/ # canonical URL (highest priority)
—
| Field | Required | Description |
|---|---|---|
publish |
Yes | Must be true to include the page |
visibility |
No | public (default), unlisted (built but not indexed), private (skipped) |
permalink |
No | Explicit URL — takes priority over everything |
title |
No | Slugified into URL if no permalink |
URL Resolution
Priority order for generating the page URL:
permalink: /my-url/→ used as-istitle: My Note→ slugified to/my-note- Filename → slugified as last resort
Slugification uses @stnd/utils‘s slugify — apostrophes are stripped (d’humain → dhumain), accents normalized, non-alphanumeric replaced with dashes.
Wikilinks
Press resolves [[wikilinks]] against the vault index. A link matches by slug, title, or filename — so [[About – Now]] resolves even if the note’s permalink is /now/.
Images
![[image.png]] syntax is supported. Images are resolved flat across the vault (first match wins, mirroring Obsidian behavior) and copied to public/assets/vault/ at build time.
Clean Builds
The build script should wipe dist/ before each build to prevent stale pages from unpublished or renamed notes:
“build”: “rm -rf dist && astro build”
Without this, a note you unpublish or rename will still exist as an HTML file in dist/ from the previous build.