The headline is a new chart type, sunburst: a hierarchical radial chart (a nested pie and donut) that draws tree-structured data as concentric rings, one ring per level of the hierarchy, with each child arc nested inside its parent's angular span. This release also brings rounded corners and inter-slice spacing to pie and donut slices, a parliament (hemicycle) layout for the unit chart, an optional hover tooltip on point annotations, and a broad reliability and security pass. Two behavior changes are worth reading before you upgrade: a legend click on pie, donut, and polarArea now toggles the slice in and out, and the premium features now require an entitled plan rather than just any valid key. Every existing config renders unchanged.
β¨ New
The sunburst chart type
chart.type: 'sunburst' renders a hierarchy as a ring of nested arcs: the first level fills a donut around the centre hole, and each deeper level stacks outward, with every child arc constrained to the angle of its parent. It is a non-axis chart (dispatched like pie or treemap) and is tree-shakeable via import 'apexcharts/sunburst', so it adds nothing to the core bundle unless you use it. It is a free chart type, not gated.
Data is the familiar x / y shape with a children array for nesting:
new ApexCharts(el, {
chart: { type: 'sunburst' },
series: [{
data: [
{ x: 'Mobile', y: 55, children: [
{ x: 'iOS', y: 30, children: [
{ x: 'iOS 17', y: 18 },
{ x: 'iOS 16', y: 9 },
]},
{ x: 'Android', y: 23 },
]},
{ x: 'Desktop', y: 33, children: [
{ x: 'Windows', y: 20 },
{ x: 'macOS', y: 10 },
]},
],
}],
plotOptions: {
sunburst: { innerSize: '25%', borderRadius: 5, spacing: 1 },
},
})plotOptions.sunburst.innerSize sets the centre hole (percentage or pixels), borderRadius rounds the arc corners, and spacing opens a gap between neighbouring arcs. Colours, stroke, legend, and title behave as they do on pie and donut.
Rounded corners and spacing for pie and donut
plotOptions.pie.borderRadius rounds the corners of each slice, and plotOptions.pie.spacing opens a gap between slices, so a pie or donut can read as a set of separated, soft-cornered segments rather than a solid wheel. Both apply to polarArea as well.
A parliament layout for the unit chart
The unit chart (introduced in 6.6.0) gains a plotOptions.unit.arc layout: a parliament or hemicycle that arranges the marks as seats in concentric arced rows across an annulus, filled in category order. It is the natural shape for seat counts and any part-to-whole where a semicircle reads better than a grid. The gather animation is now tunable too, with configurable easing and enter motion.
Optional tooltips on point annotations
Point annotations can now show a hover tooltip, so an annotated marker can carry its own explanatory text without a separate custom element.
π Fixes
- A series missing its
datano longer breaks the rest of the chart. A series object without adataproperty used to abort parsing of every series after it, leaving the parsed data out of step with the series names. It is now treated as an empty series, and the remaining series parse and stay aligned. updateSeriesandupdateOptionsno longer hang on a failed render. Their promises now reject when the render throws, instead of never settling, soawait chart.updateSeries(...)can be caught rather than leaking a pending promise.- Combo charts label the right series. Goal lines and data labels on a mixed chart now use the real series index rather than the compacted subset index, so labels and goals no longer attach to the wrong series when some series are hidden.
- Server-side rendering no longer crashes on image fills, and an out-of-range annotation
yAxisIndexand a sunburst drilldown cycle are fixed. - Callbacks are safe after
destroy(). Animation, resize, and pending timeout callbacks are guarded against firing on a destroyed chart, and the detached SVG root is released on teardown, closing a class of update-then-destroy errors and leaks. - CSV export guards against formula injection. Field values that begin with a formula character are neutralised so an exported CSV cannot execute when opened in a spreadsheet.
- Fewer surprises from bad numbers. NaN and Infinity guards were added across polarArea, custom series, axis labels, tooltips, and gradients, so a stray non-finite value degrades gracefully instead of throwing.
- Assorted interaction and lifecycle fixes, including a stuck zoom shift-latch and a duplicate mousewheel binding, a keyboard-navigation listener leak on
updateOptions, annotation tooltips that could suppress the series tooltip chart-wide, an empty-candlestick crash, a redundant redraw on a resize that did not change the drawing box, and a per-render reset of thehasNullValuesandinvalidLogScaleflags.
TypeScript
plotOptions.sunburst, plotOptions.pie.borderRadius / spacing, and the unit arc layout options are fully typed, and chart.type accepts 'sunburst'.
Compatibility
- Legend click on pie, donut, and polarArea now toggles the slice in and out (it previously darkened and expanded the slice). If your app relied on the old click behavior, review this.
- Premium features now require an entitled plan, not just any valid key. The premium modules (the
unitchart type plusstoryboard,link,ink,measure,contextMenu,perspectives, andhistory) clear the watermark only on apremiumorenterpriseplan. A validprokey, or the free tier, keeps them in trial mode with the watermark and logs a one-time upgrade notice; it is not treated as an invalid key. Existingpro-plan customers using these features will now see the watermark. Everything else, every free chart type and module, is never gated. - No breaking API changes, and no renamed or removed options.