VRYO
FeaturesGetting StartedPricingFAQDocs
GitHubLog InSign Up

Introduction

  • Getting Started
  • Concepts

Workspace

  • Workspace Guide

Reference

  • Widget Reference
  • API Reference

Examples

  • Recipes

Resources

  • Templates
Reference

Widget Reference

Complete reference for all 6 widget types and 13 chart types. Every property the AI agent can set.

Chart Widget

The most versatile widget. Supports 13 chart types using Recharts under the hood.

schema
{
  type: "chart",
  chartType: "bar" | "line" | "area" | "scatter" | "pie" | "donut"
           | "heatmap" | "waterfall" | "radar" | "treemap"
           | "funnel" | "combo" | "radialBar",
  xAxis?: { field, label?, domain?, format?, tickCount? },
  series: [{ field, label?, color?, stack? }],
  palette: "indigo" | "emerald" | "amber" | "rose" | "cyan" | "multi",
  showLegend: boolean,
  showGrid: boolean,
  aggregation?: { method: "sum"|"avg"|"count"|"min"|"max", groupBy? },
}

Chart Types

bar
Vertical grouped/stacked bars
line
Time-series with smooth curves
area
Gradient-filled area chart
scatter
X/Y bubble chart
pie
Full circle segments
donut
Pie with inner cutout
heatmap
2D color matrix
waterfall
Running total with +/- bars
radar
Spider/star multi-axis
treemap
Hierarchical area blocks
funnel
Conversion pipeline
combo
Bar + Line on same axes
radialBar
Circular progress bars

AI Agent Usage

agent-prompt-example
{
  "type": "chart",
  "chartType": "combo",
  "title": "Revenue vs Cost — Margin Overlay",
  "xAxis": { "field": "month" },
  "series": [
    { "field": "revenue", "label": "Revenue", "color": "#6366F1" },
    { "field": "cost", "label": "Cost", "color": "#f43f5e" },
    { "field": "margin", "label": "Margin %", "color": "#10b981" }
  ]
}

KPI Widget

Single-metric card for executive dashboards. Shows a primary value with trend indicator, target progress bar, and optional sparkline — inspired by Power BI KPI tiles.

PropTypeDefaultDescription
valuenumber | string—The primary metric value
formatstring—d3 format string, e.g. '$,.0f'
unitstring—Unit suffix: '%', 'users', 'ms'
trend'up' | 'down' | 'flat''flat'Trend direction indicator
trendValuestring—Change label, e.g. '+8.2%'
trendPositivebooleantrueWhether up = good (green) or bad (red)
comparisonLabelstring—Context: 'vs last month', 'YoY'
targetnumber—Renders a progress bar when set
sparklinenumber[]—Mini line chart data points
iconstring—Emoji or icon shown above value
accentcolor enum'indigo'Visual accent color
kpi-example.json
{
  "type": "kpi",
  "title": "Monthly Recurring Revenue",
  "value": 570000,
  "format": "$,.0f",
  "trend": "up",
  "trendValue": "+8.2%",
  "comparisonLabel": "vs last month",
  "target": 600000,
  "sparkline": [380000, 410000, 430000, 460000, 490000, 520000, 570000],
  "icon": "💰",
  "accent": "indigo"
}

Gauge Widget

Semicircular gauge for progress, utilization, and SLA metrics. Supports colored zones and a target marker — like Power BI gauge visuals.

PropTypeDefaultDescription
valuenumber0Current gauge value
minnumber0Minimum (left edge)
maxnumber100Maximum (right edge)
targetnumber—Target tick mark on the arc
formatstring—d3 format for center label
unitstring—Unit suffix
zonesZone[]—Color segments: [{limit, color, label}]
variant'semicircle' | 'full' | 'linear''semicircle'Visual style
gauge-example.json
{
  "type": "gauge",
  "title": "SLA Uptime",
  "value": 99.7,
  "min": 95,
  "max": 100,
  "target": 99.9,
  "unit": "%",
  "zones": [
    { "limit": 97, "color": "#f43f5e", "label": "Critical" },
    { "limit": 99, "color": "#f59e0b", "label": "Warning" },
    { "limit": 100, "color": "#10b981", "label": "Healthy" }
  ]
}

