Skip to content
CAI
Software that uses CAICheck a score

apache/echarts

43.8

Weak · 28 September 2026

132.2k

lines of production code

TypeScript

with JavaScript

3

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is Apache ECharts, a high-performance JavaScript visualization library that renders a wide variety of charts, including statistical, geographic, and flow diagrams. It provides a modular architecture that supports tree-shaking for optimized bundle sizes, extensive internationalization, and server-side rendering capabilities. The library also includes a comprehensive extension system for custom series, components, and data transformations, alongside robust tooling for build, testing, and release management.

How it got here

2013–2020 — TypeScript migration and modular architecture

112 changes.

This period focused on migrating the ECharts codebase from JavaScript to TypeScript and restructuring it into a modular, installable component architecture. The work introduced a new extension system for selective loading, enhanced type safety across all chart types and components, and established a robust build and testing infrastructure to support modern module standards.

2021–2026 — SSR hydration and matrix visualization

14 changes.

This period focused on expanding the library's rendering capabilities with a new Matrix component and coordinate system for tabular data, alongside a universal animation engine for complex transitions. Significant work was also dedicated to Server-Side Rendering, introducing client-side hydration to restore interactivity to server-generated SVG charts. The release engineering process was further refined through automated communication templates and stricter build versioning.

Features

Add ThemeRiver chart series

This change introduces the ThemeRiver series, a new visualization type for displaying stacked data layers over time. The implementation includes the series model, view, layout logic, and installation handler, enabling users to create theme river diagrams with features like layer grouping, smooth polygon rendering, and label styling.

src/chart/themeRiver · high confidence

Add thumbnail component for graph series

Introduces a new \thumbnail\ component that provides a miniature overview of the chart, allowing users to navigate large graph visualizations by panning and zooming within the thumbnail window. The implementation includes the model, view, and bridge logic, with initial support limited to \graph\ series. Users can configure the thumbnail's position, size, and styling via options like \show\, \right\, \bottom\, \width\, \height\, \itemStyle\, and \windowStyle\.

src/component/thumbnail · high confidence

Added SSR client hydration library

The SSR client module now includes a built-in \hydrate\ function that restores interactivity to server-rendered SVG charts. This client-side script scans the DOM for SVG elements, reads metadata attributes (such as \ecmeta\_ssr\_type\, \ecmeta\_series\_index\, and \ecmeta\_data\_index\), and attaches event listeners to dispatch events to user-provided callbacks, enabling seamless client-side interaction with pre-rendered visualizations.

ssr · high confidence

Added SausageShape utility for drawing rounded rectangular sectors

A new SausagePath class has been introduced in src/util/shape/sausage.ts to support drawing shapes that resemble sectors with half-circles on both ends. This utility allows for the creation of complex geometric forms by combining arc segments, enabling more flexible visual representations in charts and diagrams without requiring manual path construction.

src/util/shape · high confidence

Added localization files for Arabic, Czech, German, Greek, English, Spanish, Persian, Finnish, French, Hungarian, Italian, Japanese, and Korean

New translation files have been added to the i18n module, providing localized strings for time, legend, toolbox, series, and aria components in Arabic (langAR), Czech (langCS), German (langDE), Greek (langEL), English (langEN), Spanish (langES), Persian (langFA), Finnish (langFI), French (langFR), Hungarian (langHU), Italian (langIT), Japanese (langJA), and Korean (langKO). This allows users to display chart labels and interface elements in these languages.

src/i18n · high confidence

Added release communication templates

New email templates have been added to the build system to standardize release communications. The \announce-release.tpl\ template provides a structured announcement for the dev mailing list, including download links and release notes. The \vote-release.tpl\ template facilitates the release candidate voting process by including the candidate location, GPG key, commit hash, and NPM installation instructions. Additionally, the \vote-result.tpl\ template is provided to announce the outcome of the vote, listing binding and community votes.

build/source-release/template · high confidence

Automated generation of release communication materials

A new build script (build/source-release/prepareReleaseMaterials.js) has been added to automate the creation of release artifacts. When executed with a release candidate version and commit hash, it generates vote, vote-result, and announcement text files using provided templates, and fetches the release notes from the GitHub repository API to include in a RELEASE\_NOTE.txt file.

build/source-release · high confidence

Bar chart series refactored into TypeScript with new state and layout capabilities

The bar chart implementation in \src/chart/bar\ has been rewritten in TypeScript, introducing a new state management system that supports emphasis, blur, and focus interactions (including \focus: 'all series'\ and coordinate-system-level blur). The \BarSeriesModel\ and \BarView\ now handle both Cartesian and Polar coordinate systems, adding support for polar bar labels with rotation and round caps. A new \showBackground\ option allows rendering a styled background behind bars, and \realtimeSort\ enables dynamic sorting of bars. The \PictorialBarSeries\ has been updated to use the new state system, disabling hover scale by default and supporting symbol repetition and clipping. Layout logic has been unified to prevent overflow on value and log axes, and progressive rendering is now supported for large datasets.

src/chart/bar · high confidence

Boxplot chart series implementation

The boxplot chart type is now available, allowing users to visualize statistical distributions with quartiles, whiskers, and outliers. This change introduces the core series model, view, and layout logic, including support for configurable box widths, clipping, and emphasis states. It also provides a data transform to automatically compute boxplot statistics from raw data arrays and handles axis statistics for proper rendering.

src/chart/boxplot · high confidence

Custom series can now be registered and rendered dynamically

The custom chart module now supports registering custom series renderers at runtime via a new \registerCustomSeries\ API, allowing users to define and inject their own rendering logic without modifying library source code. This capability is implemented through a dedicated registration module (\customSeriesRegister.ts\) that stores and retrieves render functions by type, and is wired into the library's extension system via a new \install.ts\ entry point that registers the \CustomSeries\ model and \CustomView\ with the ECharts extension registry.

src/chart/custom · high confidence

DataTool extension rewritten in TypeScript with GEXF and Boxplot support

The dataTool extension source has been migrated from JavaScript to TypeScript, introducing stricter linting rules and type safety. This update adds a new GEXF parser (gexf.ts) for importing graph exchange format data and a boxplot data preparation utility (prepareBoxplotData.ts) that calculates quartiles, outliers, and box ranges from raw numerical datasets. The extension entry point (index.ts) now exports these capabilities under the echarts.dataTool namespace, maintaining backward compatibility while providing new data transformation tools for users.

extension-src/dataTool · high confidence

DataZoom component migrated to TypeScript

The dataZoom component files (AxisProxy, DataZoomModel, SliderZoomModel, InsideZoomModel, SelectZoomModel, and their corresponding Views) have been converted from JavaScript to TypeScript. This migration introduces strict type definitions for component options, model properties, and internal logic, improving code reliability and developer experience without changing the user-facing behavior.

src/component/dataZoom · high confidence

Geo component now supports selection states, focus/blur effects, and roaming actions

The geo component now supports interactive selection via new actions (geoToggleSelect, geoSelect, geoUnSelect) and emits a geoselectchanged event with details of all selected regions. It also enables component-level focus and blur effects (emphasis.focus) and hover linking across regions with the same name. Additionally, the geoRoam action is registered to handle pan and zoom updates, ensuring visual alignment during roaming animations.

src/component/geo · high confidence

