Releases: recharts/recharts
Release list
v3.11.0-canary.3
What's Changed
- Improve graphical item theme color assignment by @PavelVanecek in #7777
Full Changelog: v3.11.0-canary.2...v3.11.0-canary.3
v3.11.0-canary.2
What's Changed
- Extend themed dot colors to Area and Radar by @PavelVanecek in #7763
Full Changelog: v3.11.0-canary.1...v3.11.0-canary.2
v3.11.0-canary.1
What's Changed
All changes included in 3.11.0-canary.0 plus:
Themes
- Fix axis props with incomplete themes by @PavelVanecek in #7724
- Fix themed Line dot fill colors by @PavelVanecek in #7752
- Add fill-opacity: 1 default for dots by @PavelVanecek in #7745
- Automate visual regression theme variants by @PavelVanecek in #7746
- Deploy VR gallery to GitHub Pages by @PavelVanecek in #7735
Bugfixes
- Fix package-lock.json desync breaking npm ci (missing nested esbuild subtree) by @PavelVanecek in #7691
- fix(XAxis): equidistantPreserveEnd renders a single tick when the end label overflows by @ChristianK43 in #7697
- fix(util): keep LRUCache within maxSize and refresh recency for undefined values by @MahinAnowar in #7715
- fix: declare @types/react as an optional peer dependency by @tifandotme in #7710
- fix(radar): keep radar points on their angle axis ticks when the angle range ascends by @giaBaoJS in #7708
- fix(PolarGrid): drop the duplicate radial line where the angle axis wraps around by @giaBaoJS in #7727
Documentation
- docs(sector): add description for Sector component by @Medyooo in #7693
- docs: add locale formatting examples to tickFormatter and Tooltip for… by @Medyooo in #7692
- fix(omnidoc): strip LinkToApi and resolve correct story name in generated Storybook MDX by @SanyaGubrani in #7712
- docs(PolarGrid): add missing description for radialLines prop by @Chandu-Putta in #7728
- refactor(test-vr): migrate VR tests to the Playwright story gallery by @visheshgubrani in #7714
New Contributors
- @ChristianK43 made their first contribution in #7697
- @tifandotme made their first contribution in #7710
- @SanyaGubrani made their first contribution in #7712
- @giaBaoJS made their first contribution in #7708
- @Chandu-Putta made their first contribution in #7728
- @visheshgubrani made their first contribution in #7714
Full Changelog: v3.11.0-canary.0...v3.11.0-canary.1
v3.11.0-canary.0
What's Changed
Themes! See the new guide in https://recharts.github.io/en-US/guide/theming/
This is experimental release; please share your feedback and know that the API may still change. However the whole https://recharts.github.io/ website already runs on it and I am quite happy with how it turned out.
New features
- feat(Bar): support data prop directly on Bar, like Line/Area/Scatter by @pratik-desgn in #7599
- [feat] Text textPath plus allow angling polar labels by @PavelVanecek in #7658
Bugfixes
- fix(Pie): make maxRadius actually constrain percentage-based radii by @pratik-desgn in #7594
- fix(Pie): interpolate paddingAngle during animation by @pratik-desgn in #7593
- Added effect in cartesian YAxis to update width to initial size on data change by @Elaskin in #7347
- fix: infinite loop in reduceCSSCalc when a value contains $& by @jcross in #7610
- fix(Brush): honor a selection of the first data point only by @kdelay in #7618
- fix(Sankey): skip links that point back along the current path by @jcross in #7619
- fix(BarStack): expand clip path so bar strokes are not clipped by @ostapondo in #7606
- fix: guard reduceCSSCalc against ReDoS from pathological calc() input by @bunlongheng in #7620
- fix(axis): stop a two-tick axis whose domain crosses zero from overflowing the stack by @Jaybhade in #7622
- fix(Bar): stop stacked minPointSize inflation from overlapping neighboring segments by @pratik-desgn in #7600
- fix(Bar): apply the theme strokeDasharray like the other graphical items by @kdelay in #7638
- fix(Rectangle): keep the rectangle mounted while it animates to zero by @adarshsm in #7596
- fix(Bar): stop spurious re-animation on unrelated re-renders by @StefanCodes17 in #7644
- fix(types): export prop interfaces referenced by public component props by @MahinAnowar in #7642
- Stop hasDuplicate reporting Object.prototype keys as duplicates by @MahinAnowar in #7655
- fix(useElementOffset): prevent measurement feedback loops by @yoan-md in #7671
- fix(Treemap): give nest breadcrumbs a stable key by @MahinAnowar in #7669
Documentation
- docs: fix dead React link in README by @aliabbas-muhammadi in #7648
- docs: fix dead UMD install links in README by @aliabbas-muhammadi in #7653
- Render source code in SSG so that agents can read it straight from the HTML by @PavelVanecek in #7652
- docs(polygon): add description for Polygon component by @Medyooo in #7667
- docs(brush): add descriptions for Brush props by @Medyooo in #7675
- fix: show editor cursor in dark mode by @PavelVanecek in #7673
- [docs] Annotation controls dark theme support by @PavelVanecek in #7682
New Contributors
- @pratik-desgn made their first contribution in #7594
- @Elaskin made their first contribution in #7347
- @jcross made their first contribution in #7610
- @kdelay made their first contribution in #7618
- @ostapondo made their first contribution in #7606
- @bunlongheng made their first contribution in #7620
- @Jaybhade made their first contribution in #7622
- @aliabbas-muhammadi made their first contribution in #7648
- @adarshsm made their first contribution in #7596
- @StefanCodes17 made their first contribution in #7644
- @Medyooo made their first contribution in #7667
- @yoan-md made their first contribution in #7671
Full Changelog: v3.10.1...v3.11.0-canary.0
v3.10.1
What's Changed
- fix(Pie): pass computed innerRadius/outerRadius to Label children via PolarLabelContextProvider by @0007aadil in #7458
- chore(deps): bump immer from 11.1.9 to 11.1.15 by @dependabot[bot] in #7575
- fix(tooltip): fall back to index-based search when label-based search returns undefined for allowDuplicatedCategory=false by @hxy-asdw in #7573
- fix(bar): keep barGap correct when maxBarSize clamps the bar width (#2774) by @sobol-sudo in #7582
New Contributors
- @0007aadil made their first contribution in #7458
- @hxy-asdw made their first contribution in #7573
- @sobol-sudo made their first contribution in #7582
Full Changelog: v3.10.0...v3.10.1
v3.10.0
What's Changed
Legend position
Legend now supports position and offset props, same as Label and LabeList. This replaces the previous align and verticalAlign for a more convenient positioning, and fixes couple visual bugs too. See https://recharts.github.io/en-US/examples/LegendPosition/
- Legend position and offset by @PavelVanecek in #7564
XAxis auto height
XAxis now supports height="auto" prop, similar to YAxis width="auto".
Other features
- feat(Sankey): support accessibilityLayer, title and desc props by @MahinAnowar in #7546
Bugfixes
- fix: clear stale active bar layer state by @pupuking723 in #7547
- fix(Brush): slide snaps back to original position on mouseup when start/endIndex are controlled by @MaksZhukov in #7542
- fix(Tooltip): find the active sector in the angle-axis wrap-around gap by @MahinAnowar in #7550
- fix(Brush): keep controlled startIndex/endIndex on data updates by @momomuchu in #7530
- Fix Legend type by @PavelVanecek in #7560
- fix(Label): pass computed position attributes to custom label content by @MahinAnowar in #7549
- fix(CartesianAxis): skip renderedTicks dispatch when tick values are unchanged by @kimlj in #7565
- fix: prevent getBandSizeOfAxis from collapsing band size due to floating-point tick gaps by @xianjianlf2 in #7556
- fix(Area): connectNulls connects across stacked points where every series is null by @kimlj in #7566
New Contributors
- @MahinAnowar made their first contribution in #7546
- @MaksZhukov made their first contribution in #7542
- @momomuchu made their first contribution in #7530
- @kimlj made their first contribution in #7565
- @xianjianlf2 made their first contribution in #7556
Full Changelog: v3.9.2...v3.10.0
v3.9.2
What's Changed
- docs: clarify custom labels and ticks need SVG elements by @ishaanlabs-gg in #7524
- chore(deps): bump immer from 11.1.8 to 11.1.9 by @dependabot[bot] in #7526
- fix(Sankey): avoid exponential depth traversal on dense graphs by @dm-gthb in #7479
New Contributors
- @ishaanlabs-gg made their first contribution in #7524
- @dm-gthb made their first contribution in #7479
Full Changelog: v3.9.1...v3.9.2
v3.9.1
What's Changed
- perf: optimize ScatterChart hover by reducing re-renders from O(n) to O(1) by @roy7 in #7133
- fix(YAxis): render explicit ticks when a non-literal domain can't resolve on empty data (#7362) by @nlenepveu in #7393
- fix: avoid Sankey nodes overlapping skipped-depth links by @pupuking723 in #7471
- Add stacked bar chart with horizontal threshold line example by @nijuse in #7495
- fix(DefaultLegendContent): omit empty value from legend icon aria-label by @greymoth-jp in #7501
- chore(deps): bump immer from 10.2.0 to 11.1.8 by @dependabot[bot] in #7452
- fix(getNiceTickValues): remove trailing duplicate tick when allowDecimals=false by @JSap0914 in #7482
- Fix/per graphical item formatter prop by @shreedharbhat98 in #7287
New Contributors
- @pupuking723 made their first contribution in #7471
- @nijuse made their first contribution in #7495
- @greymoth-jp made their first contribution in #7501
- @JSap0914 made their first contribution in #7482
Full Changelog: v3.9.0...v3.9.1
v3.9.0
What's Changed
Animations
3.9 comes with new animations! There are several bug fixes and what's best, all animations are now fully customizable.
See the animations guide on https://recharts.github.io/en-US/guide/animations/
- Animation guide by @PavelVanecek in #7179
- Animation tests by @PavelVanecek in #7255
- New animation props by @PavelVanecek in #7215
- test: cover legacy animation length changes by @PavelVanecek in #7283
- test: add sparse animation path tests for Line component by @PavelVanecek in #7295
- Export and document interpolate function by @PavelVanecek in #7293
- test: enhance line animation tests for ComposedChart and responsive by @PavelVanecek in #7289
- Manual animations on website by @PavelVanecek in #7483
- Add new example where chart animates by scroll by @PavelVanecek in #7484
- fix: preserve single-value line dash gaps during animation by @puneetdixit200 in #7405
- Add animate-by-scroll example and update docs by @PavelVanecek in #7487
- Add custom fillOpacity on hover website example by @PavelVanecek in #7489
- honorable mention to @robjampar for PR #6973 which ended up declined but it introduced the starting idea for the new animation props
New features other than animations
- Expose and document chart layout hooks and layout types in public API by @Copilot in #7265
- feat: allow HTML attributes passthrough on ResponsiveContainer by @techcodie in #7168
- feat: add nodeInset and nodeGap properties to Treemap for better la… by @MaximSrour in #7044
- feat(PieChart): add dataKey to Legend payload by @Harikrushn9118 in #7137
Bugfixes
- fix: preserve valid falsy custom names (0, "") in tooltips by @vamsi2246 in #7175
- fix(ResponsiveContainer): Fix erroneous console warning on init by @andypoorman in #7174
- fix(DataUtils): improve isPercent validation to exclude invalid formats by @vamsi2246 in #7178
- fix(BarChart): render stacked bars when all values are 0 (#6235) by @andypoorman in #7199
- fix(Sankey): prevent NaN node positions when link values sum to zero by @Mridul012 in #7185
- fix(Funnel): prevent NaN coordinate layout crash when all values are zero by @Mridul012 in #7184
- fixes an issue where XAxis and YAxis padding were ignored by the clipping mask when allowDataOverflow={true} was used alongside a restricted domain by @emiedonmokumo in #7232
- fix: use originalDataIndex for tooltip dispatch in Bar by @mayrang in #7273
- fix: resolve TypeScript 6 deprecation errors in tsconfig files by @shreedharbhat98 in #7285
- fix(bar): use Math.round instead of bitwise truncation for bar positioning by @EduardF1 in #7297
- fix(types): propagate Tooltip types in chart helper contexts by @mixelburg in #7125
- fix(Legend): prevent overlap with chart on container resize by @maroKanatani in #7201
- test(YAxis): failing repro for #7362 — function domain doesn't render ticks on empty/all-null data by @nlenepveu in #7384
Tree-shaking
We now have focused tree-shaking tests that allow us to observe exactly which components end up in the final bundle and why. I have also removed some unnecessary loops and you should see the final bundle size decrease somewhat as a result.
There are also two new examples on the website, showing real bundle size:
- https://recharts.github.io/recharts/canary/www/en-US/examples/BundleSizeTreemap/
- https://recharts.github.io/recharts/canary/www/en-US/examples/BundleSizeSunburst/
- Improve bundle tracing and tree-shaking for Shape defaults by @PavelVanecek in #7348
- Refactor Shape props to reduce bundle sizes by @PavelVanecek in #7349
- Types: switch Shape from spread to separate prop object by @PavelVanecek in #7351
Documentation updates
- docs: clarify valid types for axis tick prop by @Harikrushn9118 in #7191
- style: update layout gaps and add new navigation links by @PavelVanecek in #7412
- www: show deployed commit hash in footer across production and staging builds by @Copilot in #7258
- Replace old bundle-viz with two new chart examples by @PavelVanecek in #7390
- Remove our custom storybook plugins by @PavelVanecek in #7382
- feat: add PolarAngleAxis component storybook story by @whatfontisthis in #7243
- feat: add LabelList component Storybook story by @whatfontisthis in #7244
- docs: add Windows install workaround to DEVELOPING.md by @harsh-05 in #7324
- docs: add @SInCE 3.9 annotation to hooks by @PavelVanecek in #7326
- Add @SInCE annotation to useChartLayout by @PavelVanecek in #7360
- Add since annotation to useActiveTooltipDataPoints by @PavelVanecek in #7338
- devops: upload test results to Flakiness.io by @aslushnikov in #7359
- Omnidoc: add API examples support and enhance example discovery by @PavelVanecek in #7342
- Dedup website examples by @PavelVanecek in #7340
- Remove Area.baseLine type by @PavelVanecek in #7317
- docs: add session storage support for controls state by @PavelVanecek in #7279
- fix(Scatter): use HTTPS in JSDoc links by @Parth10P in #7192
- Update copyright year to 2026 by @ojhawkins in #7288
- Fix Legend props not appearing in omnidoc website by @Copilot in #7203
- docs: add Deno to install instructions by @bartlomieju in #7473
New Contributors
- @MaximSrour made their first contribution in #7044
- @vamsi2246 made their first contribution in #7175
- @andypoorman made their first contribution in #7174
- @Mridul012 made their first contribution in #7185
- @emiedonmokumo made their first contribution in #7232
- @mayrang made their first contribution in #7273
- @legions-developer made their first contribution in #7280
- @ojhawkins made their first contribution in #7288
- @EduardF1 made their first contribution in #7297
- @harsh-05 made their first contribution in #7324
- @aslushnikov made their first contribution in #7359
- @maroKanatani made their first contribution in #7201
- @techcodie made their first contribution in #7168
- @whatfontisthis made their first contribution in #7243
- @nlenepveu made their first contribution in #7384
- @bartlomieju made their first contribution in #7473
- @puneetdixit200 made their first contribution in #7405
Full Changelog: v3.8.1...v3.9.0-canary.0
v3.9.0-canary.0
What's Changed
This is a canary release, meaning that the new features announced in this release may change. While I am happy with the new props, I would like to gather some feedback before going stable.
Animations
3.9 comes with new animations! There are several bug fixes and what's best, all animations are now fully customizable.
I'm releasing a canary version first; please try it out, if there are some problems then please let me know so I can fix things before we release a stable version.
See the animations guide on https://recharts.github.io/recharts/canary/www/en-US/guide/animations/. Try to integrate it with your charts, write custom animations, let me know how it went!
- Animation guide by @PavelVanecek in #7179
- Animation tests by @PavelVanecek in #7255
- New animation props by @PavelVanecek in #7215
- test: cover legacy animation length changes by @PavelVanecek in #7283
- test: add sparse animation path tests for Line component by @PavelVanecek in #7295
- Export and document interpolate function by @PavelVanecek in #7293
- test: enhance line animation tests for ComposedChart and responsive by @PavelVanecek in #7289
- honorable mention to @robjampar for PR #6973 which ended up declined but it introduced the starting idea for the new animation props
New features
- Expose and document chart layout hooks and layout types in public API by @Copilot in #7265
- feat: allow HTML attributes passthrough on ResponsiveContainer by @techcodie in #7168
- feat: add nodeInset and nodeGap properties to Treemap for better la… by @MaximSrour in #7044
- feat(PieChart): add dataKey to Legend payload by @Harikrushn9118 in #7137
Bugfixes
- fix: preserve valid falsy custom names (0, "") in tooltips by @vamsi2246 in #7175
- fix(ResponsiveContainer): Fix erroneous console warning on init by @andypoorman in #7174
- fix(DataUtils): improve isPercent validation to exclude invalid formats by @vamsi2246 in #7178
- fix(BarChart): render stacked bars when all values are 0 (#6235) by @andypoorman in #7199
- fix(Sankey): prevent NaN node positions when link values sum to zero by @Mridul012 in #7185
- fix(Funnel): prevent NaN coordinate layout crash when all values are zero by @Mridul012 in #7184
- fixes an issue where XAxis and YAxis padding were ignored by the clipping mask when allowDataOverflow={true} was used alongside a restricted domain by @emiedonmokumo in #7232
- fix: use originalDataIndex for tooltip dispatch in Bar by @mayrang in #7273
- fix: resolve TypeScript 6 deprecation errors in tsconfig files by @shreedharbhat98 in #7285
- fix(bar): use Math.round instead of bitwise truncation for bar positioning by @EduardF1 in #7297
- fix(types): propagate Tooltip types in chart helper contexts by @mixelburg in #7125
- fix(Legend): prevent overlap with chart on container resize by @maroKanatani in #7201
- test(YAxis): failing repro for #7362 — function domain doesn't render ticks on empty/all-null data by @nlenepveu in #7384
Tree-shaking
We now have focused tree-shaking tests that allow us to observe exactly which components end up in the final bundle and why. I have also removed some unnecessary loops and you should see the final bundle size decrease somewhat as a result.
There are also two new examples on the website, showing real bundle size:
- https://recharts.github.io/recharts/canary/www/en-US/examples/BundleSizeTreemap/
- https://recharts.github.io/recharts/canary/www/en-US/examples/BundleSizeSunburst/
- Improve bundle tracing and tree-shaking for Shape defaults by @PavelVanecek in #7348
- Refactor Shape props to reduce bundle sizes by @PavelVanecek in #7349
- Types: switch Shape from spread to separate prop object by @PavelVanecek in #7351
Documentation updates
- docs: clarify valid types for axis tick prop by @Harikrushn9118 in #7191
- style: update layout gaps and add new navigation links by @PavelVanecek in #7412
- www: show deployed commit hash in footer across production and staging builds by @Copilot in #7258
- Replace old bundle-viz with two new chart examples by @PavelVanecek in #7390
- Remove our custom storybook plugins by @PavelVanecek in #7382
- feat: add PolarAngleAxis component storybook story by @whatfontisthis in #7243
- feat: add LabelList component Storybook story by @whatfontisthis in #7244
- docs: add Windows install workaround to DEVELOPING.md by @harsh-05 in #7324
- docs: add @SInCE 3.9 annotation to hooks by @PavelVanecek in #7326
- Add @SInCE annotation to useChartLayout by @PavelVanecek in #7360
- Add since annotation to useActiveTooltipDataPoints by @PavelVanecek in #7338
- devops: upload test results to Flakiness.io by @aslushnikov in #7359
- Omnidoc: add API examples support and enhance example discovery by @PavelVanecek in #7342
- Dedup website examples by @PavelVanecek in #7340
- Remove Area.baseLine type by @PavelVanecek in #7317
- docs: add session storage support for controls state by @PavelVanecek in #7279
- fix(Scatter): use HTTPS in JSDoc links by @Parth10P in #7192
- Update copyright year to 2026 by @ojhawkins in #7288
- Fix Legend props not appearing in omnidoc website by @Copilot in #7203
New Contributors
- @MaximSrour made their first contribution in #7044
- @vamsi2246 made their first contribution in #7175
- @andypoorman made their first contribution in #7174
- @Mridul012 made their first contribution in #7185
- @emiedonmokumo made their first contribution in #7232
- @mayrang made their first contribution in #7273
- @legions-developer made their first contribution in #7280
- @ojhawkins made their first contribution in #7288
- @EduardF1 made their first contribution in #7297
- @harsh-05 made their first contribution in #7324
- @aslushnikov made their first contribution in #7359
- @maroKanatani made their first contribution in #7201
- @techcodie made their first contribution in #7168
- @whatfontisthis made their first contribution in #7243
- @nlenepveu made their first contribution in #7384
Full Changelog: v3.8.1...v3.9.0-canary.0