What's New in ApexCharts 7.0: A Smaller Default, and Small Multiples in One Key
ApexCharts 7.0.0 shipped on August 25, 2026, and its headline change is a subtraction: nine features left the default bundle and became explicit imports. For most projects the upgrade is npm install apexcharts@7 and nothing else; the rest need one import line, and the console names it.
Key takeaways
- Nine features are opt-in: one import or script tag each, and a console warning if you miss one.
- The default bundle is 252,005 B gzipped, down from 291,654 B in 6.10.0 (-13.6%).
- New: Trellis, small multiples from one key,
trellis: { by: 'region' }(Premium). - Three defaults changed and one option was removed: see the table.
- New: a lean
dist/apexcharts.core.jsfor script-tag pages, and drawn pictograms withplotOptions.unit.shape: 'pictogram'. - Upgrading is
npm install apexcharts@7. The migration guide has the full table.
Which defaults changed?
None of these produces a console warning except the first.
| Change | Release | What you will see | How to reverse it |
|---|---|---|---|
| Nine features are opt-in | 7.0.0 | A console warning, and the chart draws without the feature: a trellis renders as one chart, a canvas renderer draws SVG | Import the feature (see below) |
plotOptions.bar.borderRadiusWhenStacked removed | 7.0.0 | The option is ignored; corner rounding follows the stack's outer edge | Delete it. It returned in 7.4 (default 'all'), so on 7.4 or later you can set it again |
dataLabels.animate.enabled is true | 7.0.0 | Bar and column labels ride to their new position on a data update instead of snapping | dataLabels: { animate: { enabled: false } } |
Null-split lines are one <path> per series | 7.0.0 | A line or area broken by nulls is one path element, not one per segment; an area's gradient runs continuously across gaps | No option. Update CSS or tests that select or count per-segment paths |
The borderRadiusWhenStacked change for 7.0 through 7.3:
plotOptions: {
bar: {
borderRadius: 4,
- borderRadiusWhenStacked: 'last',
},
}
Leaving it in place is harmless; an unknown option does nothing. See the option reference for its 7.4 values.
Which features need an import?
Only these nine, and only if your config or code uses them:
| Feature | You are using it if you have |
|---|---|
| Trellis | trellis: { by }, trellis.row, trellis.column, ApexCharts.trellis() |
| Storyboard | chart.storyboard |
| Perspectives | getViewState(), applyViewState() |
| Ink | chart.ink.enabled, or a draggable annotation |
| Canvas renderer | chart.renderer: 'canvas' or 'auto' |
| Linked views | chart.link, ApexCharts.crossfilter |
| Measure ruler | chart.measure.enabled, startMeasure() |
| Rewind | chart.history.enabled |
| Context menu | chart.contextMenu |
The import is side-effecting and must load after the main bundle:
import ApexCharts from 'apexcharts'
import 'apexcharts/features/trellis'
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
<script src="https://cdn.jsdelivr.net/npm/apexcharts/dist/features/trellis.js"></script>
The add-on names are trellis, storyboard, perspectives, ink, renderer-canvas, link, measure, history and context-menu. Tree Shaking lists every entry point and what it costs.
Trellis: small multiples in one key
Trellis splits one dataset into a grid of panels that share their y domain, x window, colours, legend, toolbar and crosshair. Switch the demo from one chart to a trellis, then change the y scale.
// no trellis: six series on one axisSame seven series both ways. One chart puts six regions on one axis, where the lines cross often enough that reading any single region means hunting for its colour in the legend. Trellis is the one key in the snippet above: each region gets a panel, all six share the y domain and the x window, and one crosshair sweeps them together.
The dashed Target line carries no region key, so it belongs to no panel and is drawn in all of them. Switch Y scale to independent and each panel takes its own domain: the axis labels change but the plot rectangles still line up to the pixel, because the grid measures every panel’s label gutter and pushes the widest as a shared floor. Shapes stay comparable even when the numbers no longer are.
import ApexCharts from 'apexcharts'
import 'apexcharts/features/trellis'
new ApexCharts(el, {
chart: { type: 'line' },
series: [
{ name: 'Revenue', region: 'North', data: north },
{ name: 'Revenue', region: 'South', data: south },
{ name: 'Target', data: target }, // no region key: drawn in every panel
],
trellis: { by: 'region' },
}).render()
A series with no facet key is drawn in every panel, so a target reaches each one without duplicating data. It also supports row × column grids, tidy row tables through trellis.data, one composed export and click-to-promote. Chart types with a hidden frame (histogram bins, heatmap colour scale, bubble size) share it across panels; the Trellis guide covers each, and the trellis demos show thirteen worked grids.
Trellis is a Premium feature: it works fully in trial mode, with a watermark, until a licence key is applied. Trellis needs a Premium licence whatever your size; the core library is free under $2M in annual revenue, budget or funding. See pricing and the licence.
A lean baseline for script tags
dist/apexcharts.core.js is the chart class with no chart types and no optional features, 136,921 B gzipped, which you assemble from separate tags:
<script src="https://cdn.jsdelivr.net/npm/apexcharts/dist/apexcharts.core.js"></script>
<script src="https://cdn.jsdelivr.net/npm/apexcharts/dist/line.js"></script>
<script src="https://cdn.jsdelivr.net/npm/apexcharts/dist/features/legend.js"></script>
It is purely additive: apexcharts.js is unchanged and still batteries-included.
Other changes and fixes
markers.largeDatasetThreshold(opt-in) draws a series' markers as one path, taking a 2,000-point render from 18ms to 5.8ms. Try your own data in the render cost lab.- A series with many nulls renders faster now that it is one path (#3249): 5,000 points went from 11ms to 3.5ms.
- A logarithmic y-axis puts its ink where its labels say and honours
tickAmount(#1341, #4873). - A tooltip inside a shadow root no longer freezes on the previous point (#3237).
- A stacked series with missing x values stacks onto the right baseline (#4886).
- Y-axis annotations draw on a chart with no data (#5278).
The full list is in the 7.0.0 GitHub release.
Upgrading
npm install apexcharts@7
Or with a script tag:
<script src="https://cdnjs.cloudflare.com/ajax/libs/apexcharts/7.0.0/apexcharts.min.js"></script>
- Add the import for any of the nine features you use.
- Check the default changes against stacked bars, animated data labels and tests that count line paths.
- On a CDN, pin core and add-ons to the same exact version. A 7.0 add-on on a cached 6.10 core throws
Cannot read properties of undefined (reading '__apex_Utils'). - If a build step rewrites asset paths, make sure it handles
dist/features/*.js; a 404'd add-on fails silently apart from the console warning.
Framework wrappers need no new version, except ng-apexcharts: 3.0.0's peer range excludes 7.x, so upgrade to 3.1.0. react-apexcharts, vue3-apexcharts, vue-apexcharts and stencil-apexcharts already accept 7.x.
Frequently asked questions
Will upgrading to ApexCharts 7.0 break my charts?
For most projects, no. Every chart type, axis, tooltip, legend, toolbar, export, annotation and theme stays in the default bundle. Only the nine opt-in features, such as Trellis or the canvas renderer, need an extra import. Stacked bar corners, animated data labels, and tests or CSS that count per-segment line paths also behave differently; the defaults table lists each fix.
What is a trellis chart?
A trellis, also called small multiples or faceting, splits one dataset into a grid of small charts that share their scales, so the panels can be compared against each other. The grid owns the shared y domain, the x window, the colour map, one legend, one toolbar and a crosshair that sweeps every panel.
Do trellis panels stay aligned if each one has its own y scale?
Yes. Independent scales mean different axis-label widths, which would normally leave every panel a slightly different size. The grid measures each panel's label gutter and uses the widest as a shared floor, so the plot rectangles still agree to the pixel. Shapes stay comparable even when the numbers no longer are.
Should I turn on markers.largeDatasetThreshold?
Only for a plain line or area chart with many points where render time matters. It is off by default because it is not pixel-identical where markers overlap: dense clusters lose their individual outlines and read flatter. It does not apply to discrete markers, per-point colours or a marker click handler.