Grid component becomes installable via extension API

The grid component in src/component/grid is now structured as an installable extension. New install.ts and installSimple.ts files register the grid view, model, coordinate system, and axis views with the ECharts extension system, and include a preprocessor that automatically creates a default grid when x and y axes are defined but no grid is explicitly specified.

src/component/grid · high confidence

Heatmap series now supports matrix and calendar coordinate systems

The heatmap chart type has been extended to render on matrix and calendar coordinate systems in addition to the existing cartesian2d and geo systems. This allows users to visualize data using the matrix layout (including support for matrix-specific options like corner and body content) and calendar layouts, enabling heatmaps to be integrated into more complex dashboard layouts and time-based visualizations.

src/chart/heatmap · high confidence

Introduce Chord diagram series

Adds a new Chord diagram series type, enabling users to visualize relationships and flows between entities using interconnected nodes and edges. This feature includes a circular layout engine that calculates node positions and edge paths based on configurable parameters such as start/end angles, clockwise direction, padding, and minimum angle. The implementation supports node and edge labels, tooltips, legend integration, and interactive focus states (highlighting connected nodes/edges on hover). Visual customization is available through item styles, line styles, and gradient coloring for edges.

src/chart/chord · high confidence

Introduce Matrix component for tabular data visualization

Adds a new Matrix component that renders tabular data as a grid of cells with configurable borders, labels, and background styles. The implementation includes a coordinate system and view layer that supports dimension cells (headers), body cells, and corner cells, with event triggering configurable via \matrix.triggerEvent\ and silent settings. Users can now visualize structured data in a matrix layout with support for cell styling, text formatting, and basic interaction events.

src/component/matrix · high confidence

Introduce Matrix coordinate system for tabular and periodic-table visualizations

This change adds a new \matrix\ coordinate system (src/coord/matrix) that enables rendering tabular data, heatmaps, and periodic tables. It provides a structured layout with configurable x/y dimensions (including hierarchical levels), body cells, and corner cells. Users can define cell merging, specify cell sizes, and access matrix coordinates via \dataToPoint\ and \dataToLayout\. The implementation supports declarative layout integration with other ECharts components and exposes APIs for custom series to interact with the matrix grid.

src/coord/matrix · high confidence

Introduce SSR client hydration and event handling

The ssr/client module now provides a \hydrate\ function that attaches event listeners (mouseover, mouseout, click) to SVG elements rendered by the server. This allows the client to process SSR-generated charts by reading metadata attributes (such as series and data indices) and triggering corresponding callbacks defined in \ECSSRClientOptions\. An ESLint configuration has also been added to enforce code quality for this new client-side code.

ssr/client · high confidence

Introduce data transform components for filtering and sorting series data

This change adds new installable data transform components (\filterTransform\ and \sortTransform\) to the \src/component/transform\ module, registered via \install.ts\. The filter transform allows users to apply conditional expressions to upstream data, while the sort transform enables sorting data by one or more dimensions with configurable order (asc/desc), parsers (e.g., for suffixes like '%' or 'px'), and handling of incomparable values. These transforms are designed to work with the data transform pipeline, ensuring that detected dimensions are correctly propagated to downstream series, particularly when using \seriesLayoutBy: 'row'\. The implementation includes robust error handling for missing dimensions, invalid configurations, and unsupported source formats.

src/component/transform · high confidence

Introduce extensible label layout system with lifecycle registration

The label positioning and overlap-resolution logic has been refactored into a modular, extensible system. A new \LabelManager\ now coordinates label geometry, layout options, and overlap handling, while a dedicated \installLabelLayout\ extension registers lifecycle hooks (\series:beforeupdate\, \series:layoutlabels\) to trigger layout updates. This change enables custom layout strategies and improves the reliability of label positioning across series types.

src/label · high confidence

Introduce graphic component for custom SVG-like elements

Adds a new \graphic\ component that allows users to render custom vector graphics (such as groups, paths, images, and text) directly onto the chart canvas. This feature supports element positioning via layout parameters (left/right/top/bottom), hierarchical nesting through parent-child relationships, and visual transitions (enter/update/leave) as well as keyframe animations. It also includes support for clipping paths, tooltips on individual elements, and flexible option merging via \setOption\.

src/component/graphic · high confidence

Introduce modular installation for the polar coordinate system component

A new install module has been added for the polar coordinate system, enabling it to be loaded and registered independently. This file registers the polar coordinate system, its associated angle and radius axes (including their models and views), the polar axis pointer, and the necessary layout handlers for bar series within polar coordinates. This change supports a modular architecture where components can be installed selectively rather than being bundled together.

src/component/polar · high confidence

Introduce universal transition and keyframe animation capabilities

This change introduces a new universal transition system that enables smooth morphing animations between different chart series and data items, supporting features like multi-level drill-down, shape division (splitting one shape into many or merging many into one), and style transitions. It also adds a new keyframe-based animation engine for custom series and graphic components, allowing for more complex, multi-step animations. These new animation modules replace older, series-specific transition logic, providing a unified and more flexible way to animate data updates, enters, and leaves across the visualization.

src/animation · high confidence

Introduction of a dark theme for visualizations

A new dark theme has been added to the library, defined in the new \src/theme/dark.ts\ file. This theme provides a complete set of color tokens and style configurations for various chart components, including axes, legends, toolboxes, tooltips, data zoom controls, visual maps, timelines, and calendars, ensuring consistent dark-mode rendering across the visualization suite.

src/theme · high confidence

Introduction of axis break (zigzag) support for Cartesian and Single axes

This change introduces the ability to break axes (displaying a zigzag discontinuity) for Cartesian and Single axes, allowing charts to omit specific data ranges without distorting the scale. The implementation includes new view components (\CartesianAxisView\, \SingleAxisView\) and a dedicated \AxisBuilder\ to handle the rendering of axis elements, ticks, and labels. It also adds action handlers (\expandAxisBreak\, \collapseAxisBreak\, \toggleAxisBreak\) and events (\axisbreakchanged\) to allow users to programmatically expand or collapse break areas at runtime.

src/component/axis · high confidence

Introduction of the Line chart series

This change introduces the Line chart series to the library, providing the core model, view, and supporting utilities required to render line and area charts. Users can now create line visualizations using the \type: 'line'\ series configuration, which supports Cartesian and Polar coordinate systems, smooth curves, step lines, and area fills. The implementation includes specific features such as end-labels with value animation, configurable emphasis states (including a 'bolder' line style), and event handling for both the line path and the area fill. It also handles data operations like null-point connection, stacking, and visual coding for legend integration.

src/chart/line, src/chart/tree · high confidence

Lines series implementation migrated to TypeScript

The lines chart series has been rewritten in TypeScript (LinesSeries.ts, LinesView.ts, linesLayout.ts, linesVisual.ts, install.ts). This migration introduces stricter type definitions for series options and data, adds a compatibility layer for legacy coordinate data formats, and integrates the series with the new tooltip markup system. Users benefit from improved type safety in IDEs and more robust handling of coordinate systems, including better error reporting when a coordinate system is missing.

src/chart/lines · high confidence

Loading indicator now supports custom font styling

