Quartz (Obsidian SSG): Comprehensive Evaluation for a 178-Page Business Wiki

Executive Summary

Quartz v4 is the most Obsidian-faithful static site generator available — it handles [[wiki links]] with spaces, aliases, heading anchors, subdirectory organisation, YAML frontmatter, graph view, backlinks, and full-text search out of the box with zero conversion steps. For a 178-page business wiki built in Obsidian, it is the lowest-friction path from vault to published website. However, its default aesthetic skews “developer’s digital garden,” and making it feel like a professional business tool for a CEO audience requires meaningful CSS and layout customisation. The project is actively maintained but shows signs of a one-maintainer bottleneck — 327 open issues, v5 in early planning, and a commit cadence of roughly monthly merges.

The strongest alternative is MkDocs with the Material theme, which offers a more polished default UX and a larger ecosystem, but requires third-party plugins for wiki link conversion, backlinks, and graph view. Quartz wins on Obsidian fidelity; MkDocs Material wins on professional presentation and long-term ecosystem stability.


Quartz Capabilities and Features

Current Version

Quartz v4 is the current production version, rewritten from scratch in TypeScript (v3 was Hugo-based). The last formal release is v4.0.8 (August 2023), but active development continues on the v4 branch with the most recent commit on 4 March 2026. The project has 11,782 GitHub stars, 3,669 forks, and 30 contributors under an MIT licence. It requires Node v22+ and npm v10.9.2+. (Quartz homepage)

Feature Matrix

