Skip to content

Update dependency apexcharts to v5#281

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/apexcharts-5.x
Open

Update dependency apexcharts to v5#281
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/apexcharts-5.x

Conversation

@renovate

@renovate renovate Bot commented Jul 31, 2025

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
apexcharts (source) 3.41.05.15.2 age confidence

Release Notes

apexcharts/apexcharts.js (apexcharts)

v5.15.2: 💎 Version 5.15.2

Compare Source

Fixes

Draw-animation frame no longer touches a destroyed chart

An animated chart (e.g. an area chart) schedules a requestAnimationFrame during render() to run its mask-reveal / draw animation. If the chart was destroyed before that frame fired, the stale callback ran against already-cleared DOM and threw:

TypeError: Cannot read properties of null (reading 'node')   // in runMaskReveal

The classic trigger is React StrictMode, which mounts → unmounts → remounts a component in development: the first mount queues the animation frame, the unmount calls destroy() (which nulls w.dom.elDefs), and the queued frame then fires against the torn-down chart. Any sufficiently rapid unmount hit the same race.

The fix adds an internal isDestroyed flag, set by destroy() (but not by updates), that the deferred draw-animation callbacks - mask reveal, stroke draw, and bulk reveal - check and bail on before touching the DOM. The flag is cleared on the next render, so re-mounting re-arms animations normally.

This complements the detached-chart destroy() fix in 5.15.1; together they resolve the teardown crashes tracked in react-apexcharts#602.

v5.15.1: 💎 Version 5.15.1

Compare Source

A small patch release with a single stability fix: charts that are torn down before they ever mount no longer throw.


Fixes

destroy() no longer throws on an un-mounted / detached chart

Calling destroy() (or an internal clear()) on a chart that never finished rendering threw:

TypeError: Cannot read properties of undefined (reading 'node')

This happened when a chart was constructed against an element that wasn't connected to the DOM - so create() bailed out early before building the SVG, leaving w.dom.Paper undefined - and the chart was then destroyed. Common triggers:

  • A React useEffect cleanup (or a Vue unmounted hook) tearing the chart down before the element was ever attached.
  • A queued resize/update() firing after the host element had already been removed.

The teardown path now guards on the SVG actually having been created, cancels any pending resize redraw, and tolerates a missing Apex._chartInstances registry, so destroying a never-mounted chart is a safe no-op.

Fixes react-apexcharts#602 and vue-apexcharts#256.

v5.15.0: 💎 Version 5.15.0

Compare Source

New Features

Violin chart type
Screenshot 2026-06-11 at 4 15 00 PM

A new, tree-shakeable chart.type: 'violin' that renders a kernel-density curve for each category, with an optional overlay of the individual observations ("jitter") that produced it.

chart: {
  type: 'violin',
},
plotOptions: {
  violin: {
    bandwidthScale: 1,       // multiplies the density-derived half-width
    normalize: 'individual', // 'individual' → each violin scaled to its own peak
                             // 'group'      → all violins share one scale (widths track density across categories)
    points: {
      show: true,
      shape: 'circle',        // 'circle' | 'square'
      size: 2.5,              // radius (px)
      jitter: 0.5,            // 0..1 fraction of the half-width to scatter within
      constrainToViolin: true,// clamp jitter to the density width at each value
      maxPoints: 3000,        // cap per violin; excess is stride-thinned
      opacity: 0.9,
      fillColor: 'series-dark',// 'series-dark' | 'series' | any literal colour
      strokeColor: '#fff',
      strokeWidth: 1,
      // optional colorScale: { colors: [...], min, max, steps } to colour each dot by value
    },
  },
},
  • Available as a tree-shakeable entry: import ApexCharts from 'apexcharts/violin', or via the full bundle.
  • Supports horizontal orientation and bimodal (multi-modal) densities.
  • The jitter overlay reveals gradually as the violin path animates in (no instant pop-in).
Box-plot jitter overlay
Screenshot 2026-06-11 at 4 15 45 PM

Box plots can now overlay the raw observations behind each box, via plotOptions.boxPlot.points. It's off by default and inert unless a data point supplies a points: number[] array, so existing box-plot charts are unchanged.

plotOptions: {
  boxPlot: {
    points: {
      show: true,
      shape: 'circle',  // 'circle' | 'square'
      size: 2.5,
      jitter: 0.5,      // 0..1 fraction of the box half-width to scatter within
      maxPoints: 3000,  // cap per box; excess is stride-thinned
      opacity: 0.9,
      fillColor: 'series-dark',
      strokeColor: '#fff',
      strokeWidth: 1,
    },
  },
},

v5.14.0: 💎 Version 5.14.0

Compare Source

✨ New Features

Heatmap gradient legend

