Node Types
Configuration
Preset Colors
Edges & Connections

CanvasPage Plugin

This plugin renders JSON Canvas (.canvas) files as interactive, pannable and zoomable canvas pages. It supports the full JSON Canvas 1.0 spec.

Install: npx quartz plugin add github:quartz-community/canvas-page

Text Nodes

Text nodes render Markdown content with GFM support:

  • Bold and italic text
  • Strikethrough text
  • External links
  • Inline code blocks
  • Lists (like this one)

Headings Work Too

All standard Markdown syntax is rendered at build time.

File Nodes

File nodes reference other pages in your vault. They appear as clickable links and support popover previews on hover.

The node below links to the CanvasPage documentation:

This plugin is a page type plugin that renders JSON Canvas (.canvas) files as interactive, pannable and zoomable canvas pages. It uses a custom "canvas" page frame that provides a fullscreen, always-on canvas experience with a togglable left sidebar for navigation. It supports the full JSON Canvas 1.0 spec, including text nodes with Markdown rendering, file nodes that link to other pages in your vault, link nodes for external URLs, and group nodes for visual organization. Edges between nodes are rendered as SVG paths with optional labels, arrow markers, and colors.

Note

For information on how to add, remove or configure plugins, see the Configuration page.

This plugin accepts the following configuration options:

  • enableInteraction: Whether to enable pan and zoom interaction on the canvas. Default: true.
  • initialZoom: The initial zoom level when the canvas is first displayed. Default: 1.
  • minZoom: The minimum zoom level allowed when zooming out. Default: 0.1.
  • maxZoom: The maximum zoom level allowed when zooming in. Default: 5.

Canvas Frame

The canvas-page plugin provides its own "canvas" page frame via the Frame Registry. This frame:

  • Renders the canvas in fullscreen mode by default (100vw × 100vh), giving the canvas maximum screen space — leaning into the “endless canvas” concept of JSON Canvas.
  • Provides a togglable left sidebar that slides in from the left edge. This is the only layout slot available — it renders the same components as the left sidebar on content pages (e.g., Explorer, Search, Page Title).
  • The sidebar toggle button (hamburger/close icon) is positioned in the top-left corner.
  • Canvas controls (zoom in, zoom out, reset) are positioned on the right side.
  • On mobile, the sidebar overlays the canvas rather than pushing it aside.

Users can override this frame via quartz.config.yaml if needed:

quartz.config.yaml
layout:
  byPageType:
    canvas:
      template: default # Use standard three-column layout instead

Features

  • Text nodes: Render Markdown content including headings, bold, italic, strikethrough, lists, links, and code blocks via GFM support.
  • File nodes: Link to other pages in your vault. Supports popover previews on hover.
  • Link nodes: Reference external URLs.
  • Group nodes: Visual grouping containers with optional labels and background colors.
  • Edges: SVG connections between nodes with optional labels, arrow markers, and colors. Supports all four sides (top, right, bottom, left) and both preset colors (1–6) and custom hex colors.
  • Togglable sidebar: Hamburger button in the top-left corner toggles the left sidebar for navigation. Press Escape or click the close button to dismiss.
  • Preset colors: Six preset colors (red, orange, yellow, green, cyan, purple) plus custom hex colors (#RRGGBB) for nodes and edges.

API

  • Category: Page Type
  • Function name: ExternalPlugin.CanvasPage().
  • Source: quartz-community/canvas-page
  • Install: npx quartz plugin add github:quartz-community/canvas-page

Link Nodes

Link nodes reference external URLs. The node below links to the JSON Canvas specification:

Color 1 — Red

Color 2 — Orange

Color 3 — Yellow

Color 4 — Green

Color 5 — Cyan

Color 6 — Purple

Custom hex color#ff6600

Configuration Options

  • enableInteraction — Enable pan and zoom. Default: true
  • initialZoom — Initial zoom level. Default: 1
  • minZoom — Minimum zoom level. Default: 0.1
  • maxZoom — Maximum zoom level. Default: 5
  • defaultFullscreen — Start in fullscreen mode. Default: false

Configure in quartz.config.yaml:

CanvasPage({ defaultFullscreen: false, initialZoom: 1 })

Fullscreen Mode

Click the expand button (top-right corner) to toggle fullscreen mode. The canvas fills the entire viewport.

  • Press Escape to exit fullscreen
  • Set defaultFullscreen: true to start in fullscreen
  • The toggle button switches between expand and collapse icons

Quartz Integration

  • Popover previews: Hover over file nodes to see a preview
  • Internal links: File nodes link to pages in your vault
  • Dark mode: Canvas adapts to your theme settings

Edges

Edges connect nodes with SVG paths. They support labels, arrows, and colors.

This edge has a label and an arrow marker.

This edge has a custom color (#ff6600).

Edges can use the same preset colors (1–6) as nodes, or custom hex colors like #ff6600.

API

  • Category: Page Type
  • Function name: ExternalPlugin.CanvasPage()
  • Source: quartz-community/canvas-page
  • Install: npx quartz plugin add github:quartz-community/canvas-page

JSON Canvas Spec

This plugin implements the JSON Canvas 1.0 specification — an open file format for infinite canvas data.

Canvas files use the .canvas extension and are standard JSON. They are natively supported by Obsidian.

supportslabeled edge