FeatureStatusDetails
Wiki links [[Page Name]]Built-inResolved by the CrawlLinks plugin; supports shortest, absolute, and relative path resolution
Wiki links with spacesSupported[[Path to file]] resolves to Path to file.md or Path-to-file.md (Wikilinks docs)
Aliases [[page|display text]]SupportedProduces a link to the file with the overridden display text
Heading links [[page\#heading]]SupportedLinks to a specific anchor within the target file
Block references [[page\#^block-id]]SupportedLinks to specific block IDs
Transclusions ![[page]]SupportedEmbeds full pages, heading sections, or specific blocks inline
Subdirectory organisationSupportedContent goes in /content folder; subdirectories preserved in URL structure
YAML frontmatterBuilt-inParsed by the Frontmatter transformer plugin; native fields: title, description, aliases, tags, draft, date, permalink, cssclasses
Full-text searchBuilt-inPowered by Flexsearch; returns results in under 10ms for sites up to 500,000 words; separate indexes for title, content, and tags; CJK tokenisation; keyboard accessible
Graph viewBuilt-inLocal and global modes; node radius proportional to link count; visited-node highlighting; interactive
BacklinksBuilt-inDisplays incoming links with rich popover previews; hideable when empty
Table of contentsBuilt-inAuto-generated from H1–H3; highlights current scroll position; per-page disable via enableToc: false frontmatter
Explorer (file tree)Built-inCollapsible sidebar with customisable sort, filter, and map functions; folder display names from title frontmatter in folder/index.md
BreadcrumbsBuilt-inFolder hierarchy navigation at top of each page
Dark modeBuilt-inRespects OS preference; manual toggle persisted in localStorage
Mobile responsivenessBuilt-inThree-column layout collapses at configurable breakpoints (mobile < 800px, desktop > 1200px) (Layout docs)
SPA routingBuilt-inPrevents unstyled content flashes via micromorph diffing
Popover previewsBuilt-inRich content previews with formatting, images, and heading navigation
CalloutsBuilt-inObsidian-style admonitions via ObsidianFlavoredMarkdown plugin
LaTeXBuilt-inKaTeX or MathJax rendering
Mermaid diagramsBuilt-inNative support
Syntax highlightingBuilt-inCode block syntax highlighting
RSS feedBuilt-inGenerated from content
CommentsBuilt-inIntegrates with external comment providers
i18nBuilt-inLocale configuration for date formatting and UI strings
Docker supportBuilt-inContainerised builds
Private pagesBuilt-inVia draft: true frontmatter or ignorePatterns glob config

Customisation Architecture

Quartz uses a plugin-based architecture with three plugin types (Architecture docs):

  • Transformers: Process Markdown content (frontmatter parsing, wiki link resolution, LaTeX rendering)
  • Filters: Include/exclude content (draft filtering, explicit publish)
  • Emitters: Generate output files (HTML pages, RSS, tag listings, content index)

Layout is configured in quartz.layout.ts using JSX components placed in sections: header, beforeBody, left, right, afterBody. Each component (Explorer, Graph, Search, TOC, Backlinks, Darkmode, Breadcrumbs) can be repositioned, reconfigured, or removed entirely. Custom components can be written in TSX/JSX with Preact. (Layout docs)

Theme customisation in quartz.config.ts provides:

  • Typography: Separate Google Fonts for title, headers, code, and body text
  • Colours: Nine semantic colour tokens (light, lightgray, gray, darkgray, dark, secondary, tertiary, highlight, textHighlight) with separate light/dark mode palettes
  • CDN caching: Toggle between Google CDN fonts and self-hosted (Configuration docs)

Deeper styling uses Sass: base styles in quartz/styles/base.scss, custom overrides in quartz/styles/custom.scss.


Setup and Configuration

Initial Setup (Step-by-Step)

# 1. Clone the Quartz repo
git clone https://github.com/jackyzha0/quartz.git my-wiki
cd my-wiki
 
# 2. Install dependencies
npm i
 
# 3. Initialise (interactive — choose "empty Quartz" or "copy existing vault")
npx quartz create
 
# 4. Copy your Obsidian vault content into /content
cp -r /path/to/vault/* content/
 
# 5. Configure in quartz.config.ts (site title, base URL, theme)
 
# 6. Build and preview locally
npx quartz build --serve
# → Site available at http://localhost:8080
 
# 7. Build for production
npx quartz build
# → Static files in /public

The npx quartz create wizard asks two questions: whether to start empty or import content, and the preferred link resolution method (shortest path, absolute, or relative — matching Obsidian’s three modes). (Quartz getting started)

Content Structure for Subdirectories

For a wiki organised as entities/, concepts/, sources/, analysis/, decisions/:

content/
├── index.md              ← Homepage
├── entities/
│   ├── index.md          ← Folder landing page (title from frontmatter)
│   ├── Company-A.md
│   └── Person-B.md
├── concepts/
│   ├── index.md
│   └── Market-Analysis.md
├── sources/
├── analysis/
└── decisions/

Each index.md within a folder sets the folder’s display name in the Explorer sidebar via its title frontmatter field. Without an index.md, the folder name is used as-is. (Explorer docs)

Configuration for This Wiki

Key settings in quartz.config.ts:

const config: QuartzConfig = {
  configuration: {
    pageTitle: "Business Wiki",           // Site title
    enableSPA: true,                       // Smooth navigation
    enablePopovers: true,                  // Rich link previews
    locale: "en-AU",                       // Australian locale
    baseUrl: "wiki.example.com",           // Production domain
    ignorePatterns: [".obsidian", "_templates", "private"],
    defaultDateType: "modified",           // Show last-modified date
    theme: {
      typography: {
        header: "Inter",                   // Clean professional font
        body: "Inter",
        code: "JetBrains Mono",
      },
      colors: {
        // Custom brand palette here
      }
    }
  }
}

Learning Curve

For a developer doing initial setup: 2–4 hours to get a working site with content. Customising theme colours and fonts: another 1–2 hours. Restructuring layout (moving/removing components): requires reading the layout docs and modifying JSX — half a day for someone comfortable with React-like syntax. Creating custom components: requires TypeScript/JSX knowledge.

For a non-technical CEO post-setup: editing Markdown files is straightforward. Running npx quartz build --serve for local preview is a single terminal command. Publishing via npx quartz sync pushes to GitHub. No code changes needed for day-to-day content work.


Deployment Options

Quartz supports all major static hosting providers. The hosting documentation covers each in detail.

ProviderBuild CommandOutput DirCustom DomainCommunity Recommended
Cloudflare Pagesnpx quartz buildpublicYes (Cloudflare DNS)Yes — fast, generous free tier
GitHub PagesVia GitHub Actions YAMLpublicYes (A/CNAME records)Yes — simplest if already on GitHub
Vercelnpx quartz buildpublicYesYes — requires vercel.json for clean URLs
Netlifynpx quartz buildpublicYesYes — straightforward
GitLab PagesVia .gitlab-ci.ymlpublicYesLess common
Self-hosted (Nginx/Apache/Caddy)npx quartz buildpublic → copy to serverYesFor full control

Build/Deploy Pipeline

The typical workflow:

  1. Edit Markdown in Obsidian (locally)
  2. Run npx quartz sync — commits and pushes to GitHub
  3. GitHub Actions / Cloudflare Pages / Netlify detects the push
  4. Runs npx quartz build on the server
  5. Deploys the /public directory as a static site

Build time for 178 pages: estimated 5–15 seconds. Quartz uses worker threads when content exceeds 128 files, with batches of 128 processed in parallel. (Architecture docs)

The Quartz community favours Cloudflare Pages for production deployments:

  • Generous free tier (unlimited bandwidth, 500 builds/month)
  • Automatic HTTPS and CDN
  • No trailing-slash redirect issue (unlike GitHub Pages, which generates file.html rather than file/index.html and breaks trailing-slash links)
  • Deploy previews for branches

Caveat: Cloudflare performs shallow clones by default. If using git-based timestamps, prepend git fetch --unshallow && to the build command. (Hosting docs)


Limitations and Known Issues

Critical for This Wiki

IssueSeverityDetails
Case-sensitive wiki linksHighObsidian treats [[foo]] and [[Foo]] identically; Quartz does not — mismatched casing produces 404 errors. Issue #2316, Issue #1122. An open PR #2327 forces lowercase URL slugs but is not yet merged.
No Dataview supportHighDataview queries (dataview, dataviewjs) are not rendered. Issue #102 — 30 thumbs-up, 21 comments, still open. If the wiki uses Dataview, output will show raw query blocks.
No Canvas supportMediumObsidian Canvas files are not converted. Issue #927 — 24 thumbs-up, 32 comments, still open.
Aliases + backlinks incompatibilityMediumBacklinks do not resolve correctly when pages are linked via aliases. Issue #2230.
Image wikilinks with underscoresLow![[image_name.png]] fails to render if the filename contains underscores. Issue #2305.
Mobile Explorer overflowLowAdding non-default components to the left layout causes overflow on mobile. Issue #2269.

Workaround for Case Sensitivity

Until PR #2327 is merged, the practical workaround is to ensure consistent casing in the Obsidian vault. The Obsidian plugin “Linter” can normalise link casing across the vault. Alternatively, apply the PR’s one-line change locally: force all slugs to lowercase in quartz/util/path.ts.

Community-Reported Pain Points

  • Graph view crashes on iOS Safari when expanding to global view (Issue #2257)
  • Dead links to non-existent pages render as clickable links leading to 404 pages; no option to render them as plain text or strikethrough. Issue #454 — 14 thumbs-up, 15 comments, open since 2022. A community workaround converts dead links to <span> tags.
  • cssclasses frontmatter not applied to output (Issue #2332)
  • No per-folder RSS feeds (Issue #866 — 25 comments, 10 thumbs-up)
  • No password-protected notes (Issue #1481 — 21 comments)
  • Inlined CSS/JS — each page includes thousands of lines of inlined scripts and styles; no easy way to externalise them

Maintenance Status

MetricValue
Stars11,782
Open issues327
Contributors30
Last commit4 March 2026
Commit cadenceRoughly monthly merge batches
Last formal releasev4.0.8 (August 2023) — no tagged releases since
v5 plansEarly discussion: npm package distribution, pnpm migration, community org
Primary maintainerJacky Zhao (solo maintainer with community PRs)
DiscordActive community server

Risk assessment: Quartz is a healthy open-source project but is essentially maintained by one person. The 327 open issues and absence of tagged releases since 2023 suggest a maintainer bandwidth constraint. v5 is in early ideation with no timeline. For a business-critical wiki, this is an acceptable risk given the MIT licence (you can fork and maintain independently), but contrasts with MkDocs Material’s corporate-backed sustainability.

MkDocs 2.0 disruption note: MkDocs itself announced a ground-up rewrite (MkDocs 2.0) that is incompatible with Material for MkDocs and removes the plugin system. The Material theme maintainer has flagged this as a major concern. This introduces ecosystem uncertainty for MkDocs Material that partly neutralises its “safer long-term bet” advantage over Quartz.


Head-to-Head: Quartz vs Alternatives

Comparison Matrix

CriterionQuartz v4MkDocs + MaterialDocusaurusEleventy + obsidian-exportHugo + converter
Wiki links (native)YesNo (plugin needed)No (plugin needed)No (pre-process step)No (pre-process step)
Spaces in linksYesYes (via roamlinks)Yes (via gl0bal01 plugin)Yes (via obsidian-export)Partial (absolute paths required)
AliasesYesYes (via mkdocs-publisher)YesYesYes
Heading anchorsYesYesYesApproximateYes
Subdirectory supportNativeYesYesYesYes (preserves structure)
FrontmatterNative (Obsidian fields)Native (YAML)Native (YAML)Copied as-isCopied by converter
Search engineFlexsearch (client-side)Lunr.js (client-side)Algolia (cloud) or localPagefind/Lunr (custom)Pagefind/Lunr (custom)
Graph viewBuilt-inCommunity pluginVaultusaurusNoneNone
BacklinksBuilt-inCommunity pluginNoneCustom codeCustom code
Dark modeBuilt-inBuilt-inBuilt-inCustom CSSTheme-dependent
Mobile responsiveBuilt-inBuilt-inBuilt-inCustomTheme-dependent
Default visual polishMediumHighHighNoneTheme-dependent
Setup complexityLowMediumMedium–HighHighHigh
CEO self-serviceYes (Markdown + sync)Yes (Markdown + build)PartlyNoNo
GitHub stars11.8k26.5k64.5k19.5k87.5k
Ecosystem riskSolo maintainer, v5 uncertainMkDocs 2.0 breaking changesMeta-backed, stableStable, small core teamVery stable

Verdict by Criterion

Obsidian fidelity: Quartz wins decisively. It is the only tool that processes [[wiki links]] directly without a conversion step or plugin stack. The ObsidianFlavoredMarkdown transformer handles callouts, Mermaid, highlights, and wikilinks natively.

Professional UX out of the box: MkDocs Material wins. Its default theme looks like production documentation; Quartz’s default looks like a digital garden. Docusaurus is also strong here.

Search quality: Quartz’s Flexsearch is fast and functional but basic. MkDocs Material’s Lunr integration offers search suggestions, highlighting, and boosting. Docusaurus + Algolia is the most powerful but requires a cloud service. For a 178-page private wiki, all three are adequate.

Long-term maintainability: All options carry some risk. Quartz is solo-maintained. MkDocs faces the MkDocs 2.0 uncertainty. Docusaurus requires React knowledge. Hugo and Eleventy are stable but require more custom code for Obsidian features.

Recommendation: Quartz is the right choice for this project — its Obsidian fidelity eliminates the conversion layer that every alternative requires, and 178 pages is well within its performance envelope. The customisation effort to make it CEO-appropriate is a one-time investment that is less total work than assembling the equivalent plugin stack in MkDocs.


Customisation for a CEO Audience

Quartz’s default audience is personal knowledge management enthusiasts. Transforming it into a professional business wiki requires changes across five dimensions:

1. Remove “Digital Garden” Signals

Default ElementActionHow
Graph viewRemove or hide on homepageDelete Component.Graph() from quartz.layout.ts
”Explorer” labelRename to “Contents” or “Navigation”Custom component text or CSS override
Backlinks sectionKeep but rename to “Related Pages”Modify Backlinks.tsx component text
Popover previewsKeep — useful for a CEO navigating relationshipsNo change needed
”Digital garden” in page title/footerRemove any referencesEdit quartz.config.ts pageTitle and footer component

2. Typography and Colour Scheme

Replace the default palette with professional colours:

// quartz.config.ts
theme: {
  typography: {
    header: "Inter",      // Clean, widely-used sans-serif
    body: "Inter",
    code: "JetBrains Mono",
  },
  colors: {
    lightMode: {
      light: "#FFFFFF",       // Clean white background
      lightgray: "#E5E7EB",   // Subtle borders
      gray: "#9CA3AF",        // Muted secondary text
      darkgray: "#374151",    // Body text
      dark: "#111827",        // Headers
      secondary: "#1D4ED8",   // Professional blue links
      tertiary: "#3B82F6",    // Hover states
      highlight: "#EFF6FF",   // Light blue highlights
      textHighlight: "#FEF3C7" // Warm yellow for highlighted text
    }
  }
}

3. Navigation Structure

Replace the sidebar Explorer with a horizontal top navigation bar listing the five wiki sections:

[Logo/Title]  |  Entities  |  Concepts  |  Sources  |  Analysis  |  Decisions  |  [Search]

This requires a custom header component in quartz.layout.ts. The Morrowind Modding Wiki and Brandon Boswell’s site demonstrate this pattern successfully.

4. Landing Page

Replace the default index.md note-style homepage with a structured landing page:

  • Company logo and wiki title
  • Brief description of purpose (“Your strategic knowledge base”)
  • Card grid linking to each section (Entities, Concepts, Sources, Analysis, Decisions)
  • Recent updates list
  • Search prominently placed

The Gatekeeper Wiki and Socratica Toolbox provide working examples of card-grid homepages built in Quartz.

5. Labels and Language

Default TermBusiness Alternative
ExplorerContents / Navigation
BacklinksRelated Pages / See Also
Graph ViewRelationship Map (if kept)
TagsTopics / Categories
Created / ModifiedPublished / Last Updated

Real-World Quartz Deployments

Ten live Quartz sites were evaluated. The most relevant to the business wiki use case:

SiteTypeCustomisationProfessional FeelUX Rating
Brandon BoswellCreator portfolio/blogHeavy — custom nav, avatar, category grid, golden accentsHigh4.5/5
Morrowind Modding WikiCommunity wikiModerate — top nav, custom logo, section hierarchyHigh4/5
Simon Späti Second BrainProfessional knowledge baseModerate-heavy — coral brand colour, top nav, 1000+ notesMedium-high4/5
Gatekeeper WikiGame product wikiModerate — dark theme, card nav, custom logoHigh3.5/5
Sideny’s 3D HandbookTechnical referenceLight — emoji sidebar, callout boxes, hierarchical structureMedium4/5
Quartz DocsFramework documentationDefault (reference implementation)Neutral3.5/5
Jacky Zhao’s GardenPersonal gardenHeavy — hand-drawn art, custom homepage, serif typographyLow (personal)4/5
Socratica ToolboxLearning guideExtreme — grid paper texture, illustrated cards, marqueeLow (playful)4/5
Aaron PhamPersonal ML notesExtreme minimal — brutalist, cream background, sparse navLow (avant-garde)3/5
Ellie HuxtableDeveloper portfolioHeavy — monospace, terminal aesthetic, two-column layoutMedium (developer)3.5/5

Key Patterns from Professional Sites

  1. Replace sidebar Explorer with horizontal top nav — the single most impactful change (used by Brandon Boswell, Morrowind Wiki, Simon Späti, Gatekeeper)
  2. Disable graph view — it signals “digital garden” more than “business documentation” (disabled by 5 of 10 sites)
  3. Add a custom branded homepage with card/tile grid entry points (Gatekeeper, Socratica, Brandon Boswell)
  4. Apply even one branded accent colour — differentiates dramatically from vanilla Quartz (Späti’s coral, Boswell’s gold, Gatekeeper’s cyan)
  5. Add a logo or avatar in the header (Morrowind, Brandon Boswell, Simon Späti)

Risk Assessment and Recommendation

Risks

RiskLikelihoodMitigation
Case-sensitive links break wiki navigationHigh (if casing is inconsistent)Apply PR #2327 locally; enforce consistent casing with Obsidian Linter plugin
Solo maintainer abandons projectLow-mediumMIT licence allows forking; v5 community org discussion underway
v5 introduces breaking changesMedium (12–24 month horizon)Pin to v4 branch; changes are unlikely to affect content format
CEO cannot troubleshoot build errorsMediumPre-configure CI/CD pipeline; document the npx quartz sync workflow
MkDocs Material ecosystem disrupted by MkDocs 2.0MediumReduces the “safer alternative” argument for MkDocs

Final Recommendation

Use Quartz for this project. The rationale:

  1. Zero conversion layer — every alternative requires plugins, converters, or pre-processing steps to handle [[wiki links]]. Quartz processes them natively. For a 178-page wiki with extensive cross-linking, this eliminates an entire class of bugs.

  2. Built-in features match requirements — graph view, backlinks, search, TOC, frontmatter, and dark mode all work without additional packages. MkDocs requires 3–4 pip-installable plugins to match this; Docusaurus requires React knowledge.

  3. One-time customisation investment — transforming the default “digital garden” aesthetic into a professional business tool requires CSS/layout work, but this is a one-time cost amortised over the life of the wiki. The alternatives’ ongoing plugin maintenance and conversion pipeline complexity is a recurring cost.

  4. CEO workflow is simple post-setup — edit Markdown in Obsidian, run npx quartz sync. No Python, no React, no conversion scripts.

Invest the customisation effort upfront: professional typography (Inter), brand colour palette, horizontal top nav, card-grid homepage, renamed labels. Budget 2–3 developer-days for this. The Brandon Boswell and Morrowind Modding Wiki sites prove this is achievable and effective.


Sources

All citations are inline throughout the report. Key primary sources: