PGQViewer

The canvas

Graph results render on a Cytoscape canvas: stable per-label colors, degree-sized nodes, parallel-edge fanning, and arrows that always follow the edge's true source → destination.

PGQViewer drawing a films property graph with a force-directed layout: teal person nodes and red movie nodes connected by directed edges
A force-directed (fcose) layout of person, movie, and genre elements.

Result tabs

  • Graph — the canvas (graph mode only).
  • Table — sortable by header click (asc → desc → none), per-column substring filters, a 200-row window with Load more, and CSV/JSON export in the footer.
  • JSON{vertices, edges} for graph mode, {columns, rows} for SQL mode, with Copy and mode-dependent exports.

The footer always shows row, vertex, and edge counts plus elapsed time. Successive queries merge into one canvas view — vertices and edges deduplicate on stable ids — and Run clears the previous result first.

Fourteen layouts, one governor

Force-directed (fcose — the default, cola, cose, cose-bilkent, euler), hierarchical (dagre, klay), concentric, breadth-first, circle, grid, avsdf, spread, and random. Your choice persists locally. Pick by shape: dagre or klay for trees and DAGs, force-directed for everything else.

A three-tier performance governor keeps big results responsive: above 500 elements per-element transitions are dropped, above 700 force-layout iteration budgets shrink, and above 1,000 heavy force layouts are refused entirely and substituted with a fast equivalent — with a toast, never silently.

Interactions

  • Drag to move a node — it stays pinned until the next layout re-run.
  • Scroll to zoom (clamped 0.2×–3×); toolbar has zoom, Fit, and Re-run layout.
  • Click to select — labels, source → destination, and all properties appear in the footer.
  • Double-click(or the hover Expand pill) to fetch a node's 1-hop neighbourhood. New nodes are laid out around the anchor without disturbing your arrangement, and repeated expansions never duplicate elements.

Theming

Light and dark themes with nine accent palettes (Blue is the default, then Indigo, Sky, Emerald, Amber, Orange, Rose, Fuchsia, Violet), built on a single OKLCH token system so the same label keeps the same perceived hue in both modes. Per-label overrides go further:

  • Colors — an inline color picker on each sidebar row.
  • Captions — choose which property labels every node of a label; falls back to a sensible heuristic (name, title, …, id).
  • Edge thickness — map it to any numeric property.
  • Filtering — substring and per-property filter rules fade non-matching elements; sidebar filtering dims the canvas to match.
  • Focus mode — hides the chrome for presenting; Esc exits.

All of it persists locally in the browser.

Exports

FromFormats
CanvasPNG (2× scale, current theme background), JPG — timestamped filenames.
Graph results (JSON tab)JSON, GraphML, and Cypher — idempotent MERGE statements you can replay into a graph database.
Table resultsCSV, JSON.