Quartz
Publish a digital garden from Markdown notes
Quartz is a static site generator that transforms Markdown notes, including Obsidian vaults, into a fast, searchable digital garden website. It supports backlinks, graph views, and full-text search out of the box.
Key features
- Digital garden publishing
- Backlinks and graph view
- Full-text search
- Obsidian compatible
Pros & cons
Strengths
- Great for note publishing
- Fast static output
Trade-offs
- Static-only
- Build step required
Quartz replaces
Last reviewed Aug 26, 2026 · 784 words
Obsidian Publish costs about $8 a month at last check, and Quartz does the same job for the price of a Node build and any static host, including one you already run. That is the pitch and it is accurate. What the pitch leaves out is that Quartz publishes everything in the folder you point it at unless told otherwise, so the first thing to configure is not the theme but the list of what must never leave your machine.
It reads the vault you already have
Quartz understands Obsidian conventions natively: [[wikilinks]], callouts, embedded notes, tags in front matter, and folder structure. Point it at a copy of the vault and the output is a site with a page per note, backlinks listed under each page, an interactive graph view, and full-text search that runs in the browser without a server. None of this needs a plugin or a rewrite of your notes, which is the difference between Quartz and pushing a vault through a general-purpose generator such as Hugo, where wikilinks and callouts need shims.
The exceptions are anything a community plugin renders at runtime. Dataview queries, Excalidraw drawings and similar plugin-generated content come out as raw text or nothing, because Quartz builds from the Markdown on disk and does not run Obsidian. Notes that lean on those need a static version before publishing, which in practice means a table you pasted rather than a query.
Four commands to a running site
git clone https://github.com/jackyzha0/quartz.git
cd quartz && npm i
npx quartz create
npx quartz build --serve
quartz create asks whether to start empty, copy an existing folder, or symlink one; symlinking a public subfolder of your vault is the tidy option. build --serve compiles to public/ and serves it on port 8080 with rebuild on change. You need a current Node LTS and npm; the catalogue's 256 MB is the build process, and the finished site needs nothing but a web server. A few hundred notes build in seconds and a few thousand in under a minute on a modest machine. Layout lives in quartz.layout.ts, where components such as the explorer, table of contents and graph are switched on or off per page type, while quartz.config.ts holds the site title, base URL and the list of transformer plugins.
Privacy is opt-out, so configure it first
Quartz's default ignore list is short: a private folder, a templates folder and .obsidian. Everything else is published, including the note about your salary negotiation in a subfolder you forgot. Two mechanisms fix this. ignorePatterns in quartz.config.ts takes glob patterns for whole folders or file name conventions, and draft: true in a note's front matter excludes that single note. My rule is the inverse of the default: the vault I write in is never the folder Quartz reads. A public subfolder inside the vault is what gets symlinked, and a note is only on the web if I moved it there on purpose.
Hosting on your own server
The official docs assume GitHub Pages or Cloudflare Pages, and npx quartz sync pushes to a GitHub repository. Neither is necessary. The public/ directory is static files, so:
npx quartz build
rsync -av --delete public/ user@server:/srv/garden/
Serve /srv/garden from Caddy with file_server and the site has the memory footprint of a folder. To automate, keep the vault in a repository on Gitea and let an Actions runner run the build on push. This also answers the "build step required" complaint in the catalogue: you commit a note, the runner builds, the site updates, and you never open a terminal on the server.
What it is not
Quartz has no editor and no admin panel; you write in Obsidian or any Markdown tool and the site is a read-only rendering. There are no comments, no forms and no accounts, and adding them means third-party embeds. It is not a replacement for Notion as a workspace, only for Notion's public-page feature. And the graph view, charming as it is, becomes a hairball past a few hundred notes; search and backlinks are the features visitors actually use.
What I'd do
Keep the working vault private, symlink a public subfolder into Quartz, set ignorePatterns before the first build, and deploy from a Gitea Actions job to a Caddy file_server. Obsidian Publish is still the right answer for someone who never wants to see a terminal. For everyone in the notes category who already runs a web server, Quartz is a better site for nothing a month.
Compare Quartz
10 head-to-head comparisons.
Similar blogging platforms apps
Hugo
Blogging PlatformsBlazing fast static site generator for blogs and sites
Replaces WordPress, Medium
Astro
Blogging PlatformsModern static site framework for content-driven sites
Replaces WordPress, Medium
Gatsby
Blogging PlatformsReact-based static site and blog generator
Replaces WordPress, Medium
Jekyll
Blogging PlatformsSimple, blog-aware static site generator
Replaces WordPress, Blogger
Hexo
Blogging PlatformsFast and simple blog framework powered by Node.js
Replaces WordPress, Blogger
Halo
Blogging PlatformsPowerful and easy-to-use open-source website builder
Replaces WordPress, Medium