The default loading indicator implementation has been updated to accept and apply specific font properties, allowing users to customize the appearance of the loading text. The new implementation in src/loading/default.ts explicitly supports the fontFamily, fontWeight, and fontStyle options, defaulting to 'sans-serif', 'normal', and 'normal' respectively, ensuring the text renders with the intended style rather than relying on browser defaults.

src/loading · high confidence

Map series now supports multiple overlapping series with configurable value aggregation

The map chart now allows multiple map series to share the same geographic region, enabling users to layer different datasets on a single map. When multiple series target the same map, their values are aggregated using a configurable strategy (sum, average, min, or max) defined by the new \mapValueCalculation\ option, ensuring consistent visual encoding across layers. Additionally, the \showLegendSymbol\ option lets each series independently control whether a legend icon is rendered for its data points, providing finer control over the legend display when multiple series overlap.

src/chart/map · high confidence

New Arabic, Czech, German, Greek, English, and Spanish locale files added

The i18n directory now includes new locale definition files for Arabic (AR), Czech (CS), German (DE), Greek (EL), English (EN), and Spanish (ES). Each language is provided in two formats: a plain object file (e.g., langAR-obj.js) and a registered module file (e.g., langAR.js) that registers the locale with the ECharts instance. These files provide translations for time formats (months, days), legend selectors, toolbox actions (brush, data view, zoom, magic type, restore, save as image), series type names, and ARIA accessibility descriptions, enabling users to display chart interfaces in these languages.

i18n · high confidence

New Baidu Map (BMap) extension for geographic visualizations

The distribution now includes a new BMap extension (dist/extension/bmap.js) that integrates ECharts with the Baidu Maps JavaScript API. This adds a dedicated 'bmap' coordinate system, allowing users to render series on interactive Baidu maps with support for centering, zooming, roaming (dragging and scrolling), and custom map styles (both v2 and v3). The extension handles the conversion between map coordinates and pixel positions, registers a 'bmapRoam' action to sync map movements with the chart state, and exposes a version identifier (1.0.0). A corresponding minified build (bmap.min.js) and source map are also provided.

dist/extension · high confidence

New ECharts theme files added

The theme directory now includes new JavaScript files for several visual themes, including azul, bee-inspired, blue, caravan, carp, cool, dark-blue, dark-bold, dark-digerati, dark-fresh-cut, dark-mushroom, dark, and eduardo. These files define specific color palettes and styling configurations for chart components such as titles, tooltips, axes, and data visualizations, allowing users to apply these distinct looks to their ECharts instances.

theme · high confidence

New ESM entry-point files for modular imports

The build output now includes new JavaScript and TypeScript declaration files (e.g., charts.js, components.js, core.js) in the build/template directory. These files serve as entry points that re-export specific modules from the library, enabling users to import only the parts they need (such as charts, components, or renderers) rather than the entire bundle. This change supports tree-shaking and partial imports, allowing for smaller bundle sizes and more efficient usage of the library in modern JavaScript environments.

build/template · high confidence

New extension helper APIs for data, graphics, and utilities

The \src/export/api\ module now exposes a set of helper functions and classes to simplify the development of ECharts extensions. This includes \createList\ and \createScale\ for managing series data and axis scales, \createTextStyle\ for label styling, and re-exports of core utilities from ZRender and ECharts internals (such as graphic primitives, number formatting, time parsing, and array/object helpers). Extension developers can now import these standardized helpers to build custom series, components, or layouts more easily.

src/export/api · high confidence

New helper modules for map, geo, and brush interactions

This change introduces a set of new helper modules in \src/component/helper\ to support map and geo rendering, roaming, and brushing. \MapDraw\ handles the drawing of map regions and SVG elements, while \RoamController\ and \roamHelper\ manage zoom and pan interactions with cursor hints. \BrushController\, \BrushTargetManager\, and \brushHelper\ provide the core logic for selecting data areas, and \thumbnailBridge\ connects these interactions to the thumbnail component. \cursorHelper\ and \interactionMutex\ manage event precedence and cursor states to prevent conflicts between overlapping components.

src/component/helper · high confidence

New line and symbol drawing helpers for the charting library

This change introduces a suite of new helper classes in the chart helper module to manage the rendering of line and symbol series. It adds \EffectLine\ and \EffectPolyline\ to handle animated effect symbols that travel along line paths, supporting features like round-trip movement and constant speed. It also introduces \LargeLineDraw\ and \LargeSymbolDraw\ to optimize the rendering of large datasets by batching geometry and using incremental drawing strategies. The core drawing logic is refactored into \LineDraw\, \Line\, \LinePath\, \Polyline\, \SymbolDraw\, and \Symbol\ to provide a unified, state-aware interface for creating and updating line and symbol graphics, including support for emphasis states, labels, and visual updates.

src/chart/helper · high confidence

New modular entry points and extension system

The library now provides distinct entry points to control bundle size and functionality: \echarts.all.ts\ includes all charts, components, and features; \echarts.common.ts\ includes a standard set of charts and components; \echarts.simple.ts\ is limited to basic charts (line, bar, pie) and the canvas renderer; and \echarts.ts\ serves as the core with only the canvas renderer and dataset component. This is enabled by a new \extension.ts\ module that manages component registration via a \use()\ API, allowing for selective loading and partial imports.

src · high confidence

New modular export structure for partial imports

The library introduces a new set of entry points in the \src/export\ directory (\all.ts\, \api.ts\, \charts.ts\, \components.ts\, \core.ts\, \features.ts\, \option.ts\, \renderers.ts\) to support granular, tree-shakeable imports. This allows users to import specific chart types (e.g., \LineChart\, \BarChart\), components (e.g., \GridComponent\, \LegendComponent\), and features (e.g., \UniversalTransition\, \AxisBreak\) individually, rather than loading the entire library. The structure separates core APIs, option types, and renderer installations to optimize bundle size for partial usage.

src/export · high confidence

New utility modules for event processing, animation, and class management

The \src/util\ directory now includes several new TypeScript modules that provide core infrastructure for the library. \ECEventProcessor\ introduces a new event filtering system that allows users to bind event listeners to specific components (by type, index, name, or ID) and data points (by index or type) using a normalized query object. \animation.ts\ adds an \AnimationWrap\ utility that enables grouping multiple element animations into a single batch with a shared completion callback. \clazz.ts\ provides utilities for class extension and instance checking, supporting both native ES6 class inheritance and legacy prototype-based patterns. \KDTree.ts\ implements a K-Dimensional Tree data structure for efficient nearest-neighbor point searches, and \component.ts\ adds utilities for generating unique IDs and managing component sub-type defaults.

src/util · high confidence

Parallel component now supports installable module registration

The parallel component has been refactored to support modular installation. A new \install.ts\ entry point registers the parallel coordinate system, models, views, and axis actions with the extension registry, while \ParallelView.ts\ implements the interactive axis expansion logic with throttled event handling. This allows the parallel feature to be loaded on-demand rather than being bundled by default.

src/component/parallel · high confidence

Parallel series now supports active/inactive opacity states

The parallel chart series now visually distinguishes between active and inactive data lines using configurable opacity levels. Users can control the appearance of lines when they are highlighted or selected via the new \activeOpacity\ and \inactiveOpacity\ options (defaulting to 1 and 0.05 respectively), while the standard line opacity is controlled by \lineStyle.opacity\. This change is implemented through new TypeScript definitions for the series model and view, along with a visual stage handler that applies the correct opacity based on the series' active state.

