For Developers
The VisQuill GDK gives you geometric primitives, a reactive constraint system, and built-in interaction handling — the building blocks for interactive visualization tools that go beyond standard charting. It is TypeScript-first: every primitive, value, and reactive dependency is fully typed, with no separate type packages needed. See licensing options .
Resources
GDK
Overview of the Graphics Development Kit — core principles, scope, intended use, and licensing. Start here to understand what the GDK is and whether it fits your needs.
About the GDKGuide
Conceptual documentation covering geometric primitives, reactive systems, constraints, and architectural patterns. Start here if you're ready to build.
Read the GuideLab
Executable demos and reusable blueprints demonstrating specific concepts and usage patterns. Useful for exploring what's possible and learning by example. Also available on GitHub.
Explore the LabDocs
Complete API reference including all type definitions and method descriptions. Use this alongside the Guide once you're building.
View the DocsInstallation
The VisQuill GDK is available as an npm package and can be installed into any modern TypeScript project.
npm install @visquill/visquill-gdkScaffold
Spin up a new VisQuill project in seconds with the official scaffold. Choose from a minimal plain setup or a MapLibre map integration — everything wired up and ready to run.
npm create visquill@latestThe scaffold is available as create-visquill on npm.
Minimal Example
The example below shows a minimal VisQuill setup using the recommended CSS class approach for styling. More advanced examples are available in VisQuill Lab.
import { VisQuill, Reactive, Circles, Attach } from "@visquill/visquill-gdk"
/**
* A draggable handle with a circle that tracks it reactively.
* Styles are defined in a CSS file using the prefix chain.
*
* @param div - The div element that will contain the graphic
*/
export function run(div: HTMLDivElement) {
const rvg = VisQuill.create(div, "my-graphic-")
const canvas = rvg.canvas
// A draggable handle — class: "my-graphic-handle"
const handle = canvas.handles.disk("handle", { x: 300, y: 200 })
// A circle that follows the handle — class: "my-graphic-ring"
const ring = canvas.visuals.circle("ring")
Reactive.do([handle], () => {
Circles.circleAt(handle, 60, ring)
})
// A label that stays above the handle — class: "my-graphic-label"
const label = canvas.text.label("", "label")
Attach.pointToPoint(label, handle, { offset: { x: 0, y: -80 } })
Reactive.do([handle], () => {
label.value = `${Math.round(handle.x)}, ${Math.round(handle.y)}`
})
} CSS classes are composed from the prefix you pass to VisQuill.create plus the name you pass to each visual. Your stylesheet targets the fully-qualified name — for example .my-graphic-ring. See the Guide for a full walkthrough, or browse the Lab for more complex examples.
Need something built? I take on custom visualization projects built on the GDK — from one-off interactive charts to full visual tooling. Learn more
