Add disabled theme entry to default config and default/blog templates.
Migrate obsidian and ttrpg templates from git-based quartz-themes source
to npm @quartz-themes/core package.
The npm specifier path requires additional work in the esbuild
transpilation pipeline to mark npm imports as external. Reverting
to github: specifiers to restore the docs site immediately.
The npm loader code (parsePluginSource, config-loader, CLI) remains
in place for future use. Only the default config/templates are reverted.
- Added all 44 default plugins as dependencies so npm ci installs them
- Fixed @quartz-community/fonts → @quartz-community/quartz-fonts (actual npm name)
- Regenerated package-lock.json with plugin dependencies
Plugins can now be referenced as "@quartz-community/<name>" in
quartz.config.yaml and via 'quartz plugin add'. The npm path skips
git installation and resolves from node_modules.
Changes:
- gitLoader.ts: detect @scope/name as npm package in parsePluginSource()
- config-loader.ts: skip git install for npm packages, read manifests
from node_modules via createRequire
- install-plugins.ts: filter npm packages from prebuild, fallback to
YAML config parsing to avoid loading full quartz.ts
- plugin-data.js: npm detection in CLI parseGitSource()
- plugin-git-handlers.js: npm install path in handlePluginAdd()
- package.json: add missing hast-util-from-html dependency
The serve-mode watcher globs never matched quartz.config.yaml or
quartz.config.default.yaml, so config edits (theme colors, plugin
flags, footer links) silently required a server restart. This was a
regression from v4, where quartz.config.ts matched the **/*.ts glob.
Add logOverride to the main esbuild build context to silence three
warning types that originate from upstream third-party code bundled
inside plugin dist files:
- direct-eval: gray-matter's JS frontmatter engine in note-properties
- equals-negative-zero: webidl-conversions in citations
- duplicate-object-key: BibTeX month mapping in citations
- Use --ignore-scripts during npm install to prevent duplicate builds
- Skip build entirely when dist/ directory already exists (pre-built plugins)
- Add buildPluginAsync() and runParallel() for concurrent plugin builds
- Convert all 5 build loops to parallel execution bounded by CPU count
- Prune devDependencies after build to avoid singleton duplication