@sqlrooms/vega
Vega-Lite chart components and AI chart tool integration for SQLRooms.
Installation
npm install @sqlrooms/vega @sqlrooms/duckdb @sqlrooms/uiMain exports
VegaLiteChart(simple + compound component API)createVegaChartTool()for AI tool workflowscreateChartImageForMarkdownTool()for AI-generated Markdown document image assetsVegaChartToolResult- editor utilities/hooks (
useVegaChartEditor,useVegaEditorContext)
Quick start (simple chart)
import {VegaLiteChart} from '@sqlrooms/vega';
export function SalesChart() {
return (
<VegaLiteChart
sqlQuery="SELECT category, SUM(amount) AS total FROM sales GROUP BY category"
spec={{
mark: 'bar',
encoding: {
x: {field: 'category', type: 'nominal'},
y: {field: 'total', type: 'quantitative'},
},
}}
aspectRatio={16 / 9}
/>
);
}Compound component API (editable chart workflow)
import {VegaLiteChart, type VisualizationSpec} from '@sqlrooms/vega';
const initialSpec: VisualizationSpec = {
mark: 'line',
encoding: {
x: {field: 'date', type: 'temporal'},
y: {field: 'value', type: 'quantitative'},
},
};
export function CompoundVegaChart() {
return (
<VegaLiteChart.Container
spec={initialSpec}
sqlQuery="SELECT date, value FROM metrics"
editable
onSpecChange={(spec) => console.log('next spec', spec)}
onSqlChange={(sql) => console.log('next sql', sql)}
>
<VegaLiteChart.Actions />
<VegaLiteChart.Chart />
<VegaLiteChart.SpecEditor />
<VegaLiteChart.SqlEditor />
</VegaLiteChart.Container>
);
}AI integration (createVegaChartTool)
import {
createAiSlice,
createDefaultAiInstructions,
createDefaultAiTools,
} from '@sqlrooms/ai';
import {createVegaChartTool} from '@sqlrooms/vega';
// inside your createRoomStore composer
createAiSlice({
tools: {
...createDefaultAiTools(store),
chart: createVegaChartTool({
editable: true,
editorMode: 'both',
}),
},
getInstructions: () => createDefaultAiInstructions(store),
})(set, get, store);createVegaChartTool constructor options:
editable: whether users can edit SQL/spec in the chart UIeditorMode: which editors to render ('none' | 'sql' | 'vega' | 'both')
LLM invocation / Zod schema fields
At runtime, the tool call payload is validated by a Zod schema.
These fields are supplied by the LLM when invoking the tool (not passed into createVegaChartTool(...)):
sqlQuery: SQL used to fetch chart datavegaLiteSpec: Vega-Lite JSON stringreasoning: explanation shown to users for why this chart/spec was chosen
Markdown document image assets
createChartImageForMarkdownTool(store) creates an AI-only companion tool that renders a Vega chart to SVG or PNG, stores it as an asset on a @sqlrooms/documents Markdown artifact, and returns a ready-to-insert Markdown image link such as:
Use this alongside the existing document commands when the assistant needs a portable conversation summary with static chart images instead of live SQL-backed charts.
Chart images default to the light Vega theme with an explicit background so exported Markdown renders predictably in GitHub, Obsidian, PDF exports, and other document surfaces. When the requested static theme matches the current app theme, the background is resolved from the app's Tailwind --background token and written into the SVG/PNG as a concrete color. The tool also accepts renderTheme: "dark" and background for explicit dark/static export requests.
Example apps
- Vega example: https://github.com/sqlrooms/examples/tree/main/vega
- AI example (with chart tool): https://github.com/sqlrooms/examples/tree/main/ai
Interfaces
- VegaChartActionsProps
- VegaChartContextValue
- VegaEditActionProps
- VegaExportActionProps
- VegaEditorState
- VegaEditorActions
- VegaEditorContextValue
- UseVegaChartEditorOptions
- UseVegaChartEditorReturn
Type Aliases
- ChartImageForMarkdownToolParameters
- ChartImageForMarkdownToolOutput
- VegaChartToolParameters
- VegaChartToolOutput
- VegaChartToolOptions
- EditorMode
- OnSpecChange
- OnSqlChange
Variables
- ChartImageForMarkdownToolParameters
- VegaChartActions
- VegaChartToolParameters
- DEFAULT_VEGA_CHART_DESCRIPTION
- VegaEditAction
- VegaExportAction
- VegaCodeMirrorEditor
VegaMonacoEditor- VegaLiteChart
Functions
- createChartImageForMarkdownTool
- useVegaChartContext
- createSqlValidator
- createVegaChartTool
- VegaChartToolResult
- useVegaEditorContext
- useVegaChartEditor
- loadVegaLiteSchema
- getCachedVegaLiteSchema
- preloadVegaLiteSchema
References
ChartImageForMarkdownToolParametersType
Renames and re-exports ChartImageForMarkdownToolParameters