src/chart/parallel · high confidence

Radar coordinate system refactored to TypeScript with clockwise support

The radar coordinate system implementation has been rewritten in TypeScript, introducing a dedicated \IndicatorAxis\ class to manage individual indicator axes and updating \RadarModel\ to use \AxisModelCommonMixin\ for consistent axis behavior. This change adds support for the \clockwise\ option, allowing radar charts to render indicators in clockwise order, and improves type safety and maintainability across the radar component.

src/coord/radar · high confidence

Repository initialization with Apache ECharts project structure and configuration

The repository is initialized with the core structure and configuration files for Apache ECharts, including the \.asf.yaml\ file for GitHub integration and notifications, ESLint configurations (\.eslintrc-common.yaml\, \.eslintrc-common-production.yaml\) enforcing code style and restricting certain JavaScript APIs, and standard project files like \.editorconfig\, \.gitignore\, \.npmignore\, and \.gitattributes\. It also includes essential documentation such as \CONTRIBUTING.md\, \AGENTS.md\, \LICENSE\, \NOTICE\, and \KEYS\ for code signing, establishing the project as an Apache Software Foundation top-level project.

(repo-wide) · high confidence

Sankey chart implementation added

The Sankey chart type is now available, providing a dedicated series for visualizing flow data. This release introduces the core model and view components, along with layout and visual stage handlers, enabling users to define nodes and edges, customize node widths and gaps, and apply color mappings based on node values. The implementation supports horizontal and vertical orientations, draggable nodes, and basic interaction states.

src/chart/sankey · high confidence

Single axis component becomes installable via extension API

Users can now explicitly install the single-axis feature using the extension registration API. A new \install.ts\ module has been added to \src/component/singleAxis\ that registers the single-axis view, model, coordinate system, and associated pointer classes, allowing the component to be loaded on demand rather than being bundled by default.

src/component/singleAxis · high confidence

Sunburst chart support for corner radius and relative emphasis focus

The Sunburst series now supports configurable corner radius for its sectors, allowing users to define inner and outer corner radii via the \itemStyle.borderRadius\ option to create softer, rounded visuals. Additionally, the \emphasis.focus\ state has been expanded to support 'relative', 'ancestor', and 'descendant' values, enabling users to highlight not just the hovered sector but also its related tree nodes, while the root node label is now centered when the sector spans a full circle.

src/chart/sunburst · high confidence

Timeline component rewritten in TypeScript with new slider view and control options

The timeline component has been completely rewritten in TypeScript, introducing a new \SliderTimelineView\ that renders a slider-style control with play, stop, previous, and next buttons. Users can now configure the slider's appearance via \controlStyle\ (position, icon size, colors), \checkpointStyle\ (current item appearance), and \progress\ (progress line and item styles). The component supports \axisType\ ('category', 'time', 'value') and includes a preprocessor for backward compatibility with ECharts v2 options. A new \replaceMerge\ option allows controlling whether timeline data replaces or merges with previous data on update. The component also triggers a \timelinePlayChange\ event when playback reaches the end.

src/component/timeline · high confidence

Treemap series rewritten in TypeScript with enhanced state and breadcrumb features

The treemap chart implementation has been fully migrated to TypeScript, introducing stricter type definitions for series options and data parameters. This update adds new emphasis states for the breadcrumb component, allowing users to customize hover effects on navigation items. It also introduces \ancestor\ and \descendant\ focus capabilities, enabling users to highlight related nodes in the hierarchy when hovering over a specific item. Additionally, the series now supports custom cursor properties for better visual feedback during interaction.

src/chart/treemap · high confidence

Architecture

AxisPointer component refactored into modular TypeScript architecture

The axisPointer component has been restructured into a modular TypeScript architecture, introducing distinct Model, View, and base pointer classes (Cartesian, Polar, Single) to improve maintainability and type safety. This change standardizes the component's internal logic, including global event handling and axis linking, while preserving existing user-facing features like line, shadow, and cross pointer types.

src/component/axisPointer · high confidence

Chart modules refactored into installable components

All chart implementations (bar, boxplot, candlestick, chord, custom, effectScatter, funnel, gauge, graph, heatmap, line, lines, map, parallel, pictorialBar, pie, radar, sankey, scatter, sunburst, themeRiver, tree, and treemap) have been refactored to use a unified extension-based registration pattern. Each chart now exports a dedicated \install\ function that is registered via the \use\ API, making individual chart components installable and decoupling their initialization logic.

src/chart · high confidence

Introduction of a new core module architecture with lifecycle and scheduling

The \src/core\ directory has been restructured to introduce a new internal architecture for ECharts. This change adds a \Scheduler\ to manage the rendering pipeline, a \lifecycle\ module to expose events like \series:transition\ and \afterupdate\, and an \ExtensionAPI\ to standardize the interface between core logic and views. It also includes a \CoordinateSystem\ manager to handle layout dependencies (such as matrix/calendar-based layouts) and a \task\ system for incremental data processing. These files provide the foundational wiring and state management that enable the new update lifecycle and transition features.

src/core · high confidence

Migrate model layer to TypeScript

The core model classes (Component, Global, Model, OptionManager, Series) and their supporting utilities have been rewritten in TypeScript. This introduces strict type definitions for options, models, and coordinate system references, improving code safety and developer experience when configuring charts or extending the library.

src/model · high confidence

Radar component refactored into installable TypeScript modules

The radar component implementation has been migrated from JavaScript to TypeScript and restructured into installable modules. This change introduces a dedicated \RadarView\ class that handles the rendering of radar axes, split lines, and split areas for both polygon and circle shapes, alongside a new \install.ts\ entry point that registers the radar coordinate system, component model, view, and visual logic with the extension registry. Users benefit from improved type safety and a modular architecture that allows the radar component to be installed independently.

src/component/radar · high confidence

Refactored coordinate system infrastructure with TypeScript migration

The coordinate system module has been rewritten in TypeScript, introducing a unified \Axis\ base class and a \CoordinateSystem\ interface to standardize how axes and coordinate systems (like Cartesian, Polar, and Geo) are managed. This change replaces the previous scattered implementation with a more consistent architecture, including new utilities for axis tick/label calculation (\axisTickLabelBuilder\), band width computation (\axisBand\), and tick alignment (\axisAlignTicks\). For users, this provides a more robust foundation for features like axis breaking, aligned ticks, and precise layout calculations, while ensuring better type safety and maintainability for the underlying rendering engine.

src/coord · high confidence

Title component refactored for modular installation and token-based theming

The title component has been restructured to support modular installation via a new dedicated install module, aligning with the broader shift to make components installable. Additionally, the component's default styling has been updated to use design tokens (such as colors and spacing) instead of hardcoded values, ensuring consistent theming across the library.

src/component/title · high confidence

Behavioural changes

Added D3.js license file

The repository now includes the LICENSE-d3 file, which contains the copyright and redistribution terms for the D3.js library (Copyright 2010-2016 Mike Bostock). This ensures compliance with the licensing requirements for this third-party dependency.

licenses · high confidence

Added geographic coordinate fixes for specific map regions

