scope:
- Common Quartz failure modes, causes, diagnostics, fixes.
Build Errors
Could not resolve ... or missing module errors
cause:
- Plugin missing from
.quartz/plugins/.
fix:
- Restore plugins pinned in
quartz.lock.json:
npx quartz plugin installtsc type errors after updating
cause:
npx quartz upgradechanged internal APIs used byquartz.tsoverrides.
fix:
- Read the changelog.
- Update affected
quartz.tsoverrides for breaking API changes.
Build is slow
fix:
- Increase build concurrency:
npx quartz build --concurrency 8
# or the shorthand:
npx quartz build -c 8notes:
- Default: all available CPU cores.
- Memory-constrained environments, especially CI, may build faster with lower concurrency.
Plugin Issues
Plugin not loading after installation
checks:
quartz.config.yamlcontains the plugin underplugins:.- Plugin entry sets
enabled: true. npx quartz plugin listshows the plugin installed.npx quartz plugin install --latest --dry-runreports healthy plugin state.
Plugin options not taking effect
cause:
- Incorrect YAML indentation.
- Options must nest under the plugin entry:
plugins:
- source: github:quartz-community/some-plugin
enabled: true
options:
myOption: value # correct: nested under optionsfix:
- Move misplaced options under
options:.
ExternalPlugin.X is not a function
cause:
- Plugin referenced in
quartz.tsbut absent from.quartz/plugins/.
fix:
- Install it:
npx quartz plugin add github:quartz-community/plugin-name - Or remove the
quartz.tsreference.
Plugins fail to build on a fresh clone
Important
Most community plugins ship a prebuilt
dist/directory and skip builds. This mainly affects in-development plugins and older plugins without prebuilt distribution.
symptom:
- Fresh
npx quartz plugin install, or the automatic plugin step innpx quartz create, reports several plugin build failures, often 10–15. - Git clone and checkout succeed.
npm run buildinside affected plugins fails.
cause:
quartz.lock.jsonpins each plugin to a commit.- Older commits may depend on earlier
@quartz-community/types/@quartz-community/utilsversions whose built artifacts no longer exist in the dependency git repo. - Plugin
tsup/tscbuilds cannot resolve expected type declarations.
fix:
- Refresh all plugins to latest default-branch commits:
npx quartz plugin install --latesteffect:
- Rewrites
quartz.lock.jsonwith newest plugin commits. - Pins newer
@quartz-community/*versions with available built output. - Rebuilds every plugin from scratch.
- Future
npx quartz plugin installrestores cleanly from the refreshed lockfile.
plugin install hangs, OOMs, or fails on low-end hardware
Note
Prebuilt plugins use fewer resources because they skip
npm installandnpm run build.
cause:
npx quartz plugin installclones, fetches, and builds plugins in parallel across all CPU cores.- Each worker may run its own
npm installandnpm run build. - Parallel builds can exhaust RAM, trigger the OOM killer, or appear hung.
affected:
- Low-end laptops.
- Raspberry Pi.
- Small VPS instances.
- Restrictive CI runners.
fix:
- Lower parallelism with
--concurrency/-c:
# Install one plugin at a time (safest, slowest)
npx quartz plugin install --latest -c 1
# Two at a time — usually works on 4 GB machines
npx quartz plugin install --latest --concurrency 2applies_to:
plugin add- Deprecated aliases:
plugin update,plugin restore,plugin check,plugin resolve
npx quartz plugin add github:quartz-community/some-plugin -c 1diagnosis:
- If
plugin install -c 1fails near the same plugin repeatedly, suspect that plugin’s build, not concurrency. - Run with
--verbose. - Check the plugin repository for known issues.
Content Issues
Notes not showing up
checks:
- File lives under
content/. - Frontmatter does not set
draft: true; RemoveDrafts filters drafts. - If using ExplicitPublish, frontmatter sets
publish: true. - configuration
ignorePatternsdoes not exclude the file path.
Wikilinks not resolving
checks:
- ObsidianFlavoredMarkdown is enabled.
- Target note exists under
content/. - Filename casing matches link casing.
Images not displaying
checks:
- Image lives in a Quartz-processed folder, usually
content/or a subfolder. - Markdown image path matches the actual file path.
- Assets emitter is enabled; default: enabled.
GitHub Sync Issues
fatal: --[no-]autostash option is only valid with --rebase
cause:
- Outdated
git.
fix:
- Update
git.
fatal: The remote end hung up unexpectedly
cause:
- Git default buffer too small for repository content.
fix:
- Increase buffer:
git config http.postBuffer 524288000Merge conflicts during sync
trigger:
npx quartz syncencounters merge conflicts.
fix:
- Resolve conflicts in an editor.
- Run
git add .. - Run
git commit. - Run
npx quartz sync --no-pull.
reset:
- Run
npx quartz restoreto recover content from cache.
Development Server Issues
Hot reload not working
checks:
- Use serve mode:
npx quartz build --serve. - Port
3001is unblocked; default--wsPortfor hot reload notifications. - Remote development: set
--remoteDevHostto the correct WebSocket URL. - TLS reverse proxy for remote development: set
--wsPublicPortto the public port, default3002, and--wsPortto the local bind port.
Port already in use
fix:
- Change the port:
npx quartz build --serve --port 3000Still stuck?
next_steps:
- Search GitHub Issues.
- Ask in the Discord Community.
- Rerun the failing command with
--verbose.