D3.js is the data-visualization library that became the de-facto standard for custom charts on the web. D3 doesn't draw charts — it gives you primitives (scales, axes, layouts, transitions, geographic projections) that let you compose any visualization, then binds them to SVG, Canvas, or WebGL. Mike Bostock's original 2011 release is still recognizable in modern D3 7.x.
The trade-off has stayed the same: D3 lets you build visualizations no chart library can match, but you pay for it in code volume and learning curve. Most teams that want pretty charts reach for Recharts, ECharts, Highcharts, or Vega first. D3 still wins for newsroom graphics (NYT, FiveThirtyEight), scientific visualization, and the times you need to invent the chart, not pick from a menu.