Filter Widget (Slicer)

Interactive filter control for dashboard slicing. The AI agent creates these to add user-controlled filtering — similar to Power BI slicers and Tableau filters. Filters can target other widgets via targetWidgetIds.

PropTypeDefaultDescription
filterType'dropdown' | 'checkbox' | 'range' | 'date' | 'search''dropdown'Control type
fieldstring—Data field this filter applies to
labelstring—Display label
optionsstring[][]Available options (dropdown/checkbox)
selectedValuesstring[][]Currently active selections
rangeMin / rangeMaxnumber—Bounds for range/date filters
multiSelectbooleantrueAllow multiple selections
targetWidgetIdsstring[][]Widget IDs to cross-filter
filter-example.json
{
  "type": "filter",
  "title": "Region Filter",
  "filterType": "checkbox",
  "field": "region",
  "label": "Filter by Region",
  "options": ["North America", "Europe", "APAC", "LATAM", "MEA"],
  "selectedValues": ["North America", "Europe"],
  "targetWidgetIds": ["chart-revenue", "table-customers"]
}

Table Widget

Data table with virtual scrolling, sparklines, conditional formatting, sorting, and search. Handles thousands of rows via @tanstack/react-virtual.

PropTypeDefaultDescription
columnsColumnDef[][]Column definitions
autoColumnsbooleantrueAuto-infer columns from data
pagination{mode, pageSize}—'virtual' | 'paginated' | 'none'
sort{field, direction}—Active sort column
searchQuerystring—Client-side text filter
stickyHeaderbooleantrueFreeze header row
showSummaryRowbooleanfalseFooter totals row
selectionMode'none' | 'single' | 'multi''none'Row selection

Column Features

  • Sparklines — sparkline: { type: "line", valuesField: "trend" }
  • Conditional formatting — JS expressions: { condition: "value >= 15000", style: { color: "#10b981" } }
  • Pinning — pin: "left" | "right"
  • Alignment — align: "left" | "center" | "right"
  • d3 formatting — format: "$,.0f"

Note Widget

Free-form Markdown note for analysis commentary, summaries, and agent-generated insights. Supports accent colors, tags, and cross-references to other widgets via mentions.

PropTypeDefaultDescription
contentstring''Markdown content
accentcolor enum'neutral'Card accent color
mentionsstring[][]Referenced widget IDs
fontSize'sm' | 'md' | 'lg''md'Text size
tagsstring[][]Semantic tags for search
authorType'human' | 'agent''human'Attribution
agentModelstring—Model ID if agent-authored

Base Properties (All Widgets)

Every widget inherits these properties from BaseWidgetSchema.

PropTypeDefaultDescription
idstring—Stable unique ID (use generateWidgetId())
typestring—Widget type discriminant
x, ynumber—Canvas position
widthnumber600Widget width in px
heightnumber400Widget height in px
titlestring'Untitled'Header title
dataBindingDataBinding | nullnullJSON or Arrow data source
lockedbooleanfalsePrevent agent mutations
lastModifiedBystring'human'Agent attribution
zIndexnumber0Layer ordering

AI-First Design

Every widget type is designed for LLM agents to create and modify seamlessly. The agent sees a summarized view of the canvas and produces AgentPatchmutations validated against Zod schemas.

How the Agent Decides Which Widget to Use

  • Single metric → KPI card
  • Progress / utilization → Gauge
  • Time-series trends → Line / Area chart
  • Categorical comparison → Bar chart
  • Composition / share → Pie / Donut / Treemap
  • Multi-dimension comparison → Radar chart
  • Conversion pipeline → Funnel chart
  • Dual metric overlay → Combo chart
  • Running totals → Waterfall chart
  • Activity patterns → Heatmap
  • Goal tracking → Radial bar
  • Raw data exploration → Table widget
  • Analysis narrative → Note widget
  • User-controlled slicing → Filter widget