Quartz PKM Site Setup
Turn an Obsidian-style markdown vault (with [[wiki-links]]) into a browsable static site using Quartz β a Hugo-based framework pre-configured for PKM/digital gardens.
Why / When to Use
Hugo core does not parse [[wiki-links]] natively, and the Hugo maintainers have officially declared they will not add it. Quartz is Hugo under the hood but pre-wires wiki-links, backlinks panel, graph view, and tag pages out of the box. Use Quartz whenever your vault uses wiki-link syntax extensively.
Core Concept
Quartz = Hugo + PKM layer already configured. You are not giving anything up by choosing Quartz over bare Hugo; you gain the PKM layer for free.
Feature comparison:
| Feature | Bare Hugo | Quartz |
|---|---|---|
[[wiki-links]] | β (needs hack) | β |
| Backlinks panel | β | β |
| Graph view | β | β |
| Tag / type taxonomies | β | β |
Live reload (hugo server) | β | β |
| Custom themes | β | β |
Installation (Node.js required)
npx quartz createFollow the prompts; point content directory at your vault.
Docker Setup (Recommended β no Node.js needed)
Two options:
Option A β Official Quartz Docker (local preview only)
# Run from inside your Quartz folder
docker run --rm -itp 8080:8080 -p 3001:3001 \
-v ./content:/usr/src/app/content \
$(docker build -q .)Browse to http://localhost:8080. No persistence β for quick preview only.
Option B β dockerized-quartz (self-hosted, auto-rebuild)
Best for daily use: mounts vault as read-only volume, rebuilds after note changes, serves via NGINX.
# docker-compose.yml
version: '3.8'
services:
quartz:
image: shommey/dockerized-quartz
container_name: pkm-quartz
environment:
AUTO_REBUILD: true
BUILD_UPDATE_DELAY: 300 # rebuild 5 min after last note change
volumes:
- D:\OneDrive\Personal\Notes:/vault:ro
ports:
- "8080:80"
restart: unless-stoppeddocker-compose up -dBrowse to http://localhost:8080. Notes saved anywhere in OneDrive appear in the site within 5 minutes.
Key Options / Variants
BUILD_UPDATE_DELAY: 300β seconds to wait after a change before rebuilding (debounce for frequent saves):rovolume flag β vault is read-only inside the container; Quartz cannot modify your notes- Basic auth β
shommey/dockerized-quartzsupports optional password protection for LAN access
Gotchas
- Quartz requires Node.js for the
npx quartz createsetup step; the Docker image removes this requirement - Your existing frontmatter (
title,date,tags,type) is read natively β no changes needed - Your
maps/folder works as Quartz content sections; the graph view connects them automatically [[wiki-links]]must match filenames exactly (case-sensitive on Linux containers)
Source
Conversation βHugo setup for markdown presentationsβ β 2026-05-13
Updates β 2026-05-13
Docker Compose environment YAML Syntax Fix
Docker Compose environment accepts two valid formats β mixing them causes a parse error:
Wrong (mixed list/mapping):
environment:
AUTO_REBUILD: true
- BUILD_UPDATE_DELAY=300 # β mixing formats = errorOption A β Mapping format (recommended):
environment:
AUTO_REBUILD: "true"
BUILD_UPDATE_DELAY: "300"Option B β List format:
environment:
- AUTO_REBUILD=true
- BUILD_UPDATE_DELAY=300Validate before starting: docker-compose config β prints the resolved file without running anything. If it prints cleanly, the YAML is valid.
Updates β 2026-05-20
Crontab for PKM Sync Script
Add a cron job to auto-sync notes to the Dockerised Quartz site:
crontab -eAdd this line (runs weekdays at 6 PM):
0 18 * * 1-5 /home/phurix/claude-tools/sync-pkm.sh >> /home/phurix/claude-tools/sync-pkm.log 2>&1
Verify it was saved:
crontab -lThe Docker container (quartz-notes) was confirmed running via docker compose up with the dockerized-quartz volume.
Source: Conversation βNote Taking - Hugo&Quartzβ β 2026-05-20