Sandbox configuration
This page describes the actual final sandbox/engine/quartz.config.yaml, not a proposed
configuration. The source file starts from the pinned checkout’s
quartz.config.default.yaml; the changes below turn it into a deliberately self-describing
showcase.
Global configuration
configuration:
pageTitle: Quartz Sandbox
pageTitleSuffix: ' — Quartz Sandbox'
enableSPA: true
enablePopovers: true
locale: en-US
baseUrl: quartz.loca.zone
ignorePatterns:
- private
- templates
- .obsidianDifferences from upstream default:
pageTitlechanges fromQuartz 5toQuartz Sandbox.pageTitleSuffixchanges from empty to— Quartz Sandbox, making browser titles self-identifying.baseUrlchanges fromquartz.jzhao.xyztoquartz.loca.zoneso canonical URLs, OG metadata, sitemap and RSS point at this host.- The upstream
analyticsblock is removed: this host sends no third-party analytics. - The pinned default theme remains the base palette;
custom.scssadds only mode-aware, scoped sandbox accents.
Plugin source model
The pinned v5 checkout loads community plugins from npm package names:
- source: "@quartz-community/obsidian-flavored-markdown"
enabled: true
order: 30This is intentionally not the older github:quartz-community/... source syntax used by
the shared engine. The two local plugins use a different, explicit boundary:
- source: ../plugins/sandbox-reading-stats
enabled: true
order: 900
options:
wordsPerMinute: 220
locale: en
- source: ../plugins/sandbox-manifest
enabled: true
order: 900
options:
fileName: sandbox-manifest.json
pretty: trueThose paths resolve relative to the engine working directory and therefore land in
sandbox/plugins, never in the shared checkout. After changing this list, the generated
.quartz/plugins/index.ts is regenerated with PATH=/usr/bin:/bin /usr/bin/npm run install-plugins before building.
Enabled feature families
| Family | Enabled entries | Reason |
|---|---|---|
| Markdown | Obsidian Flavored Markdown, GitHub Flavored Markdown, Crawl Links, LaTeX, Syntax Highlighting, Description, Created/Modified Date | Every experiment page exercises at least one transform. |
| Native page types | Canvas Page, Bases Page | Real .canvas and .base routes live in experiments/. |
| Discovery | Explorer, Graph, Search, Backlinks, Breadcrumbs, Table of Contents | The sandbox should be navigable and inspectable. |
| Metadata/visibility | Note Properties, Alias Redirects, Unlisted Pages, Encrypted Pages | These pages show both positive and negative discovery cases. |
| Emitters | Content Index (sitemap + RSS), OG Image, local Sandbox Manifest | Machine-readable output is part of the experiment, not an afterthought. |
| Navigation chrome | Page Title, Article Title, Content Meta, Dark Mode, Reader Mode, Footer, Favicon, Quartz Fonts, Spacer | The showcase uses a complete but restrained Quartz frame. |
The exact order, options, layout entries, disabled rows and reasons are maintained in the generated roster page. The roster is the source-derived human view; the YAML file is the executable truth.
Layout differences
The toolbar group is explicit so its controls stay together:
layout:
groups:
toolbar:
priority: 35
direction: row
gap: 0.5rembreadcrumbs uses condition: not-index, so the home page does not display a redundant
Home → Home trail. byPageType clears the right rail for canvas and bases routes, and removes
reader mode from folder/tag pages where that narrow view is not useful. See
the layout experiment for the rendered
comparison.
Explicitly disabled
No analytics, comments, citations, hard-line-breaks, ox-hugo, roam, recent-notes,
stacked-pages, tag-list, tag-page, cname, explicit-publish, quartz-themes/core or
remove-draft? No: remove-draft stays enabled so draft pages cannot accidentally enter
this public showcase. The full enabled/disabled truth table is on
the plugin roster.
Isolation checklist
- Checkout:
sandbox/engine, pinned v5.0.0 commit. - Dependencies:
sandbox/engine/node_modulesfromnpm ci. - Content:
sandbox/vault, never/home/loca/dev/wikis. - Output: a fresh
sandbox/dist-<epoch>directory per build. - Origin proof: private loopback port
51947belongs to the sandbox runtime; this showcase’s browser proof uses a separate private port in the 51960–51990 range. - Shared-engine baseline is checked before and after the build and remains branch
v5, commitfd720a71db0ca16f885e75fe0d689a574960e3d9, with only its two pre-existing dirty paths.
If a feature needs a source change in the shared checkout, it is blocked rather than copied or monkey-patched here.