How to use
- Copy the installation command and review the source package before installing it in your own agent environment.
- Check the source document for required tools, credentials and supported hosts.
- Describe your input and desired deliverable; review the output against the source material.
npx skills add https://github.com/getnao/nao --skill build-custom-chartsBefore you start
- Installation does not include a model subscription, API allowance or permission to access your files.
- Repository stars and installation counts describe activity, not an independent quality or security test.
Rendered from the source repository. Headings, examples, code, tables, links, and referenced images are preserved.
build-custom-charts
Use this skill when a project needs a visualization beyond nao's built-in chart types.
Create a chart
Add agent/charts/<type>.js, where <type> starts with a lowercase letter and may then contain lowercase letters, numbers, hyphens, or underscores. It must not collide with a built-in chart type (such as bar, line, pie) or table. Names that break these rules are silently ignored. The file must export a render function:
export function render(element, context) {
const { data, config, colors, theme, libs } = context;
element.textContent = `${data.length} rows`;
return () => element.replaceChildren();
}The context contains:
data: rows from the referencedexecute_sqlresultconfig:chartType,xAxisKey,xAxisType,series, andtitlecolors: nao's default chart palettetheme:lightordarklibs: the installedReact,ReactDOM, andRechartsmodules
Use plain JavaScript without JSX. Do not import bare package names; use the libraries from context.libs. A React chart must return a cleanup function that unmounts its root.
Optionally add agent/charts/<type>.json:
{
"name": "Bubble chart",
"description": "Shows two numeric axes while marker size represents a third measure."
}The description tells the agent when to select the chart. Without metadata, nao derives a name from the file name.
Constraints
- Custom charts render only in authenticated, interactive web chats.
- Stories, PNG exports, automations, MCP embeds, and messaging channels use built-in charts.
- Keep modules self-contained and treat them as trusted project code.
- Return cleanup for event listeners, timers, React roots, and other resources.
- Editing the module reloads active custom charts within a few seconds.