New TypeScript modules have been added to the \src/coord/geo/fix\ directory to correct geographic positioning for specific map types. These include \diaoyuIsland.ts\ to append the Diaoyu Islands geometry to the Taiwan region on China maps, \nanhai.ts\ to add the South China Sea Islands region to China maps, \geoCoord.ts\ to set center coordinates for Russia and the United States on world maps, and \textCoord.ts\ to adjust label offsets for regions like Guangdong, Hong Kong, Macau, and Tianjin on China maps.

src/coord/geo/fix · high confidence

Aria component now supports explicit installation and legacy option migration

The Aria component is now installable via a dedicated entry point that registers the aria preprocessor and visual stage handler. The preprocessor automatically migrates legacy configuration: it maps the deprecated 'aria.show' property to 'aria.enabled' and moves top-level 'description', 'general', 'series', and 'data' properties under 'aria.label' to match the current option structure.

src/component/aria · high confidence

Backward compatibility for deprecated ECharts 2/3 style configurations

The preprocessor now automatically migrates legacy style options from ECharts 2 and 3 to the current structure. Specifically, it flattens \itemStyle.normal\ and \itemStyle.emphasis\ into direct properties (e.g., \areaStyle\, \lineStyle\) and removes the deprecated \normal\/\emphasis\ hierarchy within styles like \label\ and \labelLine\. It also handles the migration of \textStyle\ properties from nested objects to the parent level. These changes ensure that charts configured with older style syntax continue to render correctly, with deprecation warnings logged in development mode.

src/preprocessor/helper · high confidence

Backward compatibility layer for deprecated chart configuration options

A new backward compatibility module in the preprocessor automatically maps deprecated configuration properties to their current equivalents, ensuring older chart options continue to work. This includes mapping layout coordinates (x/y to left/top), bar chart item style properties (barBorderRadius, barBorderColor, barBorderWidth) to standard itemStyle fields, pie chart label margins to edgeDistance, and sunburst state controls (downplay to blur). It also normalizes graph/sankey focus settings (focusNodeAdjacency to emphasis.focus) and line chart overflow clipping (clipOverflow to clip). In development mode, the system logs deprecation warnings to guide users toward the new API.

src/preprocessor · high confidence

Baidu Map extension rewritten in TypeScript

The Baidu Map (bmap) extension source code has been migrated from JavaScript to TypeScript. This change introduces strict type definitions for the BMap library, improves code maintainability, and adds ESLint rules to enforce modern JavaScript standards (such as replacing \var\ with \let\/\const\). The extension's functionality, including coordinate system registration, model/view components, and roaming actions, remains the same but is now type-safe.

extension-src/bmap · high confidence

Brush component rewritten in TypeScript with token-based theming

The brush component (src/component/brush) has been fully rewritten in TypeScript, introducing new model and view classes (BrushModel, BrushView) and a dedicated preprocessor to manage toolbox integration. The default brush styling now uses design tokens (tokens.color.backgroundTint, tokens.color.borderTint) instead of hardcoded values, allowing for consistent theme updates. The implementation also includes a new selector module for precise area selection logic and a visual encoding stage handler that manages 'inBrush' and 'outOfBrush' visual states with configurable throttling.

src/component/brush · high confidence

Build tooling overhaul with new scripts and license enforcement

The build system has been restructured with a suite of new scripts in the build directory. A new \build-i18n.js\ script handles the generation of internationalization bundles, while \build-lib.js\ and \build.js\ manage the library and distribution builds respectively. The release process now includes automated license header management via \addHeader.js\ and \checkHeader.js\, ensuring all source files comply with the Apache 2.0 license. Additionally, a new \dev-fast.js\ script utilizes esbuild for faster development builds, and \testDts.js\ has been added to validate TypeScript definitions across multiple versions.

build · high confidence

Calendar component rewritten in TypeScript with improved i18n and layout fixes

The calendar component source files have been migrated from JavaScript to TypeScript, introducing strict type definitions for the model, view, and coordinate system. This update resolves internationalization issues within the calendar coordinate system and fixes day label drifting, ensuring labels render correctly. Additionally, the component now supports a \silent\ option for day, month, and year labels to suppress interaction events, and improves locale handling by using \dayOfWeekAbbr\ as a fallback when \dayOfWeekShort\ is unavailable.

src/component/calendar · high confidence

Calendar coordinate system rewritten in TypeScript with improved i18n and layout support

The calendar coordinate system implementation in \src/coord/calendar\ has been rewritten in TypeScript (replacing the previous JavaScript files). This change fixes internationalization (i18n) issues where day-of-week abbreviations were not displaying correctly by ensuring the system uses the capitalized \dayOfWeekAbbr\ when \dayOfWeekShort\ is unavailable, and allows \nameMap\ to accept any registered locale name. Additionally, the calendar now supports box layout mode, allowing it to be declaratively positioned alongside other components like grids and legends, and fixes a bug where scatter plots on the calendar could exceed the visible range.

src/coord/calendar · high confidence

Cartesian grid layout now uses outerBounds for precise axis label and name containment

The grid layout engine has been refactored to replace the legacy \grid.containLabel\ option with a more precise and flexible system based on \grid.outerBounds\ and \grid.outerBoundsContain\. This change allows the grid to automatically shrink its layout to prevent axis labels and axis names from overflowing the defined bounds, while also supporting axis line alignment across multiple grids. The previous \containLabel\ option is now deprecated in favor of \outerBoundsMode\ and \outerBoundsContain\, which offer granular control over whether to contain only axis labels or both labels and names. This ensures that charts with long axis labels or names are displayed correctly without manual margin adjustments.

src/coord/cartesian · high confidence

Component entry points migrated to TypeScript

All component entry files in \src/component\ (including aria, axisPointer, brush, calendar, dataZoom variants, dataset, geo, graphic, grid variants, legend variants, marker components, matrix, parallel, polar, radar, singleAxis, thumbnail, timeline, title, toolbox, tooltip, transform, and visualMap variants) have been converted from JavaScript to TypeScript. These files now serve as TypeScript entry points that register their respective install modules via the extension system, ensuring type safety and consistent module loading for the library's components.

src/component · high confidence

EffectScatter series gains configurable ripple count and clipping support

The EffectScatter series now allows users to configure the number of ripples via the \rippleEffect.number\ option (previously hardcoded to 3), resolving issue \#15252. Additionally, the series now supports a \clip\ option (defaulting to true) to control whether the effect is clipped to the coordinate system area, and the internal configuration key for ripple count has been renamed from \count\ to \number\ for consistency.

src/chart/effectScatter · high confidence

Enforce linting and type checking on commits

A pre-commit hook has been added to the project to automatically run linting and type checking before each commit. This ensures that code quality and type safety standards are maintained by preventing commits that fail these checks.

.husky · high confidence

Funnel chart series rewritten in TypeScript with enhanced state and label support

The Funnel chart implementation has been migrated from JavaScript to TypeScript, introducing stricter type definitions for series options and data parameters. This update adds new emphasis states (including disabled and focus) and expands label positioning options to include inner, center, and corner positions (rightTop, rightBottom, leftTop, leftBottom). The visual rendering now uses a token-based color system for item borders and supports more granular control over label lines and styles, improving both developer experience and chart configurability.

src/chart/funnel · high confidence

Gauge chart implementation migrated to TypeScript

