v4.63.0
2026-08-25
- Allow to analyze function return values in many more cases (#6065)
- #6065: feat: improve function return value tracking (@cyyynthia, @lukastaegert)
- #6482: Remove unused rendered module sources map (@yoominho91, @irontaek, @lukastaegert)
- #6483: chore(deps): update minor/patch updates (@renovate[bot])
- #6484: fix(deps): update swc monorepo (major) (@renovate[bot], @lukastaegert)
- #6485: chore(deps): lock file maintenance (@renovate[bot], @lukastaegert)
- #6486: chore(deps): lock file maintenance (@renovate[bot])
💎 Version 7.0.0
A major release whose headline change is a subtraction: the default bundle stops shipping every feature. Two smaller breaking changes ride along, both listed below.
The number that started it: 24% of the 6.10.0 default bundle was licence-gated Premium code, which an unlicensed user could only run with a watermark on their chart. Everyone downloaded it anyway. That is now 0%.
The deeper problem was that the default path was the maximal one. Tree-shaking existed, but you only got it by reading the docs and rewriting your imports, so the overwhelming majority of projects shipped every feature whether they used one or not. Nine features now live behind an explicit import, which inverts the default: the common case is the smaller one, and a feature is paid for by the projects that ask for it.
| gzip | |
|---|---|
| 6.10.0 default bundle | 291,654 B |
| 7.0.0 default bundle | 252,005 B |
| saved | 39,649 B (-13.6%) |
If you use none of the nine, upgrading is npm install apexcharts@7 and nothing else. If you use one, it costs you one line and you stop paying for the other eight.
import ApexCharts from 'apexcharts' no longer includes these. Each is reachable from both channels:
import ApexCharts from 'apexcharts'
import 'apexcharts/features/trellis'
<script src=".../dist/apexcharts.js"></script>
<script src=".../dist/features/trellis.js"></script>
| Feature | Add-on | gzip |
|---|---|---|
| Trellis (small multiples) | features/trellis |
25.7 KB |
| Storyboard (scrollytelling) | features/storyboard |
8.0 KB |
| Perspectives (shareable views) | features/perspectives |
6.7 KB |
| Ink (annotation authoring) | features/ink |
6.2 KB |
| Canvas renderer (Strata) | features/renderer-canvas |
6.0 KB |
| Linked views & crossfilter | features/link |
5.3 KB |
| Measure ruler | features/measure |
4.6 KB |
| Rewind (undo / redo) | features/history |
3.2 KB |
| Context menu | features/context-menu |
2.3 KB |
Storyboard registers Perspectives too, so importing both is no more expensive than importing Storyboard.
Nothing fails silently. Each of the nine warns in the console when its configuration is present but the feature is not, and every warning names both routes. Where the chart can still draw something sensible it does, and says what it did instead: a trellis renders as a single chart, and renderer: 'canvas' falls back to SVG.
Everything else stays in the default bundle: all chart types, axes, tooltips, legend, toolbar, exports, annotations, keyboard navigation, morph, drilldown, themes, plugins (Weave), custom series (Marks) and design tokens (Facet).
The migration guide has the full table and how to tell whether any of it applies to you.
Rounded corners on a stacked bar are no longer a setting. Corner ownership follows the outer edge of the stack, which is what 'last' approximated and what 'all' got wrong on any stack whose last series was empty. Remove it from your config; an unknown option is ignored, so leaving it there is harmless but does nothing.
Data labels ride to their new position on a data-change update instead of snapping there. The bars, markers and axis ticks already reflowed on one clock, so a label that jumped to its final slot on the first frame arrived several hundred milliseconds before the bar it belonged to. Bar and column charts only; a label that has not moved is a per-label no-op. Set dataLabels: { animate: { enabled: false } } for the old behaviour.
One dataset, split into a grid of real charts that share a scale, a legend, a toolbar and a crosshair.
new ApexCharts(el, {
chart: { type: 'line' },
series: [
{ name: 'Revenue', region: 'North', data: north },
{ name: 'Revenue', region: 'South', data: south },
],
trellis: { by: 'region', minPanelWidth: 260 },
}).render()
trellis.by is the whole configuration. The grid owns everything shared, so panels cannot lie to each other: the y domain is the union across panels, the x window is common, and the column count is responsive from minPanelWidth alone. A series carrying no facet key repeats in every panel, which is how you get a reference line.
Also row × column for 2-D grids, trellis.data for tidy rows, virtualization above 64 panels, scoped annotations, composed export, and click-to-promote a panel to full size. Per-type guardrails keep a shared frame honest: histograms share a bin frame, violins a bandwidth, heatmaps one colour scale and a single gradient legend.
Trellis is a Premium feature.
apexcharts/pictograms gives the unit chart a mark per thing counted, independent of how those marks are arranged, so a shape and a glyph compose rather than compete.
Tree-shaking only ever helped people with a build step. A page using a <script> tag had exactly one artifact and no way to decline any of it. dist/apexcharts.core.js is the chart class with no chart types and no optional features, assembled from separate tags:
<script src=".../dist/apexcharts.core.js"></script>
<script src=".../dist/line.js"></script>
<script src=".../dist/features/legend.js"></script>
136,921 B gzipped against 252,005 for the full bundle. Purely additive: apexcharts.js is unchanged, and a page that wants everything should keep loading it rather than assembling it from parts.
Log-scale positions were computed against the wrong domain, and tickAmount was ignored outright. Fixes #1341, #3046, #3345, #4166, #4799, #4873.
Reading e.target after a deferred hover gets the shadow host, not the hovered mark, because retargeting has already happened by then. Every deferred pointer read now goes through the event. A slow hover hid the bug entirely, which is why it survived so long. Fixes #3237.
Two series stacked on ragged data lined up by ordinal rather than by x, so a series with a missing point stacked onto the wrong neighbour, displacing it by as much as 92px. Fixes #4886.
Annotation placement was gated chart-wide on dataPoints, so an empty chart dropped every annotation, including y-axis ones that are always placeable. Gating is now per annotation, on whether that annotation's geometry can be resolved. Fixes #5278.
A stacked bar's bottom cap is the top-rounded path mirrored, and that discrete class snapping over continuous geometry made caps invert or pop when a series collapsed and rose again. Also: grouped stacked charts resolved their caps chart-wide, so only the first group got a bottom radius and only the last a top one.
- Markers, not nulls, dominate a large render: about 8 µs and 16 attribute writes each.
markers.largeDatasetThresholdbatches a series' markers into one path. Opt-in and defaulted off, because merged marker paths can never be pixel-identical to individual nodes. - A null-split line now draws as one path rather than one path per segment.
- The default bundle and its add-ons share one core. Previously
apexcharts.esm.jsinlined its own copy while add-ons resolvedapexcharts/core, so an app importing both got two classes and about 130 KB gzipped of duplicate core for a 6 KB feature, and the feature never registered. The feature registry moved to aglobalThisslot for the same reason. - Fixed a long-standing interop bug:
require('apexcharts/line')threwh.use is not a functionin every published version that had sub-path entries, because rollup's default CJS interop assumesrequire()returns the export itself. - A tier-budget test now fails the build if a Tier 2 feature reappears in
features/all.js, or ships without both a sub-path export and a UMD artifact. - The e2e baseline is back to zero failures: eight snapshots had drifted by a single pixel against dense samples and were refreshed after each was checked against its reference.
Full Changelog: https://github.com/apexcharts/apexcharts.js/compare/v6.10.0...v7.0.0