Developer activity
2DContribution calendar
The classic streak graph. The few untracked days show as missing, not as zero commits.
- CalendarHeatmap
- known: false
Eight cell shapes, interactive 3D in plain SVG, and complete control over every colour, size, and label.
$ npm install @thilakbhat/heatmap-uiExamples
Copyable heatmaps with data and palettes included.
Developer activity
2DThe classic streak graph. The few untracked days show as missing, not as zero commits.
Team rhythms
2DWeekdays against hours. Size and colour both carry intensity, so it reads in greyscale.
Personal goals
2DProgress toward each daily goal as rings that fill up. A rest day is a zero; a day away without the app is unknown.
Status pages & SRE
2DNinety days across six services as thin status pills. Status is a category, so each day is painted directly; days before a service was monitored show as unknown, not as up.
Product analytics
2DA ragged triangle: newer cohorts have no later weeks yet, so those slots are hidden.
Issue triage
2DA symmetric matrix with the diagonal removed, shaded by quantile so every band gets used.
UX research
2DHex-binned hotspots on a log scale, so a faint halo of taps doesn't vanish next to the peak.
Year-in-review
3DSix months of deploys as a lit city at night. Drag to orbit, press + or − to zoom, and focus a building to read its value.
Retail & ops
3DLunch and after-work rushes as cylinders, with bitmap-patterned faces on every block.
Engineering management
3DStory points per squad as LEGO bricks. A sprint that hasn't closed shows an outline.
Want to tune one? Open the playground. Change any prop and it writes the code for you.
Features
No wrappers, no forks, no stylesheet overrides. The defaults match what readers already know from GitHub, and everything else is yours to change.
roundedsquarecirclediamondhexagonplusbarringRounded, square, circle, diamond, hexagon, plus, bar and ring. One prop switches between them, and hexagons offset their rows into a proper honeycomb.
An isometric scene in plain SVG, in the same package. No canvas, no three.js. Blocks can be solid, LEGO bricks or lit buildings.
A missing value is not a zero. Unknown slots fade out and are announced as “No data” to screen readers, so an outage doesn’t look like a quiet day.
linearquantileLinear, quantile, log, explicit thresholds, or your own function. Quantile keeps every band in use when one outlier would otherwise wash the grid out.
.heatmap {
--heatmap-tooltip-bg: #0a0a0a;
--heatmap-tooltip-text: #fafafa;
--heatmap-label: #a3a3a3;
--heatmap-cell-content-color: #fff;
}Colour is a prop, not a theme file. The stylesheet handles structure and exposes a few CSS variables, so the chart takes on your design system instead of fighting it.
Cells are focusable only when they carry information. Tooltips open on focus as well as hover. Colour can be doubled with size, and hover scaling respects reduced motion.
renderHeatmap3DSvg returns the same scene as a string, without React or a DOM. It works in emails, READMEs and OG images.
React is the only peer dependency. Ships as typed ES modules with source maps, under the MIT license.
Quick start
Works with Next.js, Vite, Remix, or any React 18+ setup.
React 18.2 or newer is the only peer.
$ npm install @thilakbhat/heatmap-uiStructure only. Colours come from props.
import "@thilakbhat/heatmap-ui/styles.css";Pass values in. Every other prop has a sensible default.
"use client";
import { CalendarHeatmap } from "@thilakbhat/heatmap-ui";
const days = [
{ date: "2026-09-10", value: 4 },
{ date: "2026-09-11", value: 9 },
{ date: "2026-09-12", value: 2 },
];
export function Activity() {
return <CalendarHeatmap values={days} to="2026-09-12" weeks={20} showLegend />;
}heatmap-ui is MIT licensed and built in the open. Star the repo to follow along, open an issue if something reads wrong, or send a pull request.
FAQ
Learn how to build calendar heatmaps, contribution graphs, punchcards, and interactive 3D SVG charts with heatmap-ui.
heatmap-ui is a headless React heatmap library for turning activity, analytics, and operational data into flexible visualizations. It gives you the chart structure without forcing a particular theme or layout.
Yes. Use CalendarHeatmap to create a GitHub-style contribution graph or calendar heatmap with date-based values, month labels, legends, custom cell shapes, and explicit handling for days with no data.
Yes. The 3D heatmap components render interactive scenes in plain SVG, so you can use calendar skylines and other 3D charts without WebGL, canvas, or three.js.
The package includes calendar heatmaps, punchcards, cohort matrices, label co-occurrence grids, tap-density maps, and 3D skylines. Choose from rounded, square, circle, diamond, hexagon, plus, bar, and ring cells.
Every chart is controlled with props. Set your own colours, scale, cell size, gap, labels, legends, tooltips, thresholds, and cell content so the heatmap fits your product design system.
Missing values are kept distinct from zero. Unknown slots can fade out, receive their own opacity, and be announced as no data, which keeps gaps and outages readable in a calendar or analytics heatmap.
Yes. Informative cells can be focused and announced, tooltips work with keyboard focus as well as hover, and colour can be paired with size or labels so patterns do not depend on colour alone.
Install the package with npm, pnpm, yarn, or bun, then import a heatmap component and the stylesheet. React 18.2 or newer is the only peer dependency.