No description
Find a file
2026-03-22 13:12:01 +01:00
.github/workflows ci: add dist externals verification step 2026-03-17 19:41:47 +01:00
dist fix: resolve links correctly on subdirectory deployments 2026-03-18 11:50:35 +01:00
src fix: resolve links correctly on subdirectory deployments 2026-03-18 11:50:35 +01:00
test fix: resolve ESLint and formatting issues for CI compliance 2026-03-09 03:47:43 +01:00
types fix: use fetchData global for path-prefixed deployments 2026-03-16 18:54:25 +01:00
.eslintrc.json fix: use fetchData global for path-prefixed deployments 2026-03-16 18:54:25 +01:00
.gitignore chore: commit dist/ and remove prepare script 2026-03-14 21:58:53 +01:00
.prettierignore fix: use fetchData global for path-prefixed deployments 2026-03-16 18:54:25 +01:00
.prettierrc Initial commit 2026-02-07 04:05:30 +01:00
CHANGELOG.md Initial commit 2026-02-07 04:05:30 +01:00
LICENSE Initial commit 2026-02-07 04:05:30 +01:00
package-lock.json chore: update @quartz-community/utils to 8d2e14b 2026-03-22 12:38:22 +01:00
package.json fix: add missing peer dependencies as devDependencies for CI build 2026-03-16 19:07:37 +01:00
README.md docs: update README for v5 unified config system 2026-02-25 16:07:11 +01:00
tsconfig.build.json fix: use separate tsconfig for DTS build to avoid vitest dependency 2026-03-22 13:12:01 +01:00
tsconfig.json fix: use fetchData global for path-prefixed deployments 2026-03-16 18:54:25 +01:00
tsup.config.ts fix: use separate tsconfig for DTS build to avoid vitest dependency 2026-03-22 13:12:01 +01:00
vitest.config.ts fix: resolve CI failures by fixing lint config and test setup 2026-02-09 12:58:48 +01:00

@quartz-community/graph

The Graph View component for Quartz - visualize your digital garden as an interactive network graph.

Features

  • 🕸️ Interactive Network Graph - Visualize connections between your pages
  • 🎨 Local & Global Views - See connections to current page or explore the entire graph
  • Smooth Animations - Built with D3 force simulation and PixiJS rendering
  • 🏷️ Tag Support - Visualize tags as nodes in the graph
  • 🖱️ Interactive Controls - Drag, zoom, and pan around the graph
  • 💾 Visited Tracking - Highlights pages you've already visited
  • ⌨️ Keyboard Shortcuts - Press Ctrl/Cmd + G to toggle the global graph

Installation

npx quartz plugin add github:quartz-community/graph

Usage

plugins:
  - source: github:quartz-community/graph
    enabled: true
    layout:
      position: right
      priority: 10

For advanced use cases, you can override in TypeScript:

import * as ExternalPlugin from "./.quartz/plugins";

ExternalPlugin.Graph({
  localGraph: {
    drag: true,
    zoom: true,
    depth: 1,
  },
  globalGraph: {
    drag: true,
    zoom: true,
    depth: -1,
  },
});

Configuration Options

interface D3Config {
  /** Enable node dragging */
  drag: boolean;
  /** Enable zooming */
  zoom: boolean;
  /** Depth of connections to show (-1 for all) */
  depth: number;
  /** Graph scale factor */
  scale: number;
  /** Force repelling strength */
  repelForce: number;
  /** Center force strength */
  centerForce: number;
  /** Distance between linked nodes */
  linkDistance: number;
  /** Label font size */
  fontSize: number;
  /** Opacity multiplier */
  opacityScale: number;
  /** Tags to exclude */
  removeTags: string[];
  /** Show tags as nodes */
  showTags: boolean;
  /** Dim non-hovered nodes on hover */
  focusOnHover?: boolean;
  /** Enable radial layout */
  enableRadial?: boolean;
}

interface GraphOptions {
  localGraph?: Partial<D3Config>; // Local page graph config
  globalGraph?: Partial<D3Config>; // Global graph config
}

Default Behavior

Local Graph

By default, the local graph:

  • Shows 1 level of connections (direct links only)
  • Dragging enabled
  • Zoom enabled
  • Tags shown as nodes
  • 250px height
  • Displays on the right side of pages

Global Graph

By default, the global graph:

  • Shows all connections (depth: -1)
  • Opens in fullscreen modal when clicking the graph icon
  • Keyboard shortcut: Ctrl/Cmd + G
  • Focus on hover enabled (dims non-connected nodes)
  • Radial layout enabled
  • Click outside or press Escape to close

How It Works

The Graph component fetches connection data from /static/contentIndex.json (generated by the ContentIndex emitter) and renders it using:

  • D3 for physics simulation (force-directed layout)
  • PixiJS for high-performance WebGL rendering

External libraries are loaded from CDN when the graph is first rendered.

[!info] Graph View requires the ContentIndex emitter plugin to be present in your Quartz configuration.

Development

This is a first-party Quartz community plugin. It serves as both:

  1. A production-ready Graph View component
  2. A reference implementation for building Quartz community plugins

To build locally:

npm install
npm run build

The prepare script automatically builds during installation.

Documentation

See the Quartz documentation for more information.

License

MIT