Vizzu – Open-Source Animated Charting Library
Vizzu is a free, open-source JavaScript library for building animated data visualizations and data stories. It renders charts as HTML5 canvas using C++ compiled to WebAssembly, with no runtime dependencies.
TL;DR
TL;DR: Vizzu is a free, open-source JS library that animates between chart types (bar, scatter, line) using a C++/WebAssembly engine with zero runtime dependencies — ideal for data storytelling.
Source and Accuracy Notes
⚠️ This section is MANDATORY. All links must be verified from actual source, not guessed.
- Project page: vizzu.io ← MUST visit and verify
- Source repository: github.com/vizzuhq/vizzu-lib ← MUST read README
- License: Apache-2.0 (verified via GitHub API
license.spdx_id) - HN launch thread: news.ycombinator.com/item?id=40809504 (Show HN for embedded storytelling tool)
- Additional HN thread: news.ycombinator.com/item?id=28895897 (original library launch)
- Latest release: v0.18.0 (verified via GitHub API
tag_name) - Source last checked: 2026-07-18
What Is Vizzu?
Vizzu is an open-source JavaScript library for building animated data visualizations and data stories. Unlike most charting libraries that produce static charts, Vizzu is designed specifically around animation between chart types — a bar chart can smoothly morph into a scatter plot, with data points flying to their new positions.
The library is written in C++ and compiled to WebAssembly. This gives it a consistent, portable engine that runs in any modern browser without native dependencies. The rendering targets HTML5 canvas.
The core design philosophy (from the README): “It can be used to create static charts but more importantly, it is designed for building animated data stories and interactive explorers as Vizzu enables showing different perspectives of the data that the viewers can easily follow due to the animation.”
Key technical characteristics
- No runtime dependencies — ships as a single WASM module
- HTML5 canvas rendering — no SVG DOM overhead for large datasets
- Data aggregation and filtering — built into the engine, not a post-processing step
- Installation:
npm install vizzuor direct CDN import - License: Apache-2.0
Setup Workflow
Step 1: Install via npm
npm install vizzu
Step 2: Use from CDN (no build step)
<html>
<head>
<script type="module">
import Vizzu from 'https://cdn.jsdelivr.net/npm/vizzu@latest/dist/vizzu.min.js';
</script>
</head>
</html>
Step 3: Create a chart in three lines
<html>
<body>
<div id="myVizzu" style="width:800px; height:480px;"></div>
</body>
</html>
import Vizzu from 'https://cdn.jsdelivr.net/npm/vizzu@latest/dist/vizzu.min.js';
let data = {
series: [
{ name: 'Foo', values: ['Alice', 'Bob', 'Ted'] },
{ name: 'Bar', values: [15, 32, 12] },
{ name: 'Baz', values: [5, 3, 2] }
]
};
let chart = new Vizzu('myVizzu', { data });
chart.animate({ x: 'Foo', y: 'Bar' });
Step 4: Morph between chart types
// Bar chart
chart.animate({ x: 'Foo', y: 'Bar' });
// Morph to scatter plot — data points animate to new positions
chart.animate({
color: 'Foo',
x: 'Baz',
geometry: 'circle'
});
The animate() method accepts a configuration object describing the target chart state. Vizzu interpolates all intermediate values — positions, colors, sizes — over the animation duration.
Deeper Analysis
Why Vizzu exists
Most charting libraries treat animation as an afterthought — a fade-in effect when a chart loads. Vizzu treats animation as the primary product feature. Its engine generates many chart types from the same underlying data model and can interpolate between any two states.
This makes it well-suited for:
- Data storytelling — present a narrative by animating through chart configurations as you explain the data
- Exploratory data analysis — let users toggle between bar/scatter/line views without jarring reloads
- Dashboards with narrative — embedded animated sequences that guide viewers through a dataset
Animation system
Vizzu’s animate() call takes a target configuration and an optional duration/ easing parameter. The engine automatically computes:
- Which series map to which axes in the new config
- Which geometry (bar, line, circle, rectangle) to render
- How to interpolate data point positions between states
This means you do not manually calculate transitions — you describe the desired end state and Vizzu handles the rest.
Comparison with other charting libraries
| Feature | Vizzu | Chart.js | D3.js | |---|---|---|---| | Animation focus | Primary | Secondary | Manual | | Animation between chart types | Native | No | Manual | | Dependencies | None | Canvas/SVG | None (low-level) | | WebAssembly | Yes | No | No | | License | Apache-2.0 | MIT | ISC | | Bundle size | ~200KB | ~60KB | ~90KB |
D3 gives you full control but requires writing all animation logic by hand. Vizzu handles interpolation automatically but is less flexible for custom visualizations.
Practical Evaluation Checklist
- [ ] Install via npm or CDN import works without errors
- [ ] A basic bar chart renders in under 250ms on page load
- [ ]
animate()smoothly morphs bar chart to scatter plot (no flicker/jump) - [ ] Canvas rendering handles 1,000+ data points without stutter
- [ ] No runtime console errors in browser
- [ ]
geometry: 'circle'/geometry: 'rectangle'switches render correctly - [ ] Data filtering via Vizzu config updates chart without full redraw
Security Notes
- Vizzu runs entirely client-side (WebAssembly in browser) — no server-side execution
- No external network requests after initial WASM module load
- No tracking or telemetry built into the library
- As with any third-party JS library, pin to a specific version via npm (
@latestresolves to moving target)
FAQ
Q: Can Vizzu handle real-time data updates?
A: Vizzu is designed for pre-computed dataset transitions. For streaming/live data, you would need to call animate() repeatedly with new data — the library does not have a built-in streaming mode.
Q: Does Vizzu support server-side rendering (SSR)? A: Vizzu is a client-side only library. It requires a browser DOM environment to render to canvas. Server-rendering static chart images requires a headless browser approach (Puppeteer/Playwright) rather than Vizzu itself.
Q: Can I use Vizzu with React or Vue? A: Yes — import Vizzu as an ES module and wrap it in a React hook or Vue component. There is no official first-party adapter but the community has contributed wrappers.
Q: What browsers are supported? A: All modern browsers with WebAssembly support (Chrome 57+, Firefox 52+, Safari 11+, Edge 16+).
Q: How does Vizzu compare to Observable Plot? A: Observable Plot is grammar-of-graphics inspired (like ggplot2) and produces static SVGs. Vizzu prioritizes animation between chart types over compositional grammar. They serve different use cases — Plot for analysis, Vizzu for storytelling.
Conclusion
Vizzu fills a specific niche: libraries that make animation between chart types a first-class feature rather than a CSS hack. The C++/WebAssembly engine produces a dependency-free bundle that drops into any web project. For data storytelling — where you need audiences to follow a narrative through changing views of the same dataset — it is one of the few tools purpose-built for that workflow.
If you want to add a live animated chart to a blog post, documentation, or data-driven presentation, Vizzu is worth evaluating. The API surface is small (primarily new Vizzu(), data, and animate()) so the learning curve is gentle.
Related Posts
dev-tools
Automotive Skills Suite for AI Engineering
Evaluate Automotive Skills Suite for APQP, ASPICE, HARA, safety-plan, and DIA workflows with setup notes, governance risks, and SME review guidance.
5/28/2026
dev-tools
awesome-agentic-ai-zh Roadmap Guide
Explore awesome-agentic-ai-zh as a Chinese agentic AI learning roadmap, with setup notes, track selection, study workflow, and evaluation guidance.
5/28/2026
dev-tools
Baguette iOS Simulator Automation Guide
Set up Baguette for iOS Simulator automation, web dashboards, device farms, gesture input, streaming, and camera testing with Xcode caveats.
5/28/2026