Ultimate Charts
A unified charting skill centered on Vega-Lite — the most LLM-friendly, publication-grade declarative chart grammar. For the ~10% of chart types Vega-Lite doesn't handle natively, it falls back to full Vega (same toolchain, same themes). Two alternative engines (QuickChart.io, ECharts) are available for specific use cases.
Engine Selection
| Context |
Primary Engine |
Output |
Why |
| Papers, reports, docs |
Vega-Lite |
SVG — vector, publication-grade |
Themed (McKinsey/BCG/FT/Economist), offline, YAML specs |
| Exotic charts (candlestick, sankey, waterfall, radar, treemap) |
Vega (full grammar) |
SVG |
Same render.mjs, same theme system, just a --vega flag |
| Quick one-off PNG |
QuickChart.io |
PNG |
Zero deps, natural language input, light/dark built-in |
| Interactive dashboards / BI |
Apache ECharts |
Interactive HTML |
11 templates, live filtering, multi-panel layouts |
| Headless server / bots |
Vega-Lite + Sharp |
PNG |
~15MB, <500ms cold start, no browser |
⭐ Primary Engine: Vega-Lite (with Vega fallback)
This is the default path. It covers all chart types through a single toolchain.
Chart Type Coverage
| Category |
Chart Types |
Engine |
Template File |
| Categorical |
Bar (vertical, horizontal, stacked, grouped), Pie/Donut |
Vega-Lite |
templates/bar.yaml, templates/pie.yaml |
| Time Series |
Line, Area (stacked, streamgraph), Trail |
Vega-Lite |
templates/line.yaml, templates/area.yaml |
| Distribution |
Histogram, Box Plot, Violin, Error Bar, Error Band |
Vega-Lite v5 |
templates/box-plot.yaml |
| Correlation |
Scatter, Bubble, Dot Plot, Heatmap |
Vega-Lite |
templates/scatter.yaml, templates/heatmap.yaml |
| Geographic |
Choropleth, Symbol Map, Connection Map |
Vega-Lite + TopoJSON |
templates/geo.yaml |
| Financial |
Candlestick, OHLC |
Vega (full) |
templates/candlestick.json |
| Flow |
Sankey, Chord |
Vega (full) |
templates/sankey.json |
| Hierarchy |
Treemap, Sunburst |
Vega (full) |
templates/treemap.json |
| Multi-dim |
Radar, Parallel Coordinates |
Vega (full) |
templates/radar.json |
| Containment |
Waterfall, Funnel |
Vega (full) |
templates/waterfall.json |
| Network |
Force-Directed Graph |
Vega (full) |
templates/graph.json |
Workflow
# 90% of cases — Vega-Lite YAML spec → SVG
node ${CLAUDE_SKILL_DIR}/scripts/render.mjs \
--spec chart.yaml \
--output chart.svg \
--theme mckinsey
# 10% exotic cases — full Vega JSON spec → SVG
node ${CLAUDE_SKILL_DIR}/scripts/render.mjs \
--vega \
--spec candlestick.json \
--output chart.svg \
--theme ft
Available Themes (Vega-Lite & Vega)
| Theme |
Flag |
Primary |
Best For |
| Onsen |
--theme onsen |
Blue #4d93e5 |
Product dashboards |
| Neutral |
--theme neutral |
Grey #374151 |
Academic papers |
| Bain |
--theme bain |
Red #CC0000 |
Strategy consulting |
| McKinsey |
--theme mckinsey |
Blue #1c3cdf |
Executive presentations |
| BCG |
--theme bcg |
Green #29BA74 |
Sustainability |
| Economist |
--theme economist |
Red #E3120B |
Data journalism |
| FT |
--theme ft |
Teal #0D7680 |
Financial reporting |
| Deloitte |
--theme deloitte |
Lime #86BC25 |
Audit, advisory |
Style Presets
--variant light # Light background (default)
--variant dark # Dark background
--size desktop # 728x420px (default)
--size mobile # 600x400px
--width 1200 # Custom width override
--height 600 # Custom height override
Alternative Engines
QuickChart.io (Zero-dependency PNG)
For when the user just wants a quick chart image without installing anything.
# 1. Write payload to file (NEVER shell-interpolate data)
cat > payload.json << 'EOF'
{
"version": "4",
"backgroundColor": "white",
"width": 600,
"height": 400,
"chart": { "type": "bar", "data": { ... } }
}
EOF
# 2. POST with curl
curl -X POST https://quickchart.io/chart \
-H 'Content-Type: application/json' \
-d @payload.json \
--output chart.png
See references/quickchart.md for theme tokens and all chart configs.
Apache ECharts (Interactive HTML)
For BI dashboards, financial charts, and multi-panel interactivity.
See references/echarts.md for 11 templates and project setup.
Decision Flow
User asks for chart
├─ Is this for a paper, report, or publication?
│ └─ YES → Vega-Lite → SVG (--theme neutral for papers)
├─ Is this a candlestick, waterfall, sankey, treemap, or radar?
│ └─ YES → Vega (full) → SVG (same --theme support)
├─ Is this a quick one-off visual with no local setup?
│ └─ YES → QuickChart.io → PNG (~/Downloads/)
├─ Is this an interactive dashboard or BI tool?
│ └─ YES → ECharts → HTML (project-based)
├─ Is this a headless server / automated report?
│ └─ YES → Vega-Lite → PNG (Sharp, <500ms)
└─ Default → Vega-Lite → SVG
First-Time Setup (Vega-Lite Engine)
# Install the onsen-chart-skill
npx skills add onsen-ai/chart-skill
# Install dependencies (one-time, ~50MB)
cd ${CLAUDE_SKILL_DIR} && npm install --production
QuickChart.io and ECharts engines require no local dependencies.
Best Practices
- Data never touches the shell — always write payloads to files with Write, then reference with
--spec or -d @file
- Specify the engine explicitly in your instruction: "use Vega-Lite, bar chart, data: ..."
- Use Vega (--vega flag) when the chart type isn't in Vega-Lite's native marks
- Templates live in
templates/ — copy, modify data, and re-render
- Themes apply to both Vega-Lite and full Vega — the renderer handles both
1---2name: nextreme-charts3description: Generate publication-grade SVG charts from any data using Vega-Lite (with full Vega fallback for exotic types). Also supports QuickChart.io for zero-dependency PNG and ECharts for interactive HTML dashboards. This skill handles every chart type — bar, line, area, pie, scatter, box-plot, heatmap, candlestick, waterfall, sankey, radar, treemap, geographic, and more.4license: MIT5---67# Ultimate Charts89A unified charting skill centered on **Vega-Lite** — the most LLM-friendly, publication-grade declarative chart grammar. For the ~10% of chart types Vega-Lite doesn't handle natively, it falls back to **full Vega** (same toolchain, same themes). Two alternative engines (QuickChart.io, ECharts) are available for specific use cases.1011---1213## Engine Selection1415| Context | Primary Engine | Output | Why |16|---------|---------------|--------|-----|17| **Papers, reports, docs** | Vega-Lite | **SVG** — vector, publication-grade | Themed (McKinsey/BCG/FT/Economist), offline, YAML specs |18| **Exotic charts** (candlestick, sankey, waterfall, radar, treemap) | **Vega** (full grammar) | **SVG** | Same `render.mjs`, same theme system, just a `--vega` flag |19| **Quick one-off PNG** | QuickChart.io | **PNG** | Zero deps, natural language input, light/dark built-in |20| **Interactive dashboards / BI** | Apache ECharts | **Interactive HTML** | 11 templates, live filtering, multi-panel layouts |21| **Headless server / bots** | Vega-Lite + Sharp | **PNG** | ~15MB, <500ms cold start, no browser |2223---2425## ⭐ Primary Engine: Vega-Lite (with Vega fallback)2627This is the default path. It covers **all chart types** through a single toolchain.2829### Chart Type Coverage3031| Category | Chart Types | Engine | Template File |32|----------|-------------|--------|---------------|33| **Categorical** | Bar (vertical, horizontal, stacked, grouped), Pie/Donut | Vega-Lite | `templates/bar.yaml`, `templates/pie.yaml` |34| **Time Series** | Line, Area (stacked, streamgraph), Trail | Vega-Lite | `templates/line.yaml`, `templates/area.yaml` |35| **Distribution** | Histogram, Box Plot, Violin, Error Bar, Error Band | Vega-Lite v5 | `templates/box-plot.yaml` |36| **Correlation** | Scatter, Bubble, Dot Plot, Heatmap | Vega-Lite | `templates/scatter.yaml`, `templates/heatmap.yaml` |37| **Geographic** | Choropleth, Symbol Map, Connection Map | Vega-Lite + TopoJSON | `templates/geo.yaml` |38| **Financial** | **Candlestick**, OHLC | **Vega** (full) | `templates/candlestick.json` |39| **Flow** | **Sankey**, Chord | **Vega** (full) | `templates/sankey.json` |40| **Hierarchy** | **Treemap**, Sunburst | **Vega** (full) | `templates/treemap.json` |41| **Multi-dim** | **Radar**, Parallel Coordinates | **Vega** (full) | `templates/radar.json` |42| **Containment** | **Waterfall**, Funnel | **Vega** (full) | `templates/waterfall.json` |43| **Network** | Force-Directed Graph | **Vega** (full) | `templates/graph.json` |4445### Workflow4647```bash48# 90% of cases — Vega-Lite YAML spec → SVG49node ${CLAUDE_SKILL_DIR}/scripts/render.mjs \50 --spec chart.yaml \51 --output chart.svg \52 --theme mckinsey5354# 10% exotic cases — full Vega JSON spec → SVG55node ${CLAUDE_SKILL_DIR}/scripts/render.mjs \56 --vega \57 --spec candlestick.json \58 --output chart.svg \59 --theme ft60```6162### Available Themes (Vega-Lite & Vega)6364| Theme | Flag | Primary | Best For |65|-------|------|---------|----------|66| Onsen | `--theme onsen` | Blue `#4d93e5` | Product dashboards |67| Neutral | `--theme neutral` | Grey `#374151` | Academic papers |68| Bain | `--theme bain` | Red `#CC0000` | Strategy consulting |69| McKinsey | `--theme mckinsey` | Blue `#1c3cdf` | Executive presentations |70| BCG | `--theme bcg` | Green `#29BA74` | Sustainability |71| Economist | `--theme economist` | Red `#E3120B` | Data journalism |72| FT | `--theme ft` | Teal `#0D7680` | Financial reporting |73| Deloitte | `--theme deloitte` | Lime `#86BC25` | Audit, advisory |7475### Style Presets7677```bash78--variant light # Light background (default)79--variant dark # Dark background80--size desktop # 728x420px (default)81--size mobile # 600x400px82--width 1200 # Custom width override83--height 600 # Custom height override84```8586---8788## Alternative Engines8990### QuickChart.io (Zero-dependency PNG)9192For when the user just wants a quick chart image without installing anything.9394```bash95# 1. Write payload to file (NEVER shell-interpolate data)96cat > payload.json << 'EOF'97{98 "version": "4",99 "backgroundColor": "white",100 "width": 600,101 "height": 400,102 "chart": { "type": "bar", "data": { ... } }103}104EOF105106# 2. POST with curl107curl -X POST https://quickchart.io/chart \108 -H 'Content-Type: application/json' \109 -d @payload.json \110 --output chart.png111```112113See `references/quickchart.md` for theme tokens and all chart configs.114115### Apache ECharts (Interactive HTML)116117For BI dashboards, financial charts, and multi-panel interactivity.118119See `references/echarts.md` for 11 templates and project setup.120121---122123## Decision Flow124125```126User asks for chart127 ├─ Is this for a paper, report, or publication?128 │ └─ YES → Vega-Lite → SVG (--theme neutral for papers)129 ├─ Is this a candlestick, waterfall, sankey, treemap, or radar?130 │ └─ YES → Vega (full) → SVG (same --theme support)131 ├─ Is this a quick one-off visual with no local setup?132 │ └─ YES → QuickChart.io → PNG (~/Downloads/)133 ├─ Is this an interactive dashboard or BI tool?134 │ └─ YES → ECharts → HTML (project-based)135 ├─ Is this a headless server / automated report?136 │ └─ YES → Vega-Lite → PNG (Sharp, <500ms)137 └─ Default → Vega-Lite → SVG138```139140## First-Time Setup (Vega-Lite Engine)141142```bash143# Install the onsen-chart-skill144npx skills add onsen-ai/chart-skill145146# Install dependencies (one-time, ~50MB)147cd ${CLAUDE_SKILL_DIR} && npm install --production148```149150QuickChart.io and ECharts engines require no local dependencies.151152## Best Practices153154- **Data never touches the shell** — always write payloads to files with Write, then reference with `--spec` or `-d @file`155- **Specify the engine explicitly** in your instruction: "use Vega-Lite, bar chart, data: ..."156- **Use Vega (--vega flag)** when the chart type isn't in Vega-Lite's native marks157- **Templates** live in `templates/` — copy, modify data, and re-render158- **Themes apply to both Vega-Lite and full Vega** — the renderer handles both