3 open source tools compared. Sorted by stars — scroll down for our analysis.
| Tool | Stars | Velocity | Language | License | Score |
|---|---|---|---|---|---|
D3 Bring data to life with SVG, Canvas and HTML | 112.6k | — | Shell | ISC License | 82 |
Chart.js Simple HTML5 Charts | 67.3k | — | JavaScript | MIT License | 82 |
ECharts Interactive charting and data visualization | 66.0k | — | TypeScript | Apache License 2.0 | 82 |
The undisputed foundation of web data visualization, and still unmatched for custom, interactive charts. D3 gives you complete control over every pixel — SVG, Canvas, or HTML — which is why every serious visualization library either uses it under the hood or was inspired by it. Chart.js is easier for standard charts. Recharts wraps D3 in React components. Observable Plot (from D3's creator) simplifies the common cases. Highcharts and Plotly are commercial alternatives with more out-of-the-box options. At 112K+ stars, D3 is one of the most-starred repos on GitHub for a reason: when you need a bespoke visualization that doesn't exist as a component, D3 is the only serious option. The learning curve is the tradeoff for unlimited flexibility. The catch: D3 is a low-level toolkit, not a charting library. Building a simple bar chart takes 30+ lines where Chart.js needs 5. If you just want dashboards with standard chart types, D3 is massive overkill. The API surface is enormous, documentation assumes you think in SVG, and onboarding junior developers is painful.
Chart.js is the charting library that 67K+ stars worth of developers chose because it just works. Drop it in, give it data, get a responsive, animated chart. Bar, line, pie, radar, scatter, bubble — the standard chart types without a learning curve. If you need charts in a web app and don't want to learn D3.js, Chart.js is the pragmatic choice. D3 gives you unlimited flexibility but requires understanding SVG, data joins, and enter-update-exit patterns. Recharts and Nivo wrap D3 for React. ECharts from Apache is the feature-rich alternative with more chart types and better large-dataset performance. Commercially, Highcharts offers polished charts with paid licensing. The Canvas rendering is smooth, the responsive resizing works out of the box, and the plugin system adds features like zoom, annotations, and streaming data. The catch: Canvas rendering means charts aren't individually selectable DOM elements — accessibility and interaction are limited compared to SVG-based libraries. Large datasets (10K+ points) can lag without downsampling. Customization beyond the built-in options requires plugins or hacking the internals. And if you need highly custom or interactive visualizations, you'll eventually outgrow Chart.js and end up learning D3 anyway.
ECharts is the charting library you reach for when Chart.js can't handle your data volume. Built for 100k+ data points, it renders on Canvas (not SVG), supports everything from basic bar charts to 3D visualizations and geographic maps, and powers dashboards at Alibaba, Amazon, and GitLab. Chart.js is simpler with the gentlest learning curve — perfect for basic charts. D3.js gives you total creative freedom but requires building everything from primitives — weeks of work for what ECharts does with config objects. Highcharts is enterprise-grade but commercial ($590+/developer). Use ECharts if you're building data-heavy dashboards, need geographic visualizations, or your dataset exceeds what Chart.js handles gracefully. The declarative config API means you're tweaking properties, not writing rendering code. The catch: the bundle is heavy — 1MB+ for the full library (tree-shakeable, but still). The documentation is extensive but originated in Chinese, and English docs can feel translated. For simple charts on a landing page, ECharts is overkill. Chart.js at 60KB will do the job.