# Charto

> Create charts from tabular files with a single skill flow (analyze -> recommend -> build -> preview). Use this when the user asks to visualize CSV data, inspect columns, or generate artifacts directly.

- Skill: `fatih-akin/charto` (Agent Skill, multi-file: 37 files)
- Install (CLI): `npx skillmds@latest add fatih-akin/charto`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fatih-akin/charto/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: fatih-akin (https://skillmd.com/u/fatih-akin)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/fatih-akin/charto

---


## Zero External Dependencies

This skill is **fully self-contained**. No additional setup or `npm install` required.

- ✅ All JavaScript dependencies bundled into `bundle.mjs`
- ✅ WASM binaries included for PNG rendering
- ✅ Works immediately after folder download
- ✅ Cross-platform (macOS, Linux, Windows)

Just use the `.github/skills/charto/` folder as-is.

---

This skill is a single end-to-end workflow with internal phases, not separate sub-skills.

Project assets for this skill live here:

- `references/chart-workflow-guide.md`: decision and workflow reference
- `scripts/build/dist/`: prebuilt runtime snapshot for direct sharing (generated by `npm run build`)
  - `bundle.mjs`: fully bundled MCP server (all JS deps included)
  - `index_bg.wasm`: WASM binary for PNG rendering
- Root `scripts/*.mjs`: runnable helper scripts that import from `.github/skills/charto/scripts/build/dist/`

Core flow:

1. Load the input data with `load_tabular_file`.
2. Infer schema via `infer_schema`.
3. Propose ranked chart choices with `suggest_chart_options`.
4. If the user picked an option, build it with `generate_vega_spec`.
5. Render output artifacts with `render_chart_preview`.
6. Return artifact paths and a short rationale.

Large dataset flow (required):

1. Always pass `rowLimit` when a file may be large.
2. If large dataset metadata is returned:
   - clearly state that large dataset mode was triggered
   - surface recommended options first
   - explain any fallback aggregation applied
3. In large dataset mode, use `includePngBase64: false` unless inline base64 is explicitly requested.

Rules:

- Never invent columns, values, or transformations.
- Prefer readable, aggregated visuals over noisy row-level output.
- If no viable chart option exists, explain why and ask for dataset adjustments.
- Return generated artifact paths whenever available.
- Ask for the dataset path if missing.
- PNG rendering uses bundled WASM; if rendering fails, fall back to HTML output (no external dependencies needed).
