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.js for script-tag pages, and drawn pictograms with plotOptions.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.

ChangeReleaseWhat you will seeHow to reverse it
Nine features are opt-in7.0.0A console warning, and the chart draws without the feature: a trellis renders as one chart, a canvas renderer draws SVGImport the feature (see below)
plotOptions.bar.borderRadiusWhenStacked removed7.0.0The option is ignored; corner rounding follows the stack's outer edgeDelete it. It returned in 7.4 (default 'all'), so on 7.4 or later you can set it again
dataLabels.animate.enabled is true7.0.0Bar and column labels ride to their new position on a data update instead of snappingdataLabels: { animate: { enabled: false } }
Null-split lines are one <path> per series7.0.0A line or area broken by nulls is one path element, not one per segment; an area's gradient runs continuously across gapsNo 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:

FeatureYou are using it if you have
Trellistrellis: { by }, trellis.row, trellis.column, ApexCharts.trellis()
Storyboardchart.storyboard
PerspectivesgetViewState(), applyViewState()
Inkchart.ink.enabled, or a draggable annotation
Canvas rendererchart.renderer: 'canvas' or 'auto'
Linked viewschart.link, ApexCharts.crossfilter
Measure rulerchart.measure.enabled, startMeasure()
Rewindchart.history.enabled
Context menuchart.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.

Layout
Y scale
// no trellis: six series on one axis

Same 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>
  1. Add the import for any of the nine features you use.
  2. Check the default changes against stacked bars, animated data labels and tests that count line paths.
  3. 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').
  4. 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.