The gauge chart source files (GaugeSeries.ts, GaugeView.ts, PointerPath.ts, install.ts) have been converted from JavaScript to TypeScript. This migration introduces strict type definitions for the gauge series options, data items, and rendering logic, improving type safety and developer experience for users integrating the gauge chart into TypeScript projects.

src/chart/gauge · high confidence

Geo component refactored to support SVG maps and custom projections

The geo coordinate system has been restructured to support both GeoJSON and SVG map sources, introducing dedicated resource classes (GeoJSONResource, GeoSVGResource) and a unified Region base class. This change enables users to load SVG maps alongside GeoJSON, supports custom projection definitions via the \projection\ option, and improves layout handling with box-based positioning (layoutCenter, layoutSize) and aspect ratio preservation. The refactoring also adds support for named SVG elements as regions, enhances roaming behavior, and fixes several coordinate calculation and projection bugs.

src/coord/geo · high confidence

Graph series migrated to TypeScript with enhanced layout and interaction capabilities

The graph chart series has been rewritten in TypeScript, introducing stricter type definitions for options and data structures. This update brings significant behavioral improvements to graph layouts: the circular layout now supports dragging nodes to reposition them, and the force layout correctly stops its iteration timer upon chart disposal to prevent memory leaks. Additionally, edge rendering has been refined to accurately adjust contact points with nodes, and the series now supports draggable nodes across all layout modes (none, circular, and force).

src/chart/graph · high confidence

Legend component refactored into modular TypeScript architecture with enhanced styling and state support

The legend component has been completely rewritten in TypeScript and split into distinct, installable modules (plain and scrollable) to improve maintainability and reduce package size. This change introduces a new model-view structure with dedicated files for models (LegendModel, ScrollableLegendModel) and views (LegendView, ScrollableLegendView), alongside separate action and filter handlers. Users benefit from improved legend styling capabilities, including support for inactive state colors, symbol rotation, and decal icons, as well as more robust state management for selection and hover interactions. The scrollable legend now features configurable page buttons and animation, while the core legend logic ensures better isolation between multiple legend components and fixes previous issues with selection synchronization and text overflow.

src/component/legend · high confidence

Marker components rewritten in TypeScript with enhanced symbol and state options

The marker components (markLine, markPoint, markArea) have been rewritten in TypeScript, introducing new configuration options for better control and visual consistency. Users can now specify \symbolRotate\ and \symbolOffset\ as arrays to define distinct values for the start and end points of a markLine, and \symbolKeepAspect\ is available on markPoint to preserve symbol proportions. Additionally, \z2\ is supported on all marker types to allow precise layering control, and \relativeTo\ enables markPoint positioning relative to the coordinate system area. The implementation also adds support for callback functions for symbol properties and ensures markers correctly handle time axes and stacked data dimensions.

src/component/marker · high confidence

New ESLint rule to restrict uncertain polyfill usage

A new custom ESLint plugin (\eslint-plugin-ec\) has been introduced, featuring a rule named \no-props-polyfill-uncertain\. This rule prevents the direct use of specific built-in methods (such as \Array.prototype.map\ or \Object.assign\) when their polyfill status is uncertain or potentially problematic, helping to enforce stricter type safety and code consistency in the project.

build/eslint · high confidence

New TypeScript view base classes with enhanced state and highlighting support

The view layer introduces new TypeScript base classes, ChartView and ComponentView, which replace the previous JavaScript implementations. These classes provide a structured foundation for chart and component rendering, including built-in support for progressive rendering tasks and element traversal. A key behavioral addition is the enablement of component-level focus and blur states via the \emphasis.focus\ option, allowing elements within a component to blur when focused. Additionally, ComponentView now supports hover linking across multiple elements sharing the same name through the \findHighDownDispatchers\ interface, enabling coordinated highlighting even when elements lack a common ancestor.

src/view · high confidence

New data processing stage handlers for filtering, sampling, and stacking

The \src/processor\ module now includes dedicated TypeScript stage handlers for core data operations. \dataFilter\ handles legend-based visibility filtering, while \negativeDataFilter\ removes negative values from series data. \dataSample\ implements down-sampling strategies (including LTTB, min-max, and average/sum/max/min) to optimize performance on large datasets in cartesian2d coordinates. \dataStack\ manages stack calculations, supporting configurable stack orders and strategies (such as 'samesign', 'positive', 'negative', and 'all') to correctly handle positive and negative stacked values.

src/processor · high confidence

New style and data formatting mixins in src/model/mixin

This change introduces a set of new TypeScript mixins in the \src/model/mixin\ directory to standardize how chart options are mapped to rendering styles and how data is formatted. The \makeStyleMapper\ utility and its consumers (\areaStyle\, \itemStyle\, \lineStyle\, \textStyle\) now provide a consistent mechanism for extracting style properties (such as colors, shadows, and line dashes) from model options, while explicitly excluding \decal\ properties to prevent conflicts with zrender's pattern objects. Additionally, the \DataFormatMixin\ centralizes label and tooltip formatting logic, supporting dimension-specific label references (e.g., \@\[0\]\) and interpolated values for animations, and the \PaletteMixin\ manages color and decal palette assignment with scoped caching. These changes refactor the model layer to be more type-safe and maintainable, ensuring that style and data presentation logic is unified across series and components.

src/model/mixin · high confidence

Parallel coordinate system refactored to TypeScript with improved axis selection and layout

The parallel coordinate system implementation in \src/coord/parallel\ has been rewritten in TypeScript, introducing a new \ParallelAxisModel\ that manages active intervals and area selection styles, and a \Parallel\ coordinate system class that handles axis layout and scale updates. This change improves the reliability of axis selection interactions and ensures that axis extents are calculated correctly after series data is processed, while also supporting flexible box-based layout modes for the parallel component.

src/coord/parallel · high confidence

Pie chart series migrated to TypeScript with enhanced label layout and state management

The pie chart implementation in \src/chart/pie\ has been rewritten in TypeScript (PieSeries.ts, PieView.ts, pieLayout.ts, labelLayout.ts), introducing a more robust layout engine and refined visual states. Users benefit from improved label positioning logic that better handles overlap, rotation, and alignment to edges or label lines, as well as support for arbitrary corner radius on sectors via the \borderRadius\ option. The migration also brings stricter type definitions for series options and data parameters, and integrates a new state management system that standardizes emphasis, selection, and blur behaviors across the chart.

src/chart/pie · high confidence

Polar coordinate system rewritten in TypeScript with new axis models and options

The polar coordinate system implementation has been migrated to TypeScript and refactored to use dedicated \AngleAxis\ and \RadiusAxis\ classes with corresponding models. This change introduces the \startAngle\ and \endAngle\ options for the angle axis, allowing users to define the angular range of the polar chart. The refactoring also improves the stability of category axis tick intervals during zooming and ensures that the polar clip area correctly includes the center point for scatter series.

src/coord/polar · high confidence

Radar chart series and view rewritten in TypeScript with improved tooltip and state support

The radar chart implementation in src/chart/radar has been rewritten in TypeScript (RadarSeries.ts, RadarView.ts) to modernize the codebase and improve type safety. This change introduces a new tooltip layout system using the shared TooltipMarkup component, ensuring consistent formatting and sorting across series. It also adds support for series-level state management (emphasis, focus, blur) and improves the default visual appearance, such as using 'round' line joins and inheriting label colors. A backward compatibility layer (backwardCompat.ts) is included to migrate legacy 'polar' configurations to the new 'radar' coordinate system.

