billboard.js: Naver's D3 chart library, now with a Canvas lane
📊 Re-usable, easy interface JavaScript chart library based on D3.js, with SVG and Canvas rendering support
At a glance
- What is it?
- billboard.js is Naver's MIT-licensed JavaScript chart library built on D3.js, offering a re-usable interface over SVG rendering and, since version 4, an opt-in Canvas mode for high-density axis charts. It ships five themes, a React component, nightly and release-candidate channels, and a documentation set ranging from an interactive demo to a benchmark page.
- Who is it for?
- Choose billboard.js when you want D3-grade charting through a friendly configuration API, with the option of Canvas rendering for dense axis data and CSS-swappable themes out of the box. Choose C3.js if you are already on it, though the project publishes a migration guide precisely because billboard.js began as that idea done fresh, or Chart.js when its all-in-one bundle matters more than D3 lineage.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The chart library named after the charts
billboard.js is a re-usable, easy interface JavaScript chart library based on D3.js, and its name is explained in one line, it comes from the famous billboard chart everybody knows, the music ranking rather than the roadside sign. The project is developed under Naver, Korea's search giant, is MIT licensed, and its repository carries a wiki page titled Why we decided to start billboard.js explaining the origin, alongside a migration guide from C3.js that tells the genealogy more plainly, this is the D3-charting-for-humans idea that C3 pioneered, restarted with fresh foundations. Version history marks the care taken with that lineage, v3 brought D3 v6 support and a candlestick chart type, and v4 added the Canvas rendering mode, each with its own changelog and migration notes.
v4's Canvas lane for high-density axes
The headline change of the current major version is an opt-in Canvas rendering mode aimed at high-density axis charts, the scatter and line plots where thousands of SVG nodes start to hurt. The project is unusually disciplined about stating the mode's boundary, the Canvas notes document which chart types are supported, how ESM import usage differs, what happens to interactions, and what the SVG parity scope is, the four questions anyone evaluating a secondary renderer actually has. The repository also carries a CANVAS_THEME_SELECTORS.md file, evidence that theming had to be rethought for the second renderer rather than assumed to carry over, and the package exports map exposes a separate ./canvas entry point with its own type definitions, so the Canvas build is a deliberate sub-package rather than a flag on the main one.
Five themes and one packaged build with a warning
Theming is a CSS decision, load one of the provided theme files instead of the default stylesheet and the charts change clothes, with five themes shipping in the distribution, datalab, dark, insight, graph and modern, each in plain and minified form. Distribution itself is generous, uncompressed and compressed builds, latest and version-pinned URLs, all served from the project's GitHub Pages, so a team can standardize on an exact version by URL without a package manager. There is also a packaged variant, billboard.pkgd.js, that bundles D3.js inside for one-script convenience, and the README attaches an honest warning to it, the packaged version is not an official distribution, existing to provide an easy way to load billboard.js with dependencies, which tells you the maintainers would rather you manage D3 yourself.
Nightly, next and semantic-release
Three release channels run in parallel. The stable channel installs with pnpm:
$ pnpm add billboard.jsIt stands at 4.1.0, released 2026-09-16. The next channel is the release candidate:
$ pnpm add billboard.js@nextAnd the recent 4.1.0-next.2 and 4.1.0-next.3 tags show that candidate track being exercised ahead of a stable cut. The nightly channel builds from master on every push, with version strings encoding the build datetime in the form x.x.x-nightly-yyyymmddhhmmss, installable either by pointing package.json at naver/billboard.js#nightly or by cloning the git URL with the branch ref. Behind all of it sits semantic-release, the automation that derives versions from commit messages, which explains how a solo-looking maintenance effort sustains multi-channel releases, and the repository was last pushed on 2026-09-28.
The exports map as a feature list
The package manifest is worth reading as documentation, because its exports map enumerates the surfaces a modern consumer can address, the root library, the ./canvas entry with its own build, the ./react entry for the React component with dedicated types, ./dist/plugin/* for the plugin builds, and the raw ./src/Plugin/* path for importing plugin source. Module formats are layered deliberately, an ESM build produced with rolldown, a CommonJS path generated by a custom script, and the webpack-produced dist files for script-tag use, with types wired per entry through typesVersions. The React component deserves the emphasis the manifest gives it, chart libraries live or die by framework integration, and here it is a first-class sub-package rather than a community afterthought.
A documentation set that includes a benchmark
The supporting material goes beyond the usual API reference and demo. The demo site at naver.github.io/billboard.js covers the supported chart types with live examples and source, the API documentation is generated from the code with jsdoc, and there is an actual benchmark page comparing rendering performance, plus a benchmark directory in the repository. The wiki layers on the judgment material, a comparison table with other libraries, a who's-using page, third-party applications, and technical articles on bundling for legacy browsers and generating chart images in a Node.js environment, the server-side rendering question every chart library eventually faces. Questions are routed to Stack Overflow under the billboard.js tag or to issues labeled question, a split that keeps the bug tracker focused.
TypeScript source and two test rigs
Under the hood the library is written in TypeScript, formatted with dprint, linted with its own eslint configuration, and tested with both vitest and mocha configured side by side, a transition state several long-lived projects pass through when modernizing their test stack. The build pipeline spans webpack for the dist artifacts and rolldown for ESM, with separate production, packaged, theme, plugin and type-generation steps, and a Storybook instance with committed stories serves as living documentation of the visual surface. Engineering notes persist as first-class files, PERFORMANCE.md, MODULE_IMPORTS.md and CANVAS_THEME_SELECTORS.md, and AUTHORS.txt records contributors, the posture throughout being that of a library maintained by people who expect to keep maintaining it.
Editorial conclusion
Choose billboard.js when you want D3-grade charting through a friendly configuration API, with the option of Canvas rendering for dense axis data and CSS-swappable themes out of the box. Choose C3.js if you are already on it, though the project publishes a migration guide precisely because billboard.js began as that idea done fresh, or Chart.js when its all-in-one bundle matters more than D3 lineage. Verify first whether your chart types fall inside the documented Canvas parity scope before relying on that mode, prefer the official dist files over the packaged D3-bundled build the README flags as unofficial, and consult the comparison wiki page for the feature-by-feature table before committing.
Frequently asked questions
How do you chart in billboard.js?
Install billboard.js with pnpm add billboard.js or a dist file from the release pages, load the library and its CSS or one of the theme files, then follow the examples on the project's demo site, which covers the supported chart types with source. The full API documentation is hosted alongside the demo.
What is billboard.js?
billboard.js is Naver's MIT-licensed JavaScript chart library built on D3.js, providing a re-usable interface with SVG rendering and, since version 4, an opt-in Canvas mode for high-density axis charts. The name comes from the billboard music charts.
How do you install billboard.js?
Run pnpm add billboard.js for the latest release, pnpm add billboard.js@next for the release candidate, or reference the nightly branch for upcoming changes. Dist files, five themes and a D3-bundled packaged build are downloadable from the project's release pages on GitHub Pages.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/naver-billboard-js)