An opt-in continuous gradient legend for heatmaps that replaces the categorical legend with a color strip and a hover-tracking arrow.

  • Honors legend.position (top / right / bottom / left) and a new align config (start / center / end).
  • Strip length accepts px or percent (default '70%').
  • Stops are derived from colorScale.ranges or sampled from the same shade function the cells use, rendered as a smooth midpoint-anchored gradient (green → blue → yellow → red) that matches the shaded cells.
  • Per-band hover: hovering a range highlights the cells in that range and dims the rest.
  • The heatmap legend now renders for single-series charts too.
Value-proportional pyramid geometry

chart.type: 'pyramid' now matches the geometry users expect: a single continuous triangle whose stages each own a vertical share proportional to their value, with no gaps between segments.

  • Stages are trapezoids bounded by the triangle envelope (apex at top, base at gridWidth) sized by cumulative-value share.
Chart-type morph animations

A new, optional, tree-shakeable feature that tweens between chart types instead of the old destroy-and-recreate flicker.

chart: {
  animations: {
    chartTypeMorph: { enabled: true, speed: 600 }
  }
}

Loaded on demand via apexcharts/features/morph. It captures the old SVG paths from the DOM before destroy, maps each one onto the new chart-type's element identity, and seeds the new paths so the existing PathMorphing engine interpolates between them. When the source/target types or series shapes are incompatible it falls back to an instant snap.

  • Supported pairs: bar ↔ {pie, donut, radialBar, polarArea}, plus the trivial pie ↔ donut ↔ polarArea cases, and cross-type morphs involving funnel / pyramid / gauge.

🐛 Fixes

  • heatmap: fix two color-mapping bugs in the shared treemap/heatmap helper.
  • tooltip: align the combo-chart crosshair with the bar on a numeric x-axis.
  • annotations: preserve configured opacity on x-axis range rects.
  • toolbar: use the rotate-ccw icon for the reset-zoom button.
  • svg: fix a concat error for SVG paths starting in M 0 0 (invalid-path edge case).
  • types: add toolbar.menu to the ApexLocale type.

v5.13.0: 💎 Version 5.13.0

Compare Source

This release focuses on a major visual and behavioral overhaul of tooltips, gauges, and the toolbar, alongside a new zoom-aware LTTB downsampler for very large datasets, a new multi-axis zero-alignment option, and a tightening of the public TypeScript surface.


Features

feat(tooltip): modernized positioning, arrows, and a11y

Tooltip box and arrow now anchor off the bar's rendered DOM rect fixing column/datetime alignment in stacked and grouped charts. Adds a connector arrow (default on) and context-aware placement

  • New options:
    • tooltip.arrow: boolean (default true) — render a connector arrow pointing at the data point.
feat(gauge): needle options and animation

Three new radial-gauge design knobs and a smoother needle update:

feat(yaxis): alignZero

When multiple y-axes mix sign ranges (for example one spans -10..15, another 0..3), their zero lines no longer share a pixel position - so bars from different axes appear to have different baselines. Setting alignZero: true on two or more axes now extends each opted-in axis so y=0 lands at the same pixel.

  • Default: false (no behavior change unless opted in).
  • Closes #​5100.
feat(toolbar): modernized

Replaces the mixed icon set (filled circles, illustrated hand, heavy magnifier) with a coordinated stroke-only Lucide-style set, and wraps the toolbar in a soft glass pill container with hover and selected-button backgrounds.


Upgrade notes

  • Tooltip arrow is on by default (tooltip.arrow: true). To restore the pre-5.13 look, set tooltip.arrow: false. The arrow is auto-suppressed for followCursor, fixed.enabled, fillSeriesColor, non-axis charts, and most shared multi-series cases.
  • TypeScript users on stricter configs may see new errors from the narrowed literal unions on tooltip.theme, states.filter.type, legend.clusterGroupedSeriesOrientation, and xaxis.axisTicks.borderType. Fix by using one of the documented string values. Reading off opts.w may also surface, since [key: string]: any was removed from formatter option types.

v5.12.0: 💎 Version 5.12.0

Compare Source

New Features

First-class funnel / pyramid / gauge types (8f038155)

chart.type now accepts 'funnel', 'pyramid', and 'gauge' directly. They normalize to the underlying renderer (bar with isFunnel for funnel/pyramid, radialBar for gauge) at config time and preserve chart.requestedType for default selection.

Funnel additions:

  • plotOptions.funnel.shape: 'rectangle' | 'trapezoid' — trapezoid mode draws continuous sloped sides between consecutive stages.
  • plotOptions.funnel.lastShape: 'flat' | 'taper' — controls whether the final stage tapers to a point.
  • Trapezoid mode skips the 3D bar-shadow pass (stages are already contiguous).

Gauge additions:

  • plotOptions.radialBar.shape: 'arc' | 'needle'.
  • Custom value-to-angle mapping (min/max).
  • Configurable bands and ticks that render on both arc and needle shapes.

Samples added under samples/source/funnel/ and samples/source/gauge/.