src/chart/radar · high confidence

Refactored bar and points layout logic into dedicated modules

The layout logic for bar series and point-based series has been reorganized into new, dedicated files (\src/layout/barCommon.ts\, \barGrid.ts\, \barPolar.ts\, and \points.ts\). This change extracts the coordinate calculation and layout assignment logic from the chart modules into a centralized layout layer, improving code maintainability and separation of concerns. Users benefit from more consistent layout behavior across Cartesian and Polar coordinate systems for bar charts, as well as optimized memory usage for large point datasets through the use of Float32Arrays in the points layout handler.

src/layout · high confidence

Refactored data storage and dimension handling for improved performance and correctness

The data helper module has been refactored to introduce a new \SeriesDataSchema\ class that manages dimension requirements and optimizes data storage sharing. This change improves performance by omitting unused dimensions in high-dimensional datasets and ensures correct data retrieval by index when dimensions are omitted. It also fixes several bugs related to data stacking, dimension inheritance, and the handling of \TypedArray\ data during \appendData\ operations, while migrating the helper files to TypeScript for better type safety.

src/data/helper · high confidence

Refactored data storage and series data management

The internal data handling in \src/data\ has been restructured to improve performance and correctness. The monolithic data list has been separated into distinct \DataStore\ (for raw value storage and typed arrays) and \SeriesData\ (for series-specific metadata and dimension mapping). A new \DataDiffer\ class now handles efficient array diffing with support for one-to-one and many-to-many update modes, replacing previous ad-hoc logic. Additionally, \Source\ parsing and \OrdinalMeta\ category tracking have been refactored to better handle dimension definitions, \seriesLayoutBy\ orientation, and duplicate category deduplication, ensuring that series sharing a dataset correctly align their data indices and dimensions.

src/data · high confidence

Refactored visual encoding to use a unified 'style' object

The visual encoding system has been restructured to consolidate separate properties like color and opacity into a single 'style' object, simplifying how visual attributes are managed and applied across series. This change introduces new stage handlers in the visual module (such as style.ts and decal.ts) to process these unified styles and decal patterns, ensuring that visual mappings and state animations are applied consistently. Users will benefit from more reliable visual state management and improved handling of complex visual properties like decal patterns and symbol offsets, which are now processed through a more streamlined pipeline.

src/visual · high confidence

Restored legacy pie/map selection events and un-deprecated getTextRect utility

This change restores backward compatibility for legacy pie and map chart interactions by re-introducing deprecated event names (such as \pieSelect\, \mapSelect\, and their unselect/toggle variants) and ensuring they trigger the corresponding modern actions. It also un-deprecated the \echarts.format.getTextRect\ API, making it available again for users who rely on calculating text bounding boxes, while maintaining deprecation warnings in development mode to encourage migration to current standards.

src/legacy · high confidence

Scatter series implementation migrated to TypeScript with jitter layout support

The scatter chart module has been rewritten in TypeScript (ScatterSeries.ts, ScatterView.ts) and restructured into installable components. This change introduces a dedicated jitter layout (jitterLayout.ts) that automatically offsets overlapping points on categorical axes to improve readability, and updates the series model to support progressive rendering and emphasis scaling. The scatter series now registers its own layout and view, ensuring it works correctly even if the grid component is not explicitly included.

src/chart/scatter · high confidence

Single axis coordinate system refactored into TypeScript

The single axis coordinate system implementation in \src/coord/single\ has been rewritten in TypeScript. This change introduces new type definitions for the axis model, axis instance, and coordinate system, and migrates the core logic (including layout, creation, and custom data preparation) to use strict typing. Users benefit from improved type safety and better IDE support when configuring single-axis charts, while the runtime behavior remains consistent with the previous JavaScript implementation.

src/coord/single · high confidence

Toolbox component rewritten in TypeScript with improved state and theme handling

The toolbox component has been refactored into TypeScript (ToolboxModel, ToolboxView, featureManager) to improve type safety and maintainability. This change introduces a more robust feature management system that correctly handles the \show\ option for custom toolbox buttons and fixes issues where emphasis states were not preserved when icons were selected. It also resolves bugs related to font styles not applying to toolbox text, icons being displayed incorrectly due to theme settings, and the toolbox title potentially rendering outside the chart boundaries. Additionally, the default emphasis color and tooltip behavior have been corrected to provide a more consistent user experience.

src/component/toolbox · high confidence

Toolbox features migrated to TypeScript

The toolbox feature implementations (Brush, DataZoom, DataView, MagicType, Restore, and SaveAsImage) have been converted from JavaScript to TypeScript. This migration introduces strict type definitions for feature options and models, improving code reliability and developer experience without changing the user-facing behavior of the toolbox features.

src/component/toolbox/feature · high confidence

Tooltip component refactored with new rendering modes and markup system

The tooltip component has been completely rewritten to support two distinct rendering backends: HTML (the default) and richText (canvas/SVG). This change introduces a new \renderMode\ option to select the backend, and a new \appendTo\ option to allow customizing the tooltip container element. A new \TooltipMarkup\ system standardizes how tooltip content is generated and sorted across series, while the \TooltipView\ now manages the lifecycle of the specific content renderer. The refactoring also adds a \displayTransition\ option to control the fade animation and improves positioning logic to handle transforms and confined views more robustly.

src/component/tooltip · high confidence

Updated ECharts distribution bundle

The \dist/echarts.common.js\ file has been rebuilt and updated, incorporating changes from the underlying \zrender\ library and ECharts source code. This update ensures the distributed bundle reflects the latest source changes, including environment detection logic and utility functions, providing users with the current stable version of the library.

dist · high confidence

VisualMap component refactored to TypeScript with new mapping and layout options

The visualMap component has been rewritten in TypeScript, introducing the \seriesTargets\ option to map specific dimensions to different series (replacing the less flexible \seriesIndex\), and adding the \unboundedRange\ option to disable the automatic expansion of continuous ranges when they touch the data min/max. The continuous visualMap now uses a more comprehensive label positioning implementation to prevent overlap, and the piecewise visualMap now supports \selectedMode\ as a boolean.

src/component/visualMap · high confidence

Fixes

Automated nightly build versioning and dependency synchronization

The nightly build process now automatically generates unique development version strings (e.g., \5.4.0-dev.20231027\) by appending the current date to the base version, ensuring each nightly release is distinct. Additionally, the post-build step synchronizes the ECharts core module's internal version and its \zrender\ dependency version with the actual versions defined in \package.json\ and the \zrender\ package, preventing version mismatches in the distributed nightly artifacts.

build/nightly · high confidence

Candlestick chart series rewritten in TypeScript with enhanced styling and layout support

The candlestick chart implementation has been migrated from JavaScript to TypeScript, introducing stricter type definitions and improved internal architecture. Users gain support for custom doji colors via the new \borderColorDoji\ option, allowing distinct styling when the open and close prices are equal. The series now supports a \cursor\ option for interactive pointer customization and respects the \clip\ setting to control whether candlesticks are clipped to the coordinate system area. Additionally, the migration includes a fix for horizontal candlesticks using the \encode\ configuration and ensures proper rendering of emphasis states and visual encoding for both normal and large-data progressive modes.

src/chart/candlestick · high confidence

Fix SSR client entry-point exports and type definitions

The SSR client entry points have been corrected to ensure proper module resolution and type exposure. The \index.js\ file now correctly re-exports from \./lib/index.js\, and the new \index.d.ts\ file redirects type definitions to \./types/index.js\, resolving issues with duplicated or missing type definitions in modern TypeScript environments.

build/template/ssr · high confidence

Refactored scale architecture with decorator pattern and axis break support

The scale system has been restructured to improve maintainability and fix precision bugs. The inheritance hierarchy was simplified by shifting LogScale and TimeScale to inherit directly from the base Scale class rather than IntervalScale, and complex override logic was replaced with a decorator pattern for numeric transformations. This change introduces support for axis breaks across all scale types (Interval, Log, Ordinal, Time) and fixes several issues, including incorrect rounding precision for extreme small numbers, LogScale precision errors, and incorrect rendering of null values on line graphs.

src/scale · high confidence

Test coverage

Add test infrastructure libraries and UI components; Added Node.js tests for SSR SVG rendering and large-scale scatter plots; Added TypeScript type tests for ECharts module systems; Added core test utilities and custom Jest matchers; Added map encoding/decoding utilities and test data; Added test data fixtures for chart options and geographic regions; Added test fixtures for ESM-to-CJS conversion and DEV-block removal; Added test infrastructure for build tooling and code transformation; Added unit tests for API methods; Added unit tests for BrushController and sliderMove helpers; Added unit tests for ECharts model system; Added unit tests for aria data exclusion, sparse dataset handling, and custom series rendering; Added unit tests for data handling components; Added unit tests for dataZoom helper functions; Added unit tests for interval scale tick generation; Added unit tests for matrix component event handling; Added unit tests for utility modules; Added unit tests for visualMap setOption behavior; Added visual regression test action recordings for chart components; Added visual regression test recorder UI; Added visual regression test runtime infrastructure; Expanded test coverage for chart components and interactions; New visual regression testing tool in test/runTest; Unit test suite migrated to TypeScript with new configuration; Visual Regression Testing Tool client interface added.

Dependencies

ECharts 6.1.0 release with ESM-first package configuration

This release updates the ECharts package to version 6.1.0, introducing a shift to an ESM-first module system. The main \package.json\ now declares \"type": "module"\ and uses the \exports\ field to define distinct entry points for ESM (\import\) and CommonJS (\require\) consumers, ensuring compatibility with modern bundlers and Node.js environments. The library now depends on \zrender\ version 6.1.0 and \tslib\ 2.3.0. Additionally, the build and test infrastructure has been updated, including the addition of an ESLint plugin (\@echarts-x/eslint-plugin-ec\) and the configuration of sub-packages (such as \dist\, \i18n\, \theme\, and \test\) as CommonJS modules to support specific build and testing requirements.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 27 → 44 (+16.9)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.16) — scores are not directly comparable.

Lenses

  • Code Health 70 → 60 (-10.6)
  • Architecture 34 (new)
  • Maturity 60 → 59 (-1.7)
  • Readiness 13 → 43 (+30.2)
  • Security 20 → 65 (+44.4)
  • Performance 60 (new)

Resolved (139)

  • Change coupling: SeriesData.ts ↔ SeriesDimensionDefine.ts (src/data/SeriesData.ts)
  • Critical CVE: [GHSA redacted] (package-lock.json)
  • Critical CVE: [GHSA redacted] (package-lock.json)
  • Critical CVE: [GHSA redacted] (test/runTest/package-lock.json)
  • Dimension evaluation failed
  • FileTooLong: option/graph.js (theme/tool/option/graph.js)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (test/runTest/package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (test/runTest/package-lock.json)
  • High CVE: [GHSA redacted] (test/runTest/package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (test/runTest/package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • …and 119 more

New (844)

  • Assertions commented out: large number (test/ut/spec/util/number.test.ts)
  • AxisBuilder.buildAxisLabel (cognitive 33) (src/component/axis/AxisBuilder.ts)
  • AxisBuilder.buildAxisLabel (cyclomatic 26) (src/component/axis/AxisBuilder.ts)
  • AxisBuilder.fixMinMaxLabelShow (cognitive 20) (src/component/axis/AxisBuilder.ts)
  • AxisBuilder.fixMinMaxLabelShow (cyclomatic 17) (src/component/axis/AxisBuilder.ts)
  • AxisProxy.calculateDataWindow (cognitive 23) (src/component/dataZoom/AxisProxy.ts)
  • AxisProxy.calculateDataWindow (cyclomatic 19) (src/component/dataZoom/AxisProxy.ts)
  • AxisProxy.filterData (cognitive 19) (src/component/dataZoom/AxisProxy.ts)
  • AxisProxy.filterData (cyclomatic 17) (src/component/dataZoom/AxisProxy.ts)
  • BarView._renderNormal (cognitive 56) (src/chart/bar/BarView.ts)
  • BarView._renderNormal (cyclomatic 43) (src/chart/bar/BarView.ts)
  • BarView.createBackgroundShape (cognitive 18) (src/chart/bar/BarView.ts)
  • BarView.updateStyle (cognitive 22) (src/chart/bar/BarView.ts)
  • BarView.updateStyle (cyclomatic 16) (src/chart/bar/BarView.ts)
  • BaseBarSeriesModel.getMarkerPosition (cognitive 55) (src/chart/bar/BaseBarSeries.ts)
  • BaseBarSeriesModel.getMarkerPosition (cyclomatic 23) (src/chart/bar/BaseBarSeries.ts)
  • Boundary-crossing change coupling: mapDataStatistic.ts ↔ geoCreator.ts (src/chart/map/mapDataStatistic.ts)
  • BrushController.updateCoverByMouse (cognitive 16) (src/component/helper/BrushController.ts)
  • Change coupling: BarSeries.ts ↔ FunnelSeries.ts (src/chart/bar/BarSeries.ts)
  • Change coupling: MapView.ts ↔ mapDataStatistic.ts (src/chart/map/MapView.ts)
  • …and 824 more

Changes since last survey

  • 7 commits — 7 feature/other, 0 fixes

By area

  • (repo) — 3 commits
  • (root) — 2 commits
  • src/chart — 1 commit
  • test/runTest — 1 commit

Notable commits

  • change: Merge pull request #21745 from apache/dependabot/npm_and_yarn/browserslist-4.28.8
  • change: Merge pull request #21748 from apache/dependabot/npm_and_yarn/multi-e322fe8955
  • change: Merge pull request #21750 from apache/dependabot/npm_and_yarn/test/runTest/js-yaml-4.3.2
  • change: chore(deps): bump brace-expansion
  • change: chore(deps-dev): bump browserslist from 4.24.2 to 4.28.8
  • change: chore(deps-dev): bump js-yaml from 4.3.0 to 4.3.2 in /test/runTest
  • change: fix(typo): correct 'becuase' typo in code comments (#21731)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

apache/echarts was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 984bf46b2f905dd0ad909a2d5e6e9d66a1b6568c — the exact code this score is about.
  • Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-eb9197011364.