Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
5b34917
feat: support npm scoped package specifiers for plugins
saberzero1 Jul 22, 2026
69571de
chore: remove dev-mode local config (should not be committed)
saberzero1 Jul 22, 2026
de21613
style: format loader files
saberzero1 Jul 22, 2026
af583c1
chore: remove dev-mode config
saberzero1 Jul 22, 2026
f45b9d4
chore: gitignore quartz.config.yaml (user-generated)
saberzero1 Jul 22, 2026
ab8e773
revert: do not gitignore quartz.config.yaml (user config file)
saberzero1 Jul 22, 2026
97eea3e
feat: migrate default config and templates to npm specifiers
saberzero1 Jul 22, 2026
57094a8
fix: make quartz.lock.json optional in Dockerfile
saberzero1 Jul 22, 2026
fe1f1d3
fix: add npm plugin dependencies and fix fonts package name
saberzero1 Jul 22, 2026
7ed01dd
fix: add legacy-peer-deps for plugin peer dependency conflicts
saberzero1 Jul 22, 2026
eefff26
chore: retrigger deploy after lockfile fix
saberzero1 Jul 22, 2026
6fdeaef
fix: use npm install instead of npm ci in deploy
saberzero1 Jul 22, 2026
b6939da
fix: use npm install in all CI workflows for lockfile compatibility
saberzero1 Jul 23, 2026
a71cbfb
fix: use npm install in Dockerfile and copy .npmrc for peer dep config
saberzero1 Jul 23, 2026
4b7ecb9
revert: restore github: specifiers in default config and templates
saberzero1 Jul 23, 2026
11b9960
feat: migrate to npm specifiers with type-safe plugin index
saberzero1 Jul 23, 2026
e8ccb79
chore: updated package-lock.json
saberzero1 Jul 23, 2026
4978591
chore: pin plugin dependencies to semver ranges
saberzero1 Jul 23, 2026
ebdbb3d
chore: keep legacy-peer-deps (required for 44 plugins with varying pe…
saberzero1 Jul 23, 2026
966307e
style: format docs/hosting.md and loader/index.ts
saberzero1 Jul 23, 2026
3d99dca
style: fix whitespace in docs/hosting.md
saberzero1 Jul 23, 2026
555b2ba
docs: add npm plugin specifier migration guide
saberzero1 Jul 23, 2026
581f670
fix: decouple Head.tsx from og-image plugin import (#2495)
saberzero1 Jul 23, 2026
e055ead
merge: sync with upstream jackyzha0/quartz v5 (23 commits)
Faustze Jul 23, 2026
a0851cb
fix: avoid shell interpolation in npm install call
Faustze Jul 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
restore-keys: |
${{ runner.os }}-plugins-

- run: npm ci
- run: npm install

- name: Install Quartz plugins
run: npx quartz plugin install
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/templates/build-preview.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
restore-keys: |
${{ runner.os }}-plugins-

- run: npm ci
- run: npm install

- name: Install Quartz plugins
run: npx quartz plugin install
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/templates/deploy-v5.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
restore-keys: |
${{ runner.os }}-plugins-

- run: npm ci
- run: npm install

- name: Install Quartz plugins
run: npx quartz plugin install
Expand Down
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
engine-strict=true
legacy-peer-deps=true
5 changes: 3 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
WORKDIR /usr/src/app
COPY package.json .
COPY package-lock.json* .
COPY .npmrc* .
COPY quartz/ ./quartz/
COPY quartz.lock.json .
RUN npm ci; npx quartz plugin install
COPY quartz.lock.json* .

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Remove the deleted lockfile from the Docker copy step.

quartz.lock.json is removed in this PR, so COPY quartz.lock.json* . has no source match and the image build fails before npm install. Remove this instruction.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Dockerfile` at line 11, Remove the `COPY quartz.lock.json* .` instruction
from the Dockerfile so the build no longer references the deleted lockfile and
can proceed to `npm install`.

RUN npm install; npx quartz plugin install

FROM node:22-slim
WORKDIR /usr/src/app
Expand Down
45 changes: 45 additions & 0 deletions docs/getting-started/upgrading.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,48 @@ npx quartz plugin prune # remove orphaned plugins
```

See the [[cli/plugin#prune|plugin prune reference]] for more details.

## Switching to npm Plugin Specifiers

First-party Quartz plugins are now published to npm under the `@quartz-community` scope. If your `quartz.config.yaml` uses `github:` specifiers, you can optionally switch to npm specifiers for faster installs and better version pinning.

### Why Switch?

- **Faster installs**: npm packages are cached locally and don't require git cloning
- **Version pinning**: npm uses semver ranges, so you control when to update
- **No build step**: npm packages ship pre-built, unlike git sources which may need to build on install

### How to Migrate

Update each plugin source in your `quartz.config.yaml` from the `github:` format to the quoted npm format:

```yaml
# Before
plugins:
- source: github:quartz-community/syntax-highlighting
enabled: true

# After
plugins:
- source: "@quartz-community/syntax-highlighting"
enabled: true
```

> [!important]
> The `@` scoped name must be quoted in YAML. Use double quotes around the source value.

Then install the packages:

```bash
npm install @quartz-community/syntax-highlighting
```

Or install all default plugins at once:

```bash
npm install @quartz-community/created-modified-date @quartz-community/syntax-highlighting @quartz-community/obsidian-flavored-markdown @quartz-community/github-flavored-markdown @quartz-community/table-of-contents @quartz-community/crawl-links @quartz-community/description @quartz-community/latex @quartz-community/quartz-fonts @quartz-community/remove-draft @quartz-community/alias-redirects @quartz-community/content-index @quartz-community/favicon @quartz-community/og-image @quartz-community/cname @quartz-community/canvas-page @quartz-community/content-page @quartz-community/folder-page @quartz-community/tag-page @quartz-community/explorer @quartz-community/graph @quartz-community/search @quartz-community/backlinks @quartz-community/article-title @quartz-community/content-meta @quartz-community/page-title @quartz-community/darkmode @quartz-community/reader-mode @quartz-community/breadcrumbs @quartz-community/footer @quartz-community/spacer @quartz-community/bases-page @quartz-community/note-properties @quartz-community/unlisted-pages @quartz-community/encrypted-pages
```

### Do I Have to Switch?

No. The `github:` specifiers continue to work and will be supported indefinitely. They are still the recommended approach for third-party and community plugins that are not published to npm. The npm path is an optional improvement for first-party plugins.
Loading