Bring data to life with SVG, Canvas and HTML

D3.js is a JavaScript library for manipulating documents based on data. D3 helps you bring data to life using HTML, SVG, and CSS. D3’s emphasis on web standards gives you the full capabilities of modern browsers without tying yourself to a proprietary framework, combining powerful visualization components and a data-driven approach to DOM manipulation.


be.budget.opendata.ch is an open source data visualization by Thomas Preusse that uses D3.js to display financial data.

[ Full screen ] One of the thousands of open source "Blocks" hosted at bl.ocks.org - this one made by the first author of D3.js, Mike Bostock, showing open Swiss geodata. A code excerpt from the visualisation above:

d3.json("ch.json", function(error, ch) {
  if (error) throw error;

      .attr("class", "feature feature--canton")
      .data(topojson.feature(ch, ch.objects.cantons).features)
      .attr("d", path);

      .attr("class", "feature feature--lake")
      .data(topojson.feature(ch, ch.objects.lakes).features)
      .attr("d", path);

      .datum(topojson.mesh(ch, ch.objects.cantons, function(a, b) { return a !== b; }))
      .attr("class", "boundary boundary--cantons")
      .style("stroke-width", "1px")
      .attr("d", path);

A video introduction to working with the D3.js library by Thomas Preusse, and a blog post from the School of Data, are among the thousands of high quality learning resources available online:

D3: Data-Driven Documents

D3 (or D3.js) is a JavaScript library for visualizing data using web standards. D3 helps you bring data to life using SVG, Canvas and HTML. D3 combines powerful visualization and interaction techniques with a data-driven approach to DOM manipulation, giving you the full capabilities of modern browsers and the freedom to design the right visual interface for your data.



If you use npm, npm install d3. You can also download the latest release on GitHub. For vanilla HTML in modern browsers, import D3 from Skypack:

<script type="module">

import * as d3 from "https://cdn.skypack.dev/d3@7";

const div = d3.selectAll("div");


For legacy environments, you can load D3’s UMD bundle from an npm-based CDN such as jsDelivr; a d3 global is exported:

<script src="https://cdn.jsdelivr.net/npm/d3@7"></script>

const div = d3.selectAll("div");


You can also use the standalone D3 microlibraries. For example, d3-selection:

<script type="module">

import {selectAll} from "https://cdn.skypack.dev/d3-selection@3";

const div = selectAll("div");


D3 is written using ES2015 modules. Create a custom bundle using Rollup, Webpack, or your preferred bundler. To import D3 into an ES2015 application, either import specific symbols from specific D3 modules:

import {scaleLinear} from "d3-scale";

Or import everything into a namespace (here, d3):

import * as d3 from "d3";

Or using dynamic import:

const d3 = await import("d3");

You can also import individual modules and combine them into a d3 object using Object.assign:

const d3 = await Promise.all([
]).then(d3 => Object.assign({}, ...d3));
Loading ...
Go back