Veka is a minimalist digital garden and personal wiki starter for Astro that turns folders of Markdown files into a navigable static wiki with automatic sidebar routing, local full-text search, and SEO meta tags.
What is Veka?
Veka is an open-source Astro starter template that accepts Markdown and MDX notes placed in src/content/wiki/ and outputs a static site with auto-generated nested navigation, a table of contents, and search. It runs on Astro 3.0+ and uses Tailwind CSS v4 for styling and Pagefind for static search indexing. The template is distributed as a GitHub repository (masmuss/veka) and can be cloned with degit; live demos are hosted at demo-veka.khoirul.me and wiki.khoirul.me.
Key Features
- Zero-config folder routing: Create subfolders under
src/content/wiki/(for example,koding/arsitektur/) and the sidebar navigation and URLs are generated automatically — no route registration in a config file. - Ultra-fast static search with Pagefind: Search is indexed locally during
astro build; no third-party search service or API keys are required. - Zod schema validation for frontmatter: All wiki notes are validated against a schema defined in
src/content/config.ts, so missing titles or malformed dates surface as build errors instead of broken pages. - Digital garden growth stages: Each note declares a
growthStageproperty with valuesseedling,budding, orevergreento reflect how mature the content is. - Auto-generated SEO and Open Graph tags: Per page, Veka normalizes titles (appending " | Veka" and truncating at 60 characters), enforces description lengths, adds Open Graph and Twitter Card tags, canonical URLs, and JSON-LD structured data (
WebSitefor all pages,Articlefor wiki notes). - 100% Lighthouse score target: The UI is built with minimal components and vanilla JS for interactivity to keep runtime JavaScript near zero.
- SSG-first deployment: The project builds as a static site; the build command
pnpm run buildrunsastro buildand then triggers the Pagefind integration, and the output deploys to Vercel, Netlify, or Cloudflare Pages.
Who is it for?
- Note-takers and knowledge-base builders: They can dump Markdown files into nested folders and get a browsable wiki with a table of contents for each note.
- Developers who want a personal second brain: They can track note maturity with growthStage, pin important notes with
isPinned, and search the full knowledge base via the static Pagefind index. - Anyone publishing docs or evergreen articles: They get SSR-free static pages with structured data (JSON-LD Article markup including
datePublished,dateModified, andkeywords) for better search visibility. - Self-hosters or edge deployers: They can deploy the generated static site to Cloudflare Pages, Netlify, or Vercel with a single build command.
What can you do with Veka?
- Create deeply nested notes: Drop a folder like
src/content/wiki/koding/arsitektur/and Veka builds a URL and sidebar entry for it automatically. - Run a full-text search without a server: Build the site and Pagefind indexes every page locally, so visitors can search all notes instantly through static files.
- Publish a consistent public wiki: Use the shared
BaseLayoutandWikiLayout(a 3-column grid of navigation, content, and table of contents) so every note looks the same. - Customize site metadata in one file: Edit
src/lib/site-config.tsto change the site name, default description, author, canonical base URL, Open Graph image, and favicon; these feed all SEO tags and JSON-LD.
How does Veka work?
Clone the repository with pnpm dlx degit masmuss/veka my-wiki, install dependencies with pnpm install, and run pnpm run dev. Write notes as .md or .mdx files in src/content/wiki/ with the required frontmatter fields (title, description, createdAt, updatedAt, tags, isPinned, and growthStage). Because Pagefind reads the static build output, local search testing requires running pnpm run build followed by pnpm run preview rather than relying on the dev server.
FAQ
Does Veka require a database or CMS?
No. Veka is a static site generator — all content lives in Markdown or MDX files under src/content/wiki/, and the output is plain static HTML with a local search index.
What frontmatter fields are required for each note?
Every note must include title, description, createdAt, updatedAt, tags, isPinned, and growthStage. The growthStage field accepts seedling, budding, or evergreen, and the schema is enforced with Zod during the build.
How can I test the search functionality?
Pagefind indexes the static build output, so search will not work on the dev server. Run pnpm run build followed by pnpm run preview to see and test the full-text search locally.
Where do I change the site name and SEO metadata?
Edit src/lib/site-config.ts. It contains the site name, default title, description, author, canonical base URL, Open Graph image path, and favicon path; these values populate the title, meta description, OG tags, Twitter Card tags, and JSON-LD output.
Is Veka free to use?
Veka is an open-source template distributed through GitHub under the repository masmuss/veka. The quick-start instructions use degit to copy the repository, and there are no paid tiers or licensing fees mentioned in the documentation.








