Wc
FreeNot checkedNative web components (Lit, light DOM) for michi-vz charts - SVG, canvas & WebGPU rendering, styleable with your own CSS, accessible, and LLM-ready.
About
Native web components (Lit, light DOM) for michi-vz charts - SVG, canvas & WebGPU rendering, styleable with your own CSS, accessible, and LLM-ready.
README
Charts that move with your stack, not against it. One rendering engine, twenty-one chart types, and first-class support for React, Vue, Svelte, Angular, native web components, or no framework at all. Every chart is interactive, accessible, and emits an LLM-ready data context you can drop straight into a report, a dashboard, or an AI feature.
Live demos and docs -> michi-vz.netlify.app
Why @michi-vz
- For developers - pick your framework, keep your charts. The same engine powers React, Vue, Svelte, Angular, web components, and vanilla JS, so a stack change never means a charting rewrite. Fully typed, tree-shakeable, light DOM, and styleable with ordinary CSS.
- For teams and managers - one charting standard across every project and every framework your teams use. No vendor lock-in, MIT-licensed, accessible by default (every chart ships a hidden screen-reader table), and ready for the AI features on your roadmap.
- For analysts, finance, and reporting - purpose-built financial views like tornado (dual horizontal bar), range, gap, and ribbon charts, with a built-in notion of certain vs. estimated values so forecasts and actuals read clearly. Interactive tooltips and highlighting make the numbers easy to explore and easy to put in front of a client.
- For everyone making charts - clean defaults that look good out of the box, smooth interactions, and copy-paste examples in the docs.
Lineage
@michi-vz is the framework-agnostic successor to the original React-only
michi-vz
(live demos). That first version was
React-only; this rebuild extracts the same battle-tested charts into a plain-TS
engine so they run on React, Vue, Svelte, Angular, web components, or plain
JavaScript, while keeping the original behaviour and visual style intact.
What's inside
A plain-TS rendering engine (@michi-vz/core), native web components
(@michi-vz/wc, Lit + light DOM), thin wrappers for React / Vue / Svelte /
Angular, and an opt-in client-side AI insights layer (@michi-vz/insights,
in progress). Every chart emits a renderer-agnostic, LLM-ready ChartContext
(structured data + stats + rule-based NL summary + a hidden a11y table mirror)
that is identical whether the chart renders as SVG or canvas.
Charts (21)
GapChart · LineChart · FanChart (forecast) · AreaChart · ScatterPlot · VerticalStackBar · ComparableHorizontalBar · ComparableVerticalBar · DualHorizontalBar (tornado) · BarBell · Range · Ribbon · Radar · Treemap (realized/untapped split + mobile stack) · Pie / Donut · Bubble (gravity cluster + realized/untapped split) · Sankey (flow diagram) · Fountain (Jet d'Eau, experimental) · ChoroplethMap · SymbolMap · RadialTree - each available from the core engine, the web component, and all four framework wrappers, in SVG, canvas, and experimental WebGPU renderers.
Packages
All published to npm under the @michi-vz scope. Every package renders the same charts from the same engine - pick the one that matches your stack:
| Package | Install | For |
|---|---|---|
| @michi-vz/core | npm i @michi-vz/core |
Framework-agnostic engine, no framework deps |
| @michi-vz/wc | npm i @michi-vz/wc |
Native web components (Lit, light DOM) |
| @michi-vz/react | npm i @michi-vz/react |
React 18+ |
| @michi-vz/vue | npm i @michi-vz/vue |
Vue 3 |
| @michi-vz/svelte | npm i @michi-vz/svelte |
Svelte |
| @michi-vz/angular | npm i @michi-vz/angular |
Angular |
| @michi-vz/insights | npm i @michi-vz/insights |
Opt-in AI layer: forecast, anomaly, narration, agent/MCP (experimental) |
| @michi-vz/devtools | npm i -D @michi-vz/devtools |
In-page devtools panel: inspect, diff, profile, and audit any chart |
Install
npm i @michi-vz/core # the engine (no framework deps)
npm i @michi-vz/wc # native web components
npm i @michi-vz/react # or /vue, /svelte, /angular
Usage
Web component (any framework / no build)
<script type="module" src="https://cdn.jsdelivr.net/npm/@michi-vz/wc/dist/michi-vz-wc.bundle.js"></script>
<michi-vz-line-chart id="c" width="600" height="300" chart-title="Sales"></michi-vz-line-chart>
<script>
const c = document.getElementById("c");
c.dataSet = [{ label: "North", series: [{ date: 2016, value: 10, certainty: true }, /* … */] }];
c.addEventListener("michi-vz:highlight", (e) => console.log(e.detail));
const ctx = c.getContext(); // LLM-ready context, identical in SVG and canvas
</script>
React
import { LineChart } from "@michi-vz/react";
<LineChart dataSet={data} xAxisDataType="date_annual" detectGaps renderer="svg" />;
Imperative engine (no framework)
import { mountLineChart } from "@michi-vz/core";
const chart = mountLineChart(el, { dataSet, width: 600, height: 300 });
chart.update(nextProps);
chart.getContext();
chart.destroy();
Docs for AI assistants
The whole library ships as machine-readable docs (llmstxt.org convention), regenerated on every docs build:
- llms.txt - compact index: packages, guides, all 21 charts
- llms-full.txt - the full reference in one file:
per-chart props, usage in every framework,
ChartContext, insights, theming, gotchas
Point a coding agent at either URL (also in-repo at apps/docs/public/).
Hard rules (light DOM, colour contract)
Charts render into light DOM only - the canvas renderer resolves mark colours
by reading consumer CSS via getComputedStyle on probe elements, so consumer
rules like .line[data-label-safe="North"] { stroke: … } reach canvas pixels.
Every mark carries data-label + data-label-safe (sanitized via the single
sanitizeForClassName). @michi-vz/core/styles.css does layout/tooltip only and
never sets fill/stroke.
Develop
pnpm install
pnpm build && pnpm typecheck && pnpm test
pnpm verify:playground # headless-browser self-tests (expect "N/N checks passed.")
Monorepo: pnpm workspaces + Turborepo + Changesets + tsup. Run apps/docs via Docker.
License and brand
Code: MIT (LICENSE). The michi-vz name, the Michi shield logo, and the cat artwork are not part of the MIT grant - see the brand policy. Redistributed forks must rebrand; fixes and features are welcome upstream via issues and pull requests.
Install Wc in Claude Desktop, Claude Code & Cursor
unyly install wcInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add wc -- npx -y @michi-vz/wcFAQ
Is Wc MCP free?
Yes, Wc MCP is free — one-click install via Unyly at no cost.
Does Wc need an API key?
No, Wc runs without API keys or environment variables.
Is Wc hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Wc in Claude Desktop, Claude Code or Cursor?
Open Wc on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
LibreOffice Tools
Enables AI agents to read, write, and edit Office documents via LibreOffice with token-efficient design. Supports multiple formats including DOCX, XLSX, PPTX, a
by passerbyflutterdannote/figma-use
Full Figma control: create shapes, text, components, set styles, auto-layout, variables, export. 80+ tools.
by dannoteLogo.dev
Search and retrieve company logos by brand or domain. Customize size, format, and theme to match your design needs. Accelerate design, prototyping, and content
by NOVA-3951PIX4Dmatic
Enables GUI automation for controlling PIX4Dmatic on Windows through MCP. Supports launching, focusing, capturing screenshots, sending hotkeys, clicking UI elem
by jangjo123Compare Wc with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All design MCPs
