7 open source tools compared. Sorted by stars — scroll down for our analysis.
| Tool | Stars | Velocity | Score |
|---|---|---|---|
D3 Bring data to life with SVG, Canvas and HTML | 112.7k | +36/wk | 82 |
Chart.js Simple HTML5 Charts | 67.3k | +20/wk | 82 |
ECharts Interactive charting and data visualization | 66.1k | +35/wk | 82 |
Streamlit Framework for building data apps fast | 44.1k | +77/wk | 79 |
Mapbox GL JS Interactive vector maps | 12.2k | +8/wk | 69 |
superset Code Editor for the AI Agents Era - Run an army of Claude Code, Codex, etc. on your machine | 8.7k | +445/wk | 73 |
| 2.0k | — | 70 |
D3 gives you complete control over custom data visualizations, building charts and interactive graphics from scratch that no charting library offers out of the box. It's not a charting library. It's a visualization toolkit that binds data to DOM elements and lets you manipulate them directly, the most-starred data visualization library on GitHub. ISC license (permissive). Created by Mike Bostock, now maintained by Observable. D3 powers visualizations at the New York Times, NASA, Uber, and thousands of other organizations. The power is in the primitives: scales that map data to pixels, axes, shape generators, geographic projections, force simulations, hierarchy layouts. You compose these to build exactly what you need. The Observable notebook ecosystem has thousands of examples you can fork. Fully free. No paid tier for D3 itself. Observable (the company) offers a paid collaboration platform, but D3 the library is and always will be free. Solo developers: free, but expect a steep learning curve. D3 is not drag-and-drop. Small to large teams: if you have a developer who knows D3, the results are unmatched. If nobody on the team wants to learn it, use Chart.js or ECharts. The catch: D3 is powerful precisely because it's low-level, and that's also why it's hard. Making a simple bar chart takes 50 lines of code instead of a config object. The learning curve is real, weeks, not hours. For standard charts, use a higher-level library. Reach for D3 when nothing else can do what you need.
Pass it data and options, get a canvas-rendered chart. Done. This is the most popular charting library on the web for a reason: it works, it's simple, and it looks good out of the box. Animation, tooltips, legends, responsive sizing, all built in. Eight chart types cover 90% of dashboard needs. MIT, fully free. No paid tier. Has been around since 2013 and isn't going anywhere. The catch: Chart.js renders to canvas, not SVG. That means you can't style individual elements with CSS, can't easily make charts accessible to screen readers, and complex interactions (clicking on specific data points, custom hover behaviors) require more work than SVG-based libraries. If you need highly customized, interactive data visualizations, D3.js gives you full control. If you need standard charts that look good fast, Chart.js is the answer.
ECharts renders everything from simple bar charts to complex 3D globes, geomaps, and real-time streaming dashboards, all client-side with no server dependencies. It handles everything from a simple dashboard widget to a full geographic heatmap with 100K data points. Apache Foundation project, TypeScript core. The feature set is massive: 20+ chart types, animations, responsive layouts, dataset transforms, and a visual builder at echarts.apache.org that lets you configure charts before writing code. It handles real-time streaming data and lazy-loads chart types you don't use. Everything is free. No paid tier, no hosted version, no premium charts behind a paywall. Apache 2.0 license means you can use it in commercial products without restrictions. Solo developers get a production-grade charting library for $0. Teams of any size get the same thing. The community is enormous. StackOverflow answers for almost any question. The catch: the API surface is huge. Configuration objects get deeply nested and the docs, while comprehensive, assume you already know what you want. If you need something quick and simple, Chart.js gets you there faster. If you need advanced interactivity or large datasets, ECharts is the better pick.
Streamlit turns Python scripts into web apps in minutes: dashboards, demos, internal tools. No HTML, no CSS, no JavaScript. You write Python, and Streamlit gives you a web interface with charts, tables, sliders, and file uploads. Apache 2.0, Python, owned by Snowflake. The workflow is dead simple: write a Python script using Streamlit's API (`st.write`, `st.chart`, `st.slider`), run `streamlit run app.py`, and you have a web app. It re-runs the script top-to-bottom on every interaction, which is brilliant for prototyping and awkward for complex state management. The library is fully free. Streamlit Community Cloud hosts your apps for free with generous limits: public apps, GitHub-connected deployment. Snowflake offers Streamlit in Snowflake for enterprise data apps. Solo data scientists: this is your tool. Build demos, share analyses, prototype ML interfaces. Small teams: great for internal dashboards. Medium to large: works for internal tools, but production customer-facing apps will outgrow the re-run-on-every-click model. The catch: Streamlit re-executes your entire script on every user interaction. For simple apps, fine. For apps with expensive computations, you need caching decorators everywhere. The layout system is limited: you get a single column by default and basic column/tab options. If you need a real web app with complex navigation and state, you've outgrown Streamlit.
Mapbox GL JS renders interactive, GPU-accelerated maps in the browser that you can tilt, rotate, fly through, and layer custom data on. It renders vector tiles using WebGL, which means smooth 60fps panning and zooming with 3D building extrusions, custom styling, and data visualization layers. Here's where it gets complicated. Mapbox GL JS v1 was open source (BSD). Version 2+ switched to a proprietary license. You can view the source code, but you can't use it without a Mapbox access token, and that token ties you to Mapbox's pricing. Free tier: 50,000 map loads/month. After that, $5 per 1,000 loads. There's no self-hosting option for v2+. You need Mapbox's tile servers and API. The library itself loads from npm but phones home for tiles and authentication. Solo developers and small projects: the free tier is generous. 50K loads covers most side projects and small apps. Medium teams: costs become real. A site with 500K map loads/month runs ~$2,250/mo. That adds up fast. The catch: the license switch burned the community hard. MapLibre GL JS forked from the last open source version and is actively maintained. If you want truly free maps, start there instead.
Apache Superset does that. Connect it to your database, write SQL or use the visual query builder, and create shareable dashboards. It handles most common databases (Postgres, MySQL, BigQuery, Snowflake, ClickHouse) and the chart library is extensive. Apache project, used by Airbnb, Lyft, and others in production. The catch: self-hosting Superset is where it gets real. Versioning is a beast. It is very easy to fall out of compliance with updates before you realize it. The Docker setup works but keeping it maintained takes genuine ops effort. And the learning curve for non-technical users is steeper than paid alternatives like Metabase or Looker.
Vizzu does something no other charting library does well. It's built around the idea that data stories are told through transitions, not static images. You feed it a dataset and describe how you want it visualized. Change the description, and it animates the transition. The same data can flow from a grouped bar chart to a treemap to a bubble chart with physics-based animation. It's impressive to watch and makes presentations and dashboards feel alive. Completely free under Apache 2.0. No paid tier, no premium chart types, no watermarks. For standard charting, Apache ECharts or Chart.js are the workhorses. For custom data art, D3 is still king. Vizzu fills the niche of animated data storytelling that nothing else does as cleanly. The catch: this is a presentation and storytelling tool, not a drop-in replacement for Chart.js or D3. If you need standard dashboards with tooltips, drill-downs, and real-time updates, Vizzu isn't built for that. The API is also different from what you're used to. It's not "make me a bar chart," it's "here's data, here's how to arrange it." There's a learning curve. The community is small and documentation could be better.