Accessibility — WCAG 1.4.11 contrast compliance (258def38)

All colours across the 10 built-in theme palettes now pass WCAG 1.4.11 non-text contrast (≥ 3:1) against both the default light and dark backgrounds.


Improvements

TimeScale refactor (005c4f23)

The time-scale tick generator has been rewritten around a single-resolution stride algorithm. The previous mix-and-match label promotion logic has been removed.

  • src/modules/TimeScale.js reduced from ~1,231 lines to a focused stride generator.
  • New date helpers in src/utils/DateTime.js for tick generation.

Bug Fixes

  • Tooltip — shared sweep coverage (c13f2ebe) — Shared tooltips on line/area charts now capture every datapoint during a mouse sweep instead of skipping points at fast cursor speeds.
  • Accessibility — restore #​5183 SVG <title> fix (27bc253c) — The root SVG <title> element is removed again, restoring the original fix that had regressed.
  • Pie/donut legend.showForNullSeries = false crash (57be77df, #​5216) — Setting legend.showForNullSeries: false on pie/donut charts no longer throws a runtime error.
  • Responsive yaxis merge (0ba210b2, fcf46856, #​5212) — yaxis array entries from a responsive breakpoint now deep-merge into the matching base-config entries instead of replacing them wholesale.

Upgrade Notes

  • Funnel / pyramid / gauge users: The existing type: 'bar' + plotOptions.bar.isFunnel: true and type: 'radialBar' configurations continue to work. New type: 'funnel' | 'pyramid' | 'gauge' is opt-in and recommended for new code — it enables the new shape options and gauge sub-features.
  • TimeScale: Tick output is generally cleaner but may differ from 5.11.0 at certain ranges. If you snapshot-test rendered SVGs, expect tick-label snapshot churn.

v5.11.0: 💎 Version 5.11.0

Compare Source

Highlights

WCAG 2.2 AA Accessibility Remediation

ApexCharts 5.11.0 ships a comprehensive accessibility overhaul targeting WCAG 2.2 Level AA conformance.

Keyboard & Focus

  • Focused data points now expose role="img" and a contextual aria-label (series name, formatted value, category).
  • Two-stage Escape: first press dismisses the tooltip, second press exits keyboard navigation (WCAG technique G194).
  • Keyboard zoom/pan via + / - / 0 and Shift+Arrow as alternatives to drag gestures.
  • Toolbar hit targets enlarged to 24×24 CSS px minimum.
  • Tooltip is biased away from the focused data point during keyboard navigation.

ARIA & Semantics

  • SVG <title> added alongside the existing <desc>; auto-generated aria-label includes series names when no description is supplied.
  • Toolbar controls migrated from div[role=button] to native <button type="button"> (first rule of ARIA)
  • Visually-hidden role="status" aria-live="polite" region announces zoom/pan/reset actions to screen readers.

Visual & Motion

  • New --apexcharts-focus-color CSS custom property, themed for light (#&#8203;008FFB), dark (#FFD500), and high-contrast (#FFFF00) modes — fixes SC 1.4.11 / 2.4.7.
  • Utils.getContrastRatio() WCAG luminance helper added; high-contrast palette validated ≥ 3:1 against #fff in automated tests — fixes SC 1.4.3 / 1.4.11.
  • @media (prefers-reduced-motion: reduce) shrinks all chart animations to near-zero duration — fixes SC 2.2.2.

Tests added: contrast.spec.js, keyboard-trap.spec.js (Playwright), keyboard-zoom.spec.js (Playwright), extended accessibility.spec.js and keyboard-navigation.spec.js.


Improved Tooltip Hit Detection for Line / Area Charts

closestInMultiArray now projects the cursor onto each consecutive line segment rather than measuring distance to the nearest marker. This makes clicking between two markers on a line or area chart reliably pick the correct series — previously, whichever series's marker happened to be closest to the empty space was selected, often giving wrong results when many series clustered together. Bar, scatter, and other non-line chart types retain the existing marker-distance logic.


Bug Fixes

  • Tooltip — shared: false on line charts (#​4983): closestInMultiArray was ignoring Y distance whenever allSeriesHasEqualX was true, causing a tie across all series so the lowest-index series always won. The X-only fast path is now restricted to shared: true; full Euclidean distance is used otherwise, so the actually-hovered series is correctly identified.

  • Tooltip — shared: true markerClick : Line chart with shared: true now correctly reports the clicked series index in the markerClick event callback.

  • Focus outline on mouse click: Removed the focus outline that incorrectly appeared around the entire chart container on mouse click; focus styles are now shown only during keyboard navigation.

v5.10.6: 💎 Version 5.10.6

Compare Source

Bug Fixes

  • Legend stays greyed out after re-enabling hidden series; Fixed a regression where toggling a hidden series back on via the legend would leave the legend item in a greyed-out/disabled visual state. (#​5189, #​5196)
  • Focus outline visible on mouse click; Fixed an issue where clicking anywhere on the chart would show a browser focus outline around the entire chart container. The outline now only appears during keyboard navigation.

v5.10.5: 💎 Version 5.10.5

Compare Source

What's Changed

New Contributors

Full Changelog: apexcharts/apexcharts.js@v5.10.4...v5.10.5

v5.10.4: 💎 Version 5.10.4

Compare Source

What's New
  • CSS variable colors — Pass 'var(--my-color)' directly as a chart color. Swap your entire palette at runtime with a single CSS attribute change. (#​5185) Thanks to @​codecalm
  • New locales — Bulgarian (bg) and Romanian (ro) added. Serbian, Swedish, and Ukrainian locale files were also renamed to their correct ISO codes (sr, sv, uk). (#​5186) Thanks to @​gabriele-v
Bug Fixes
  • Datetime x-axis ticks — Several edge cases fixed: the first tick was missing when a range started exactly on a minute or second boundary; charts spanning midnight showed wrong dates; short-month rollovers (e.g. Feb 28 → Mar 1) were off by a day.
  • Screen reader duplicate label — Charts were announcing their title twice. (#​5183)
Performance
  • Faster updatesupdateOptions() and updateSeries() no longer rebuild internal modules
    from scratch on every call, reducing re-render overhead on dashboards with frequent data
    refreshes. Large datasets also benefit from automatic LTTB downsampling.
Type Safety (JSDoc refactor)

All ~97 JavaScript source files in src/ have been hardened with a JSDoc-first type safety strategy: TypeScript validates the source via checkJs: true without requiring a migration to .ts files. npm run typecheck now passes with zero errors under full strict: true.

What changed:

  • 34 real bugs found and fixed during type checking: wrong property names, dead arguments at call sites, deprecated IE11 APIs, mismatched JSDoc parameter names, variable type reuse, and missing return statements.

v5.10.3: 💎 Version 5.10.3

Compare Source

Bug Fixes
  • SSR: Bar/column charts rendered duplicate elements in renderToString() (1b4bcb1f)

    SSRElement.appendChild and insertBefore were unconditionally pushing the
    child onto the children array without checking whether the child already had a
    parent. Because Bar.js creates elDataLabelsWrap, elGoalsMarkers, and
    elBarShadows once per series but calls elSeries.add() on every data-point
    iteration, the SSR virtual DOM accumulated N×N bar paths and datalabel groups
    instead of N. The fix mirrors standard browser DOM move semantics: if a node
    already has a parent it is detached from that parent before being appended.
    This affects both appendChild and insertBefore.

v5.10.2: 💎 Version 5.10.2

Compare Source

Bug Fixes
  • Tree-shaking: ESM entry points were incorrectly eliminated by bundlers

    dist/*.esm.js and dist/features/*.esm.js were missing from the
    sideEffects field in package.json. Bundlers such as Webpack and Rollup
    treat files not listed as having side effects as safe to drop when they are
    not explicitly imported, which caused chart type and feature registrations to
    be silently tree-shaken away in production builds. Adding both glob patterns
    ensures the self-registering ESM bundles are always retained.

v5.10.1: 💎 Version 5.10.1

Compare Source

Bug Fixes
Chart Registry Survives Duplicate Module Instances

Problem: When a bundler (Vite, webpack, etc.) accidentally creates two separate copies of the ApexCharts module - for example when mixing CJS and ESM imports, or when optimizeDeps is not configured - ApexCharts.use() would write to one module's registry while the chart renderer read from another. The chart type was effectively never registered, causing a runtime error.

Fix: The chart type registry is now stored on globalThis.__apexcharts_registry__ instead of a module-local variable. All module instances share a single registry on the global object, so registration is never silently lost regardless of how many module copies the bundler created.

This is a defense-in-depth fix. For best results, configure your bundler to deduplicate ApexCharts (Vite: add apexcharts to optimizeDeps.include). The globalThis registry ensures the library degrades gracefully even when deduplication is not configured.

v5.10.0: 💎 Version 5.10.0

Compare Source

New Features

Per-Type Modular Entry Points

Every public chart type now has its own dedicated entry point matching the chart.type string you already use in config. Previously, users needed to know the internal grouping (e.g. apexcharts/heatmap for treemap charts); now you import by the exact type name.

New entry points:

Import Chart type(s) registered
apexcharts/line line
apexcharts/area area
apexcharts/scatter scatter
apexcharts/bubble bubble
apexcharts/rangeArea rangeArea
apexcharts/bar bar
apexcharts/column bar (column mode)
apexcharts/rangeBar rangeBar
apexcharts/candlestick candlestick
apexcharts/boxPlot boxPlot
apexcharts/pie pie
apexcharts/donut donut
apexcharts/polarArea polarArea
apexcharts/radialBar radialBar
apexcharts/radar radar
apexcharts/heatmap heatmap
apexcharts/treemap treemap (new standalone entry)

Example:

import ApexCharts from 'apexcharts/core'
import 'apexcharts/scatter'    // instead of 'apexcharts/line'
import 'apexcharts/donut'      // instead of 'apexcharts/pie'
import 'apexcharts/treemap'    // instead of 'apexcharts/heatmap'
import 'apexcharts/features/legend'

The old grouped entry points (apexcharts/pie, apexcharts/heatmap, apexcharts/radial, etc.) continue to work and register all their previous types — no breaking changes.


Improvements
Better Error Message for Unregistered Chart Types

When a chart type is not registered (common with tree-shaken builds), the error message now includes a specific hint about Vite's module deduplication as the most likely root cause, and how to fix it via optimizeDeps.include in vite.config.


dist/ File Structure

dist/
├── apexcharts.js              # UMD bundle (development)
├── apexcharts.min.js          # UMD bundle (minified)
├── apexcharts.esm.js          # ES module — full bundle (all chart types + features)
├── apexcharts.common.js       # CommonJS — full bundle
├── apexcharts.css             # Default styles
├── apexcharts-legend.css      # Legend styles
│
├── core.esm.js                # ES module — bare core (no chart types, no features)
├── core.common.js             # CommonJS — bare core
│
├── line.esm.js / line.common.js
├── area.esm.js / area.common.js
├── scatter.esm.js / scatter.common.js
├── bubble.esm.js / bubble.common.js
├── rangeArea.esm.js / rangeArea.common.js
├── bar.esm.js / bar.common.js
├── column.esm.js / column.common.js
├── rangeBar.esm.js / rangeBar.common.js
├── candlestick.esm.js / candlestick.common.js
├── boxPlot.esm.js / boxPlot.common.js
├── pie.esm.js / pie.common.js
├── donut.esm.js / donut.common.js
├── polarArea.esm.js / polarArea.common.js
├── radialBar.esm.js / radialBar.common.js
├── radar.esm.js / radar.common.js
├── heatmap.esm.js / heatmap.common.js
├── treemap.esm.js / treemap.common.js    # new in v5.10.0
│
├── features/
│   ├── all.esm.js / all.common.js
│   ├── annotations.esm.js / annotations.common.js
│   ├── exports.esm.js / exports.common.js
│   ├── toolbar.esm.js / toolbar.common.js
│   ├── legend.esm.js / legend.common.js
│   └── keyboard.esm.js / keyboard.common.js
│
└── locales/                   # i18n locale JSON files (ar, de, es, fr, ja, zh-cn, ...)

v5.9.0: 💎 Version 5.9.0

Compare Source

New Features

Color-Blind Accessibility Mode (theme.accessibility.colorBlindMode)

A new theme.accessibility config object provides built-in support for color vision deficiencies.

new ApexCharts(el, {
  theme: {
    accessibility: {
      colorBlindMode: 'deuteranopia' // 'deuteranopia' | 'protanopia' | 'tritanopia' | 'highContrast' | ''
    }
  }
})
Mode Description
deuteranopia Red-green safe palette (green-weak, ~6% of males) — Wong 2011
protanopia Red-green safe palette (red-weak, ~1% of males) — Wong 2011
tritanopia Blue-yellow safe palette (~0.01% of population)
highContrast WCAG AA-compliant high contrast colors + apexcharts-high-contrast CSS class on wrapper
'' (default) No change, existing behavior
  • colorBlindMode takes full priority over theme.palette and theme.monochrome — no conflict resolution needed.
  • TypeScript: ApexTheme.accessibility type added to apexcharts.d.ts.
  • highContrast mode adds the apexcharts-high-contrast CSS class to the chart wrapper for custom CSS targeting; it does not mutate any config options.

Tree-Shaking: Sub-Entry Bundle Deduplication

Previously, each chart-type sub-entry (bar.esm.js, line.esm.js, etc.) and feature sub-entry (features/legend.esm.js, etc.) bundled its own private copy of all shared ApexCharts utilities (Core, Fill, Graphics, Theme, etc.), resulting in significant duplication when multiple sub-entries were loaded together.

v5.9.0 fixes this:

  • vite.config.mjs: a coreExternalPlugin externalizes ~60 shared modules from sub-entry builds — they are resolved from apexcharts/core at runtime instead of being re-bundled.
  • src/entries/core.js: all shared utilities are re-exported under internal __apex_* names, making them available to sub-entries without additional network requests or parse overhead.
  • src/modules/Core.js: removed a direct Legend import that was pulling the entire legend module into the core chunk unnecessarily; uses the already-initialized ctx.legend instance instead.

Impact: When using the tree-shaking API with multiple chart types or features, total JS parse/execute size is significantly reduced. The apexcharts/core bundle is loaded once; all sub-entries share it.

No breaking changes. The full apexcharts.js / apexcharts.esm.js bundles are unaffected. The __apex_* exports in core.js are internal — do not use them in application code.


Bug Fixes
  • core: Core.js no longer constructs a throwaway Legend instance just to measure legend dimensions — it reads from the already-initialized ctx.legend instance, avoiding a redundant import in the core chunk.

dist/ File Structure

dist/
├── apexcharts.js              # UMD bundle (development)
├── apexcharts.min.js          # UMD bundle (minified)
├── apexcharts.esm.js          # ES module — full bundle (all chart types + features)
├── apexcharts.common.js       # CommonJS — full bundle
├── apexcharts.css             # Default styles
├── apexcharts-legend.css      # Legend styles
│
├── core.esm.js                # ES module — bare core (no chart types, no features)
├── core.common.js             # CommonJS — bare core
│
├── bar.esm.js                 # ES module — bar/column/area/line chart type
├── bar.common.js
├── line.esm.js                # ES module — line/area/scatter/bubble chart type
├── line.common.js
├── pie.esm.js                 # ES module — pie/donut chart type
├── pie.common.js
├── radial.esm.js              # ES module — radialBar/polarArea chart type
├── radial.common.js
├── candlestick.esm.js         # ES module — candlestick/boxPlot chart type
├── candlestick.common.js
├── heatmap.esm.js             # ES module — heatmap/treemap chart type
├── heatmap.common.js
│
├── features/
│   ├── all.esm.js             # ES module — all optional features bundled
│   ├── all.common.js
│   ├── annotations.esm.js     # ES module — annotations feature
│   ├── annotations.common.js
│   ├── exports.esm.js         # ES module — SVG/PNG/CSV export feature
│   ├── exports.common.js
│   ├── toolbar.esm.js         # ES module — toolbar/zoom/pan feature
│   ├── toolbar.common.js
│   ├── legend.esm.js          # ES module — legend feature
│   ├── legend.common.js
│   ├── keyboard.esm.js        # ES module — keyboard navigation feature
│   └── keyboard.common.js
│
└── locales/                   # i18n locale JSON files (ar, de, es, fr, ja, zh-cn, ...)

Note: apexcharts.ssr.esm.js and apexcharts.ssr.common.js were removed in v5.9.0. SSR usage should import from apexcharts/core directly and call renderToString / renderToHTML from apexcharts/ssr (available since v5.7.0).

v5.8.1

Compare Source

v5.8.0: 💎 Version 5.8.0

Compare Source

Bug Fixes
  • tree-shaking: publish missing dist/core and dist/features/* build artifacts introduced in v5.7.0 (#​5177)
  • ssr: fix broken SSR import path in src/ssr/index.js (v5.7.1 patch)
  • ssr: fix SVG is not a function crash in renderToHTML/renderToStringglobal.SVG was not registered in the Node.js SSR path (v5.7.1 patch)

v5.7.1

Compare Source

v5.7.0: 💎 Version 5.7.0

Compare Source

Features
Feature-level tree-shaking

ApexCharts now ships modular entry points so you can import only the chart types
and features your application actually uses. This can cut bundle size substantially
for apps that don't need the full chart catalogue.

// Minimal custom bundle — only what you need
import ApexCharts from 'apexcharts/core'
import 'apexcharts/line'               // line / area / scatter
import 'apexcharts/features/legend'    // optional legend

Chart-type entry points

Import Chart types
apexcharts/line line, area, scatter, bubble
apexcharts/bar bar, column
apexcharts/pie pie, donut
apexcharts/radial radialBar
apexcharts/candlestick candlestick
apexcharts/heatmap heatmap
apexcharts/treemap treemap
apexcharts/rangearea rangeArea, rangeBar
apexcharts/boxplot boxPlot
apexcharts/funnel funnel
apexcharts/radar radar

Feature entry points

Import Feature
apexcharts/features/legend Legend
apexcharts/features/toolbar Toolbar / zoom controls
apexcharts/features/exports SVG / PNG / CSV / JSON export
apexcharts/features/annotations Point, line, and area annotations
apexcharts/features/keyboard Keyboard navigation (accessibility)

The standard import ApexCharts from 'apexcharts' import continues to work
unchanged — all chart types and features are included by default.

Keyboard navigation

Charts are now keyboard-accessible. After focusing a chart (tab or click), users
can navigate between data points using the arrow keys. The tooltip and active
marker update as focus moves between points. This meets WCAG 2.1 AA keyboard
interaction requirements.

Enable via the optional feature entry point:

import 'apexcharts/features/keyboard'

Keyboard navigation is included automatically in the full bundle.

Server-side rendering (SSR)

SSRRenderer.renderToString(config) and SSRRenderer.renderToHTML(config) now
work in Node.js without a browser DOM. Useful for generating static SVG images,
pre-rendering chart HTML for emails, or server-driven PDF pipelines.

import SSRRenderer from 'apexcharts/ssr'

const svg = await SSRRenderer.renderToString({
  chart: { type: 'line', width: 600, height: 350 },
  series: [{ name: 'Sales', data: [10, 41, 35, 51, 49, 62] }],
})
// svg is a self-contained SVG string — no window or document required
Internal / Architecture

These changes are transparent to users but lay the groundwork for future
performance and bundle-size improvements.

  • Modules decoupled from the chart context service-locator (ctx) pattern —
    required to make tree-shaking work correctly at the module level.
  • Replaced legacy ES5 polyfills with native ES6+ equivalents.
  • Removed bare window / document / navigator accesses throughout the
    source; all browser API calls now go through SSR-safe wrappers.

v5.6.0: 💎 Version 5.6.0

Compare Source

Bug Fixes

Critical Fix: Tooltip and Chart Interactions Restored (#​5168)
  • Fixed a critical regression where tooltips were not appearing and chart interactions were completely blocked
  • The <foreignObject> element, which contains the legend wrapper, was incorrectly positioned as the last child in the SVG DOM, causing it to overlay and block all mouse events on the chart
  • Restored the correct DOM ordering by ensuring <foreignObject> is always the first child element (at the back of the z-order), allowing chart interactions to work properly
  • This issue affected all chart types including column, scatter, heatmap, bar, and others
  • The regression was introduced in v5.5.0 when accessibility features were added
Comprehensive DOM Ordering Tests
  • Added extensive test coverage to prevent future regressions of DOM element ordering

If you experienced tooltip or interaction issues in v5.5.0/v5.5.1, this release fully resolves those problems. Simply upgrade to v5.6.0 - no code changes required on your end.

v5.5.1

Compare Source

v5.5.0: 💎 Version 5.5.0

Compare Source

Major Features

Server-Side Rendering (SSR) Support

ApexCharts now fully supports SSR for Next.js, Nuxt, SvelteKit, Astro, and other modern meta-frameworks! This has been one of the most requested features. (#​4288)

Server-side rendering:

import ApexCharts from 'apexcharts/ssr'

const chartHTML = await ApexCharts.renderToHTML({
  series: [{ data: [30, 40, 35, 50, 49, 60, 70] }],
  chart: { type: 'bar' }
}, {
  width: 500,
  height: 300
})

Client-side hydration:

import ApexCharts from 'apexcharts/client'

// Hydrate specific chart
ApexCharts.hydrate(document.getElementById('my-chart'))

// Or hydrate all charts on the page
ApexCharts.hydrateAll()

Package exports:

  • Browser: import ApexCharts from 'apexcharts' (or apexcharts/client)
  • Node.js/SSR: import ApexCharts from 'apexcharts/ssr'
  • Automatic environment detection via conditional exports
Accessibility Support

Added comprehensive accessibility features to make charts usable for everyone:

  • ARIA labels and roles
  • Keyboard navigation support
  • Screen reader compatibility
  • Semantic HTML structure

📦 Bundle Sizes

Browser bundles:

  • apexcharts.esm.js: 878 KB (unminified)
  • apexcharts.common.js: 462 KB (minified CommonJS)
  • apexcharts.min.js: 462 KB (minified UMD)

SSR bundles (new!):

  • apexcharts.ssr.esm.js: 891 KB (unminified ESM for Node.js)
  • apexcharts.ssr.common.js: 467 KB (minified CommonJS for Node.js)

Breaking Changes

None! This release is fully backward compatible with v5.4.0.

v5.4.0: 💎 Version 5.4.0

Compare Source

🚀 Major Changes

Build System Modernization
  • Complete tooling overhaul: Migrated from Rollup + Webpack + Babel to Vite for faster builds and better developer experience
  • Testing modernization: Transitioned from Jest to Vitest for improved performance and native ESM support
  • Removed SVG.js dependency: Replaced with a custom lightweight SVG utility, reducing bundle size and external dependencies
Performance Improvements
  • Optimized object cloning - Significantly improved performance for data processing
  • DOM query caching - Reduced redundant DOM lookups for better rendering performance
  • Event delegation - Implemented event delegation pattern to improve event handling performance
  • Treemap optimization - Enhanced Treemap-squared.js algorithm for better performance

🐛 Bug Fixes

  • Fixed y-axis title getting cut off when using formatter (#​5152)
  • Fixed annotation rectangles drifting when browser zoom level is not 100%
  • Fixed x-axis label repetition for very small numeric values (#​5127)
  • Fixed bar chart top rounding issues
  • Fixed area chart fill color when using CSS variables
  • Fixed shared tooltip showing invisible series
  • Fixed stack-column-outline chart rendering issues
  • Removed obsolete polyfills from all samples
  • Converted Treemap to proper ES module export
  • Created ChartFactory for future tree-shaking support
  • Legend font-size now supports units other than pixels (rem, vh, etc.) (#​5151)

Refactoring & Code Quality

  • Refactored data handling architecture
  • Applied code quality improvements across the codebase
  • Improved unit test coverage across utility functions, datetime, and data processing modules

Testing Improvements

  • Comprehensive unit test improvements across the library
  • Enhanced E2E testing infrastructure
  • Updated sample charts

💝 Contributors

Thank you to all contributors:

v5.3.6: 💎 Version 5.3.6

Compare Source

What's Changed

New Contributors

Full Changelog: apexcharts/apexcharts.js@v5.3.3...v5.3.6

v5.3.5

Compare Source

v5.3.4

Compare Source

v5.3.3: 💎 Version 5.3.3

Compare Source

What's Changed

  • Added data parsing support for candlestick, boxplot, rangeBar and bubble charts
  • Reset parsing flags during update when data is parsed. Fixes updateSeries and updateOptions bugs when parsing data.
  • Feature/control legend css injection by @​leechoohyoung in #​5074
  • Unhide pan/zoomselect for mobile/touch devices by @​vingerha in #​5081
  • Add a missing type and removes an unused type by @​Jo-varo in #​5065
  • Update LICENSE by @​jberes in #​5087

New Contributors

Full Changelog: apexcharts/apexcharts.js@v5.3.0...v5.3.3

v5.3.2

Compare Source

v5.3.1

Compare Source

v5.3.0: 💎 Version 5.3.0

Compare Source

What's changed

  • Data Parsing capabilites.
    ApexCharts now supports direct parsing and mapping of raw data objects, eliminating the need for manual data transformation. Complete documentation for this feature - https://apexcharts.com/docs/parsing-data/
  • Pie/Donut/RadialBar series formats
    These chart types now support XY series formats making it consistent with the rest of the chart types. Read the documentation for this change - https://apexcharts.com/docs/series/

v5.2.0

Compare Source

v5.1.0

Compare Source

v5.0.0

Compare Source

v4.7.0: 💎 Version 4.7.0

Compare Source

What's Changed

Cleaned up misplaced resolve() call in updateOptions()

v4.6.0: 💎 Version 4.6.0

Compare Source

What's Changed
New Contributors

Full Changelog: apexcharts/apexcharts.js@v4.5.0...v4.6.0

v4.5.0: 💎 Version 4.5.0

Compare Source

What's Changed
  • getSvgString() method is now public which allows users to get

Note

PR body was truncated to here.


Configuration

📅 Schedule: (in timezone Asia/Jerusalem)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the renovate label Jul 31, 2025
@vercel

vercel Bot commented Jul 31, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
b2b-react-sample-app Ready Ready Preview, Comment Jun 22, 2026 7:15pm

@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 3c20f70 to 7ef4ba3 Compare August 11, 2025 16:15
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 7ef4ba3 to 03dbc6e Compare August 12, 2025 15:47
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 03dbc6e to b823757 Compare August 19, 2025 20:01
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from b823757 to 684a93f Compare August 21, 2025 19:21
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 684a93f to c64da9b Compare September 1, 2025 16:58
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from c64da9b to 71127b3 Compare September 10, 2025 18:57
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 71127b3 to fe7af9a Compare September 11, 2025 22:58
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from fe7af9a to 2c58123 Compare September 13, 2025 00:34
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 2c58123 to cc05f10 Compare September 25, 2025 17:34
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from cc05f10 to e03bd81 Compare September 28, 2025 14:31
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from e03bd81 to dcde8f5 Compare October 16, 2025 06:39
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from dcde8f5 to 52a260a Compare October 22, 2025 07:59
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 52a260a to 9a4e797 Compare November 3, 2025 17:15
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 9a4e797 to 88548e5 Compare November 9, 2025 07:17
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from fd08913 to 840ff23 Compare January 15, 2026 13:34
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 840ff23 to 5b6fecc Compare January 23, 2026 20:54
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 5b6fecc to c197800 Compare February 2, 2026 16:47
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from c197800 to 9c759ab Compare February 4, 2026 14:57
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 9c759ab to 3237c4d Compare February 12, 2026 13:42
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 3237c4d to 486693f Compare February 17, 2026 18:59
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 486693f to 6e9ec01 Compare February 19, 2026 10:55
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 6e9ec01 to c3f98e9 Compare February 20, 2026 11:28
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from c3f98e9 to 3fae5d1 Compare February 20, 2026 18:52
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 3fae5d1 to d6263ed Compare March 4, 2026 16:04
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from d6263ed to 455ed1a Compare March 5, 2026 21:20
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 455ed1a to 638a1c0 Compare March 6, 2026 15:10
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 638a1c0 to 9d3aba5 Compare March 6, 2026 23:14
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from 9d3aba5 to d6bc03b Compare March 7, 2026 10:53
@renovate renovate Bot force-pushed the renovate/apexcharts-5.x branch from d6bc03b to b3ca74b Compare March 9, 2026 16:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants