apache/echarts
43.8
Weak · 28 September 2026
132.2k
lines of production code
TypeScript
with JavaScript
3
measurements over time
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.