Skip to content
CAI
Software that uses CAICheck a score

plotly/plotly.js

41.4

Weak · 1 October 2026

161k

lines of production code

JavaScript

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is Plotly.js, a comprehensive JavaScript library for creating interactive data visualizations and charts. It supports a wide variety of plot types, including 2D, 3D, geographic, and specialized scientific charts, with features for animation, selection, and export. The library provides modular entry points to reduce bundle size and includes extensive localization support for global audiences.

How it got here

2012–2015 — v4.1.1 modular architecture and feature expansion

45 changes.

This period focused on restructuring Plotly.js into a modular, maintainable architecture by breaking down monolithic files and migrating the build system to esbuild. It introduced significant new features, including pattern fills, animation controls, and a new funnelarea trace, while refactoring core components like the modebar, legend, and various trace types to support enhanced interactivity and customization.

2016–2017 — modular architecture and new trace types

27 changes.

This period focused on restructuring the library into a modular system with partial bundles to reduce bundle sizes, while significantly expanding the trace library with new types like Sankey, violin, and OHLC. It also introduced foundational infrastructure for ternary and carpet plots, refactored core components such as polar axes and sliders, and enhanced internationalization and testing capabilities.

2018–2026 — WebGL trace expansion and TypeScript migration

33 changes.

This period focused on significantly expanding the library's WebGL capabilities by introducing numerous new trace types, including polar, 3D, map, and hierarchical visualizations, while simultaneously refactoring the underlying grid and selection systems. Concurrently, the project undertook a major structural shift by migrating its type system to schema-generated TypeScript definitions and optimizing the build process for WebGL shader compilation and module compatibility.

Features

Add WebGL-accelerated polar scatter trace (scatterpolargl)

Introduces a new \scatterpolargl\ trace type that renders line, scatter, and bubble charts in polar coordinates using the WebGL (regl) engine. This trace reuses attribute definitions and calculation logic from the existing \scatterpolar\ and \scattergl\ traces, providing high-performance visualization for large datasets in polar layouts while maintaining compatibility with standard polar axis behaviors.

src/traces/scatterpolargl · high confidence

Add barpolar trace type for polar bar charts

Introduces a new 'barpolar' trace type, enabling users to render bar charts on polar coordinate systems. This feature includes full support for radial and angular positioning, bar stacking and overlay modes, and interactive hover text via the 'text' and 'hovertemplate' attributes. The implementation handles both linear and angular axes, supports colorscales for bar markers, and ensures correct hover detection and label alignment for negative radial coordinates.

src/traces/barpolar · high confidence

Add choroplethmap and densitymap trace types

Users can now create choropleth maps by providing GeoJSON data and location identifiers, and density maps (heatmaps) using longitude/latitude coordinates with optional weight values. These new GL-based map traces support configurable colorscales, hover templates, and layer ordering relative to existing map layers.

src/traces/densitymap · high confidence

Add contourcarpet trace type

Introduces a new \contourcarpet\ trace type that renders contour plots on carpet axes. This feature allows users to visualize 2D data contours using the \a\ and \b\ axes of a carpet trace, supporting standard contour options like \contours.coloring\ (fill, lines, none), \contours.type\ (levels, constraint), and label formatting, while inheriting styling and colorscale attributes from the existing contour trace implementation.

src/traces/candlestick, src/traces/contourcarpet · high confidence

Add layout images component for placing images on plots

Users can now add images to plots via the layout \images\ array. This new component supports positioning images relative to paper coordinates or specific axis domains (xref/yref), with controls for size (sizex/sizey), anchoring (xanchor/yanchor), layering (below/above traces), opacity, and sizing behavior (fill, contain, stretch). Images are automatically converted to data URIs for export, and their positions are adjusted when axis scales change (e.g., linear to log).

src/components/images · high confidence

Add topojson package with pre-built regional map exports

The topojson directory now includes a new package structure that exposes pre-built TopoJSON map files for various world regions (such as Africa, Asia, Europe, and the USA) at 50m and 110m resolutions. The \index.js\ entry point re-exports these regional JSON files from the \dist\ directory, while \config.mjs\ defines the build specifications, including resolution settings, geographic filters, and data sources for generating these maps.

topojson · high confidence

Centralized geo asset and version exports

The \src/assets\ directory now includes a new \geo\_assets.js\ module that consolidates the loading of TopoJSON map data (covering regions like Africa, Antarctica, Asia, Europe, North America, Oceania, South America, USA, and the World at 110m and 50m resolutions) and exposes the application version. This change provides a single entry point for accessing geographic assets and version information, replacing previous ad-hoc imports or separate handling mechanisms.

src/assets · high confidence

Expanded locale support with regional formatting and UI translations

The library now includes a comprehensive set of new locale files (such as Afrikaans, Amharic, Arabic variants, Azerbaijani, Bulgarian, Catalan, Czech, Welsh, Danish, German variants, Greek, Esperanto, Spanish variants, Estonian, Basque, Persian, Finnish, Faroese, French variants, Galician, Gujarati, Hebrew, Hindi, and Croatian) alongside updates to existing ones. These files provide localized UI strings for modebar buttons, plot titles, and trace labels, as well as region-specific date, decimal, and thousands separators, enabling users to display charts and interface elements in their preferred language and format.

lib/locales · high confidence

Generated TypeScript entry-point types for Plotly modules and bundles

The \src/types/generated/entry\_points\ directory now contains auto-generated TypeScript declaration files for Plotly's trace modules (e.g., \bar\, \candlestick\), component modules (e.g., \calendars\), locale modules (e.g., \en\, \fr\), and bundle entry points (e.g., \core\, \index-basic\, \index-geo\). These files provide type definitions for registering specific Plotly features via \Plotly.register\, ensuring type safety for modular imports while maintaining compatibility with the full bundle's type surface.

_src/types/generated/entry\points · high confidence

Initial release of Plotly.js v4.1.1

This entry introduces the initial version of the library, establishing the core architecture and default configuration. The \src/core.js\ file sets up the main \Plotly\ object, injecting a promise polyfill, loading default CSS, and registering the foundational registry system. It automatically registers the scatter trace as the default trace type and includes a suite of core components such as annotations, shapes, legends, modebar, and sliders. The release also bundles default English (en) and US English (en-US) locale definitions to handle date formatting and dictionary strings, while exposing key API methods and internal utilities like \Plotly.Plots\ and \Plotly.Fx\ for user interaction.

src · high confidence

Initial release of distributed Plotly.js v4.1.1 bundles and schema

The \dist\ directory now contains the first official release of distributed files for Plotly.js version 4.1.1. This includes the main bundle (\plotly.js\ and \plotly.min.js\), a meta-included bundle (\plotly-with-meta.js\), and several partial bundles (basic, cartesian, geo, gl3d, gl2d, map, finance, strict) along with their minified variants. A \dist/README.md\ provides usage instructions, CDN links, and npm package details, while \dist/plot-schema.json\ exposes the full attribute schema for reference. The strict bundle is also included, built without function constructors to support stricter Content Security Policies.

dist · high confidence

Introduce 3D cone trace for vector field visualization

Adds a new 'cone' trace type to the gl3d module, enabling users to visualize 3D vector fields using cone glyphs. Users can define vector positions via x, y, z arrays and vector components via u, v, w arrays. The trace supports configurable cone sizing through sizemode (scaled, absolute, raw) and sizeref, allows anchoring cones at their tip, tail, center, or center of mass, and includes hover interactions with customizable text, hovertext, and hovertemplate attributes. Coloring is driven by the vector norm (u/v/w magnitude) with standard colorscale support, and lighting parameters from mesh3d are inherited for realistic rendering.

src/traces/cone, src/traces/streamtube · high confidence

Introduce 3D scene annotations

Adds a new \annotations3d\ component that enables annotations within 3D scenes. Users can now define annotation arrays in scene layouts, specifying 3D coordinates (x, y, z) and standard styling properties like text, font, and arrows. The component handles attribute coercion, default values, and rendering of these annotations within the 3D plot context.

src/components/annotations3d · high confidence

Introduce Carpet trace type for 2D coordinate mapping

Adds the \carpet\ trace type, enabling users to plot data on a 2D grid defined by two parameters (a and b) that map to x and y coordinates. This new trace type supports linear and bicubic (Catmull-Rom spline) smoothing for the grid lines, allows for 'cheater' plots where x/y coordinates are derived from the a/b indices, and includes full axis configuration for the a and b axes (including titles, ticks, and gridlines). It serves as the foundational layer for \scattercarpet\ and \contourcarpet\ traces to overlay data onto this mapped grid.

src/traces/carpet · high confidence

Introduce Indicator trace for single-value visualization

Adds a new \indicator\ trace type that visualizes a single \value\ using three optional modes: \number\ (text), \delta\ (difference from a reference), and \gauge\ (angular or bullet chart). The trace supports contextual elements like title, prefix/suffix, and gauge steps/thresholds, with specific defaults for font sizes and alignment to ensure clear presentation of the metric.

src/traces/indicator · high confidence

Introduce Parallel Categories (parcats) trace

Adds a new Parallel Categories diagram trace type for visualizing multidimensional categorical data. Users can define dimensions with categorical values, control the ordering of categories via \categoryorder\ and \categoryarray\, and customize the appearance of paths using \line.color\, \line.shape\ (linear or hspline), and \line.colorscale\. The trace supports interactive features such as \hoveron\ (category, color, or dimension), \hovertemplate\, and drag-based arrangement modes (\perpendicular\, \freeform\, \fixed\).

src/traces/parcats · high confidence

Adds a new Sankey diagram trace type for visualizing network flow data. This feature supports horizontal and vertical orientations, circular link rendering for cyclic graphs, and interactive node grouping via mouse selection. Users can customize node and link styling, hover labels, and text alignment, while the layout engine automatically arranges nodes to preserve spacing and handle overlapping elements.

src/traces/sankey · high confidence

Introduce Smith chart subplot type

Adds a new Smith chart subplot type (layout.smith) for plotting impedance/admittance data. The implementation introduces realaxis and imaginaryaxis configurations, mapping trace data to 'real' and 'imag' series, and provides default tick values (\[0.2, 0.5, 1, 2, 5\]) for the real axis with inherited defaults for the imaginary axis. It reuses polar plot infrastructure for rendering and includes specific layout attributes for grid, ticks, and labels tailored to Smith chart visualization.

src/plots/smith · high confidence

Introduce Table trace for grid-based data visualization

Adds a new 'table' trace type that renders data in a scrollable, column-major grid. Users can define header and cell values, customize column widths and order, and apply styling (fonts, colors, borders) to individual cells. The implementation supports dynamic interactions including column dragging to reorder, vertical scrolling with a custom scrollbar, and text selection within cells.

src/traces/table · high confidence

Introduce WebGL scatter plot matrix (splom) trace

Adds a new 'splom' trace type that generates scatter plot matrix visualizations using WebGL (regl). This trace supports configurable dimensions, diagonal visibility, and upper/lower half display options, along with hover, selection, and drag interactions. It integrates with the existing grid component for axis positioning and supports standard scatter marker styling.

src/traces/splom · high confidence

Introduce configurable error bars for scatter, bar, and histogram traces

Users can now display error bars on scatter, bar, and histogram traces. The new component supports four error types—constant, percent, sqrt, and data—allowing users to define symmetric or asymmetric errors via attributes like \error\_x.value\, \error\_x.array\, and \error\_y.symmetric\. Error bars are styled with configurable color, thickness, and width, and they integrate with hover tooltips to show error magnitudes.

src/components/errorbars · high confidence

Introduce funnelarea trace type

Adds a new \funnelarea\ trace type that visualizes process stages using area-encoded trapezoids, offering a part-to-whole representation similar to pie charts. The implementation includes full attribute definitions (supporting labels, values, text templates, and hover templates), default handling, and plotting logic that renders trapezoidal slices with configurable aspect and base ratios. It reuses underlying infrastructure from the pie and bar traces for calculations, styling, and uniform text handling, and supports layout-level color customization via \funnelareacolorway\.

(repo-wide) · high confidence

Introduce generated TypeScript type definitions for Plotly schema attributes and common utilities

This change adds new TypeScript declaration files (\src/types/lib/attributes.d.ts\ and \src/types/lib/common.d.ts\) that provide compile-time type checking for Plotly's attribute schema and common data structures. The \attributes\ module defines a discriminated union of attribute interfaces (such as \NumberAttr\, \StringAttr\, \EnumeratedAttr\, and \FlagListAttr\) based on the \valType\ field, enabling stricter validation for attribute authoring. The \common\ module exports shared utility types including \Datum\, \TypedArray\, \Color\, \ColorScale\, and axis/subplot identifier types like \XAxisName\ and \CartesianSubplotId\. These types are generated from the Plotly schema to ensure consistency between runtime validation and static analysis.

src/types/lib · high confidence

Introduce icicle trace for hierarchical data visualization

Adds a new icicle trace type that visualizes hierarchical data as nested rectangles, reusing core logic and attributes from the existing treemap and sunburst traces. Users can now plot hierarchical structures using \labels\, \parents\, and \values\ (or \count\), with support for horizontal or vertical tiling orientations, color scales, text templates, and path bars. The implementation includes dedicated attributes, defaults, calculation, and drawing modules, along with layout-level colorway settings specific to icicle charts.

src/traces/icicle, src/traces/sunburst · high confidence

Introduce modular library entry points and partial bundles

The library now exposes a structured module system in the \lib\ directory, allowing users to import specific trace types or domain-specific bundles rather than the entire library. Individual trace modules (e.g., \lib/bar.js\, \lib/scatter.js\) are now available as separate exports. Additionally, new entry points for partial bundles (\lib/index-basic.js\, \lib/index-cartesian.js\, \lib/index-finance.js\, \lib/index-geo.js\, \lib/index-gl2d.js\, \lib/index-gl3d.js\, \lib/index-map.js\) enable users to load only the traces relevant to their use case, reducing bundle size. A \lib/index-strict.js\ entry point is also provided for environments requiring strict mode compliance. The main \lib/index.js\ aggregates all available traces, and \lib/calendars.js\ is exposed as a reusable component.

lib · high confidence

Introduce quiver trace for vector field visualization

Adds a new 'quiver' trace type that renders vector fields as arrows on Cartesian plots. Users can define arrow positions via x/y and vector components via u/v, with support for anchoring arrows at the tail, tip, or center. The trace allows arrows to be colored by an independent scalar array or by vector magnitude using a colorscale, and includes attributes for controlling arrow length scaling, line width, and arrowhead size. Hover interactions now detect proximity to the entire arrow body rather than just the base point, and selection styling supports dimming unselected arrows.

src/traces/quiver · high confidence

Introduce scattercarpet trace type for plotting on carpet axes

Adds a new \scattercarpet\ trace type that allows scatter plots to be rendered on top of carpet axes. This feature enables users to visualize data points and lines using \a\ and \b\ coordinates mapped to a carpet grid, supporting standard scatter capabilities such as markers, lines, fills, hover templates, and selection. The implementation includes specific attribute definitions, calculation logic to map carpet coordinates to Cartesian space, and clipping paths to ensure traces remain within the visible carpet area.

src/traces/scattercarpet · high confidence

Introduce scatterpolar trace type for polar coordinate scatter plots

Users can now create scatter plots in polar coordinates using the new 'scatterpolar' trace type. This feature supports radial (r) and angular (theta) data inputs, including linear spacing via r0/dr and theta0/dtheta parameters. It allows for lines, markers, and text, with fill options ('toself', 'tonext') and custom hover templates. The trace integrates with polar axes, supporting radial autoranging, log scales, and proper hover label formatting for r and theta values.

src/traces/scatterpolar · high confidence

Introduce scattersmith trace for Smith chart visualization

A new scattersmith trace type is added, enabling the visualization of data on a Smith chart using real and imaginary components (\real\ and \imag\ attributes). The implementation includes dedicated calculation, defaulting, and plotting logic that maps these complex coordinates to the Smith chart framework, supporting standard scatter-like features such as line shapes, markers, text templates, and hover interactions.

src/traces/scattersmith · high confidence

Introduce scatterternary trace type for ternary phase diagrams

A new \scatterternary\ trace type is added, enabling scatter-style plotting on ternary axes. Users can provide data as \a\, \b\, and \c\ components (with automatic normalization if only two are given) and utilize standard scatter features including markers, lines, fills (\toself\, \tonext\), and text. The trace supports hover interactions with \a\, \b\, \c\, and \text\ info, customizable via \hovertemplate\ and \hovertext\, and allows clipping of markers and text to the axis boundaries via \cliponaxis\.

src/traces/scatterternary · high confidence

Introduce ternary subplot infrastructure and layout attributes

This change adds the core scaffolding for ternary subplots, including the new \src/plots/ternary\ module files (\index.js\, \ternary.js\, \layout\_attributes.js\, \layout\_defaults.js\). It defines the layout schema for ternary axes (a, b, c) with attributes like \min\, \sum\, \showticklabels\, and \layer\, and implements the subplot registration and rendering logic to manage ternary axes, grids, and titles within the plot framework.

src/plots/ternary · high confidence

Introduce violin trace type for distribution visualization

Adds a new violin trace type that displays the distribution of data using kernel density estimation (KDE). Users can configure the bandwidth (defaulting to Silverman's rule), span mode (soft, hard, or manual), and scaling (by width or count). The trace supports inner box plots, mean lines, and jittered sample points, with hover interactions that display KDE values and quartile statistics. Layout options allow grouping and overlapping multiple violins at the same location.

src/traces/violin · high confidence

Introduction of Cividis colorscale and layout-level color axis defaults

Users can now select the new Cividis colormap, which is mathematically optimized for color vision deficiency, in addition to the existing Viridis scale. This change also introduces \layout.colorscale\ attributes, allowing users to define default sequential, sequential-minus, and diverging color scales for the entire plot via \layout.coloraxis\, ensuring consistent coloring across multiple traces without repeating configuration.

src/components/colorscale · high confidence

Major refactor and feature expansion of the scatter trace module

The scatter trace module has been restructured into a modular architecture with separate files for defaults, calculation, styling, and selection logic. This change introduces several new capabilities: support for date axis period alignment (xperiod, yperiod) to group data points by time intervals; persistent point selection via selectedpoints and selectedids attributes; and enhanced fill options including pattern fills and gradient fills. Additionally, the module now supports per-point styling for marker line dashes, improved hover behavior on fills, and better handling of stacked and grouped scatter traces with gap interpolation.

src/traces/scatter · high confidence

New OHLC (Open-High-Low-Close) trace type

Adds a new OHLC financial chart trace type, allowing users to visualize open, high, low, and close values over time. This feature includes support for period alignment (xperiod, xperiod0), hover formatting (xhoverformat, yhoverformat, hovertemplate), and split hover labels for detailed data inspection. Users can customize the appearance of increasing and decreasing bars with specific line colors, widths, and dash styles, and can control tick mark width relative to the x-axis interval.

src/traces/ohlc · high confidence

New REGL shader precompilation devtool

A new devtool has been added to automate the precompilation of WebGL shaders for specific trace types (parcoords, scattergl, scatterpolargl, splom). The tool consists of a Node.js server (server.mjs) that serves a browser-based interface (index.html) and a client script (devtools.js). The client loads Plotly.js, iterates through mock data associated with the target traces, and extracts the generated REGL shader code. This code is submitted to the server, which writes deterministic, sorted precompiled JavaScript files into the source tree, replacing the need for manual or runtime shader compilation for these specific visualizations.

_devtools/regl\codegen · high confidence

New animation and transition configuration options

The plotting system now exposes granular control over how charts animate and transition between states. Users can configure the animation mode (immediate, next, or afterall), direction (forward or reverse), and whether to start from the current frame. Transitions now support a wide range of easing functions (such as cubic, elastic, and bounce) and allow users to specify whether layout or trace changes should transition first. Additionally, frames can now be organized into groups for selective animation, and a baseframe option allows frames to inherit properties from a parent frame to reduce redundancy.

src/plots · high confidence

New geodata processing scripts for generating TopoJSON layers

Added \get\_geodata.mjs\ and \process\_geodata.mjs\ to the \topojson/bin\ directory to automate the download and transformation of geographic data. The new download script fetches Natural Earth vector maps and UN GeoJSON files, handling decompression and caching. The processing script converts shapefiles to GeoJSON, applies mapshaper operations (clipping, dissolving, line extraction), calculates centroids, prunes properties for specific layers (countries, subunits), and generates the final TopoJSON structures, including fixes for polygon winding and antimeridian clamping.

topojson/bin · high confidence

New image trace for displaying 2D raster data

Users can now visualize 2D regular rasters (images) using a new \image\ trace type. This trace supports two input modes: providing a data URI via the \source\ attribute for fast rendering, or supplying a 2D array of color values via the \z\ attribute. It introduces a \colormodel\ attribute (supporting \rgb\, \rgba\, \rgba256\, \hsl\, and \hsla\) to map numerical data to colors, along with \zmin\/\zmax\ for scaling. The trace includes hover support displaying pixel coordinates, color values, and custom \hovertemplate\ content, and handles layout defaults such as reversing the y-axis to ensure images are displayed right-side-up.

src/traces/image · high confidence

New isosurface trace for 3D grid visualization

Added a new \isosurface\ trace type that renders 3D isosurfaces from four 1D arrays (x, y, z, and value) representing a uniform or non-uniform grid. Users can control the visualization with \isomin\ and \isomax\ boundaries, adjust the number of surfaces drawn, and enable optional features such as spaceframe elements, slice planes, and caps. The trace supports standard 3D styling including colorscales, lighting, opacity, and hover interactions with text and templates.

src/traces/isosurface · high confidence

New pattern fill and dash style attributes for markers

The drawing module now supports pattern fills and custom dash styles for markers. Users can define pattern shapes (such as lines, crosses, or dots), foreground and background colors, opacity, size, and solidity to create textured marker fills. Additionally, line dash styles can be customized using standard patterns (solid, dot, dash, etc.) or custom pixel-length arrays, allowing for more detailed control over marker outlines and line appearances.

src/components/drawing · high confidence

New scattermap trace for MapLibre GL maps

A new \scattermap\ trace type is introduced, allowing users to plot scatter points, lines, and marker symbols on a MapLibre GL geographic map using longitude/latitude coordinates. This trace supports marker clustering (with configurable size, color, and opacity), custom marker symbols (including Maki icons), text labels, and fill layers. It also handles complex map interactions such as selection and hovering across repeated world copies, accounting for map pitch and bearing.

src/traces/scattermap · high confidence

New selection drawing modes and styling options

Users can now configure how new selections are created and styled. A new \newselection.mode\ option allows choosing between 'immediate' (selection created on first mouse up) and 'gradual' (allows adding/subtracting to the initial selection) modes. Additionally, styling for the new selection outline (line color, width, dash) and the active selection interior (fill color, opacity) is now customizable via layout attributes.

_src/components/selections/draw\newselection · high confidence

Persistent layout selections with interactive editing

Users can now define and persist selections (rectangles or custom paths) directly in the layout configuration, which are drawn on the plot and included in selection event data. These selections are interactive: when the new \config.editSelection\ option is enabled, users can click to activate a selection and drag it to resize or move it, with changes reflected in the \plotly\_selected\ event. This replaces the previous ephemeral, drag-only selection model with a stateful, editable layer that supports multiple subplots and complex polygon shapes.

src/components/selections · high confidence

Support for axis and plot subtitles with dedicated styling

Users can now add subtitles to axes and plot titles via the \layout.title.subtitle\ property. The diff introduces logic to render a separate subtitle text element, apply specific font styling (family, size, color, etc.) distinct from the main title, and manage positioning with dedicated padding (especially for MathJax content). This change transitions title attributes from simple strings to objects, allowing for more granular control over title and subtitle appearance and layout.

src/components/titles · high confidence

Support for multiple world calendar systems

Users can now specify non-Gregorian calendar systems (such as Chinese, Hebrew, Islamic, Julian, and others) for date axes and trace coordinates via new \xcalendar\, \ycalendar\, and \zcalendar\ attributes. The component integrates the \world-calendars\ library to handle date conversions and formatting for these systems, allowing charts to correctly interpret and display dates according to the selected calendar.

src/components/calendars · high confidence

Surface trace gains independent coloring, contour customization, and gap handling

The surface trace now supports \surfacecolor\ to apply a color scale independently of the \z\ height data, with corresponding \cmin\/\cmax\ controls. Users can now draw contour lines on the surface along the x, y, and z axes, customizing their visibility, start/end levels, step size, color, width, and hover highlighting. Additionally, the \connectgaps\ attribute allows missing or NaN values in the \z\ data to be interpolated, and the trace now supports \hovertext\, \hovertemplate\, and axis hover formats for richer tooltips.

src/traces/surface · high confidence

Test dashboard now supports MathJax v3 and v4 with configurable output modes

The test dashboard has been updated to include dedicated entry points for MathJax v3 (SVG and CHTML outputs) and MathJax v4 (CHTML output), allowing developers to verify how Plotly.js renders alongside these specific MathJax configurations. The dashboard server now accepts command-line flags (e.g., \--mathjax3\, \--mathjax4chtml\) to serve the corresponding HTML page, and the core \devtools.js\ module exposes new \Tabs.setPlotConfig\ and \Tabs.plotMock\ methods to facilitate testing with local topojson files and mock data.

_devtools/test\dashboard · high confidence

mesh3d trace gains hover text, intensity mode, and lighting controls

The mesh3d trace now supports \text\ and \hovertext\ attributes for custom hover labels, along with \hovertemplate\ and axis-specific \hoverformat\ options. A new \intensitymode\ attribute allows intensity values to be mapped to either vertices or cells, enabling field plotting on mesh surfaces. Additionally, users can now configure 3D lighting via \lighting\ (ambient, diffuse, specular, roughness, fresnel) and \lightposition\ attributes, and toggle flat shading with \flatshading\ for a low-poly aesthetic.

src/traces/mesh3d · high confidence

Removals

Removal of legacy Raphael-based graphing engine

The \graph\_obj.js\ file, which implemented the original plotting engine using the Raphael JavaScript library, has been removed. This change eliminates the legacy vector-based rendering and interaction logic (including manual axis tick/grid drawing and drag-to-pan) in favor of the modern Plotly.js-based architecture.

shelly · high confidence

Architecture

Refactor lib into modular components and introduce new utility functions

The monolithic lib.js has been broken up into smaller, focused modules (anchor\_utils, angles, array, coerce, dates, dom, events, extend, filter\_unique, filter\_visible, geo\_location\_utils, geojson\_utils, geometry2d, etc.) to improve maintainability and reduce circular dependencies. New utility functions have been added, including anchor detection logic (isLeftAnchor, isCenterAnchor, etc.), angle calculations (isFullCircle, angleDelta, isAngleInsideSector), array handling (isArrayOrTypedArray, decodeTypedArraySpec, filterUnique), and event management (internal event handlers, passive wheel event support). The events module now supports internal vs. external event separation to prevent user listeners from interfering with internal Plotly operations. Additionally, new TypeScript files (clean\_number.ts, custom\_country\_codes.ts) have been introduced for type-safe numeric cleaning and custom country code handling.

src/lib · high confidence

Refactor plot API into modular sub-components

The plot API logic has been reorganized into dedicated modules within src/plot\_api, including container\_array\_match, edit\_types, helpers, manage\_arrays, plot\_api, plot\_config, plot\_schema, plot\_template, and subroutines. This change introduces a structured \editType\ flag system to control the granularity of updates (e.g., \calc\, \plot\, \style\, \axrange\) for both trace and layout attributes, enabling more efficient partial redraws. It also adds a new \containerArrayMatch\ utility to parse attribute strings pointing into layout container arrays, and exposes new public API methods such as \Plotly.update\, \Plotly.purge\, \Plotly.validate\, \Plotly.makeTemplate\, and \Plotly.deleteActiveShape\.

_src/plot\api · high confidence

Refactor scatter3d trace into modular components

The scatter3d trace implementation has been restructured from a single monolithic file into separate modules for attributes, calculation, conversion, and defaults. This change improves code maintainability and aligns the trace with the new module registry pattern, while preserving all existing functionality including 3D scatter points, lines, error bars, text templates, and surface fills.

src/traces/scatter3d, src/traces/scattergl · high confidence

Reorganized 3D plotting code into the plots/gl3d module

The 3D plotting logic has been restructured into the src/plots/gl3d directory, introducing a new module entry point (index.js) that manages 3D scene subplots. This change includes a dedicated scene implementation (scene.js) for handling WebGL context, camera initialization, and rendering, alongside helper modules for coordinate projection (project.js) and data zipping (zip3.js). This reorganization centralizes the 3D plot lifecycle, including scene creation, cleaning, and SVG export, within a dedicated module structure.

src/plots/gl3d · high confidence

Behavioural changes

Annotations component refactored with new arrow styling and click-to-show behavior

The annotations component has been restructured into modular files, introducing support for new arrowhead styles (including barbed, circle, and square) and the ability to specify arrow tails in absolute grid coordinates for stable trendlines. A new 'clicktoshow' attribute allows annotations to toggle visibility on click, and axis-referenced annotations can now be dragged anywhere on the plot.

src/components/annotations · high confidence

Bar trace restructured with new text, template, and corner radius capabilities

The bar trace module has been refactored to support advanced text rendering and styling. Users can now use \texttemplate\ and \hovertemplate\ with variables like \%{label}\ and \%{value}\, and control text placement with \textposition\ (inside, outside, auto, none), \textangle\, and \constraintext\. The trace also introduces \barcornerradius\ for rounded corners, \base\ for custom bar origins, and \offset\ for positioning. Additionally, \marker.opacity\ and \marker.pattern\ are now supported, and the trace uses a new \arrays\_to\_calcdata\ module to merge text and hovertext into calculated data.

src/traces/bar · high confidence

Box plot trace refactored into modular components with new statistical signatures

The box plot implementation has been restructured into separate modules (attributes, calc, plot, hover, etc.) to support a new 'q1/median/q3' data signature alongside the existing sample data approach. This change introduces attributes for pre-computed statistics (q1, median, q3, lowerfence, upperfence), enables notched box plots with configurable notch width, and adds support for box grouping modes (group/overlay) with gap controls. The hover behavior now distinguishes between box stats and individual points via the 'hoveron' attribute, and selection logic has been updated to work with the new calc data structure.

src/traces/box · high confidence

Build system migration to esbuild and MapLibre

The build pipeline in tasks/util has been rewritten to use esbuild instead of the previous bundlers, introducing new utility modules for common tasks, partial bundle generation, and locale wrapping. This change also includes a dedicated task to bundle the MapLibre GL worker code, reflecting the migration from Mapbox GL to MapLibre GL, and updates the bundle wrapper to support the new build configuration and strict CSP requirements.

tasks/util · high confidence

Build system refactored to use esbuild and ES modules

The build and packaging infrastructure has been rewritten to use esbuild for bundling and ES modules (.mjs) for task scripts. This introduces new entry points for generating full, minified, strict-CSP, and partial bundles, alongside automated generation of TypeScript declarations for lib/ entry points and schema-based types. The system also now handles locale packaging, CDN publishing with versioned assets, and image test sharding, replacing the previous build pipeline.

tasks · high confidence

Cartesian axes overhaul: new axis layers, unified hover, and period-based tick positioning

Cartesian plots now use a new layering system (traceLayerClasses) to control the draw order of axes, grids, and traces, allowing shapes to be drawn between gridlines and traces. A unified hover system replaces the previous logic, providing consistent hover behavior across trace types and enabling spikelines to snap to hovered data. Date and category axes now support period-based tick positioning (ticklabelmode: 'period') and improved handling of rangebreaks, ensuring labels are correctly placed within time periods. Axis titles are now objects rather than strings, supporting new standoff and font properties. Minor ticks and grids are now properly inherited from major styles, and the autorange logic has been refined to handle edge cases like reversed ranges and inside tick labels more robustly.

src/plots/cartesian · high confidence

Choropleth trace module refactored with selection, hover, and GeoJSON support

The choropleth trace module has been restructured into distinct components (attributes, calc, defaults, hover, plot, select, style) to support persistent lasso/click selection, improved hover interactions (including antimeridian handling and GeoJSON feature properties in event data), and explicit support for custom GeoJSON inputs via the new \featureidkey\ attribute and \geojson-id\ location mode. The module now uses a registry-based pattern with a dedicated \basePlotModule\ for geo traces, ensuring consistent behavior with other geo-based traces like scattergeo.

src/traces/choropleth · high confidence

Colorbar component refactored with new sizing and positioning attributes

The colorbar component has been restructured into a modular set of files (attributes, defaults, draw, constants) and introduces new configuration options for precise control over its layout. Users can now set the orientation to horizontal or vertical, and independently define the colorbar's thickness and length using either plot fractions or pixel values via the new \thicknessmode\, \thickness\, \lenmode\, and \len\ attributes. Positioning is also enhanced with explicit \x\, \y\, \xref\, \yref\, \xanchor\, and \yanchor\ properties, allowing the colorbar to be placed relative to either the plot container or the paper, with specific default alignments for vertical and horizontal orientations.

src/components/colorbar · high confidence

Commit pre-built MapLibre worker and CSS bundles to repository

The \build/\ directory now includes committed artifacts \maplibre\_worker.js\ and \plotcss.js\, which were previously generated scratch output. \maplibre\_worker.js\ is the bundled MapLibre GL web worker required by map plots, and \plotcss.js\ is the stylesheet compiled from \src/css/style.scss\. These files are now shipped in the npm package to ensure that users installing plotly.js from source or \lib/\ can resolve all dependencies without needing to run the build process locally.

build · high confidence

Constants migrated to TypeScript

The constant definitions in src/constants have been converted from JavaScript to TypeScript. This migration introduces strict type safety for layout positioning fractions, axis reference descriptions, delta indicators, filter operations, 3D rendering styles, and numerical limits, ensuring that these core configuration values are validated against their expected types at compile time.

src/constants · high confidence

Contour trace module refactored into modular components

The contour trace implementation has been restructured from a single monolithic file into a set of specialized modules (attributes, calc, plot, style, hover, etc.) to improve maintainability and enable reuse with contourcarpet traces. This change introduces new attributes for contour labels (labelfont, labelformat), constraint-based contouring (operation, value), and improved hover formatting (zhoverformat). The refactoring also standardizes the trace module interface to work with the registry system and improves handling of edge cases in contour path generation and coloring.

src/traces/contour · high confidence

Geo plots now support min/max scale limits and fitbounds configuration

Users can now constrain the zoom range of geographic maps using the new \geo.projection.minscale\ and \geo.projection.maxscale\ layout attributes, which define the minimum and maximum zoom levels relative to the base scale. Additionally, the \geo.fitbounds\ attribute has been introduced to automatically adjust the map view to fit trace data, with options to fit based on visible locations, the entire GeoJSON input, or to disable auto-fitting entirely. These changes are implemented in the \src/plots/geo\ module, including new constants for projection spans and fitbounds compatibility, and updated layout attributes and defaults.

src/plots/geo · high confidence

Grid module refactored into components directory with splom support

The grid logic has been moved from the plots directory into a dedicated \src/components/grid\ module, introducing a new \index.js\ that defines grid attributes and handling. This change includes specific adaptations for scatterplot matrices (sploms), allowing the grid to correctly process axes generated by splom layouts via the \getAxes\ function. Additionally, default behaviors for \xside\ and \yside\ have been adjusted to better suit splom configurations, ensuring axis labels and titles are positioned correctly relative to the plot area rather than the grid edges in these specific cases.

src/components/grid · high confidence

Heatmap trace refactored with new attributes and gap-handling behavior

The heatmap trace module has been restructured into distinct files (attributes, calc, plot, hover, etc.) and now supports new configuration options for data presentation and interaction. Users can now display text on heatmap cells using \text\, \texttemplate\, and \textfont\ attributes, and customize hover label formatting with \hovertemplate\ and \zhoverformat\. The trace introduces \hoverongaps\ (defaulting to true) to control whether missing data points trigger hover events, and \connectgaps\ (defaulting to true for 1D z-data) to automatically fill missing values. Additionally, \xgap\ and \ygap\ allow users to set pixel-based spacing between heatmap bricks, while \xperiod\/\yperiod\ and \xperiod0\/\yperiod0\ enable period-based axis alignment inherited from scatter traces.

src/traces/heatmap · high confidence

Histogram trace refactored with new binning, aggregation, and cumulative distribution capabilities

The histogram trace module has been restructured into a dedicated directory with separate files for attributes, defaults, calculation, and cross-trace logic. This change introduces support for cumulative distributions (CDFs) via the \cumulative\ attribute, allowing users to display cumulative counts or densities. It also adds new aggregation functions (\sum\, \avg\, \min\, \max\) via the \histfunc\ attribute, enabling histograms to summarize data rather than just counting occurrences. Binning behavior has been refined with improved auto-binning algorithms, better handling of date axes, and new attributes for controlling bin start, end, and size. Cross-trace bin alignment is now managed through \bingroup\ and \alignmentgroup\ attributes, ensuring consistent binning across multiple histogram traces on the same subplot. The trace now reuses the bar trace's plotting and styling logic but implements its own calculation and defaults, resulting in more accurate hover labels and event data that include bin numbers and original point indices.

src/traces/histogram · high confidence

Improved error handling for malformed mock JSON files

The devtools dashboard utilities now gracefully handle malformed JSON files in the test image mocks directory. Previously, a syntax error in a mock file would cause the entire process to fail; now, invalid files are silently excluded from the mocks list with a logged warning, allowing the dashboard to continue using valid mock data.

devtools · high confidence

Introduce configurable range slider with autorange and fixed-range modes

The range slider component now supports explicit range configuration via the new \range\ and \autorange\ attributes, allowing users to define a specific visible window or let the slider automatically adjust to the data. Additionally, the \rangemode\ attribute (with values \auto\, \fixed\, and \match\) enables control over how the slider's y-axis range behaves relative to the main plot during zooming, while \thickness\ allows adjusting the slider's height. These changes replace previous implicit behaviors with a more flexible, attribute-driven configuration.

src/components/rangeslider · high confidence

Introduce schema-based TypeScript type generation and conversion workflow

The type system has been restructured to generate public TypeScript definitions from the runtime schema (\plot-schema.json\) rather than relying solely on hand-written declarations. This change introduces a new \src/types/generated/\ directory containing schema-derived types for traces, layout, and shared interfaces, alongside a generator script (\tasks/generate\_schema\_types.mjs\) and documentation (\ARCHITECTURE.md\, \GENERATOR.md\, \CONVERTING\_ATTRIBUTES.md\). It establishes a workflow for converting \attributes.js\ files to TypeScript with compile-time validation via \AttributeMap\, and clarifies the public vs. internal type surface (e.g., \Data\ vs. \FullData\) to improve type safety and maintainability for contributors.

src/types · high confidence

Major legend component refactoring and new interaction controls

The legend component has been significantly restructured into a modular architecture, splitting logic into dedicated files for attributes, defaults, drawing, data retrieval, and click handling. This refactor introduces granular user controls for legend interactions, including new attributes for single and double-click behaviors on both individual items (\itemclick\, \itemdoubleclick\) and grouped items (\groupclick\, \groupdoubleclick\) to toggle visibility or isolate traces. Additionally, the legend now supports group titles with their own click toggles (\titleclick\), configurable item sizing (\itemsizing\), and visual adjustments like entry width modes and indentation.

src/components/legend · high confidence

Map subplot refactored to use MapLibre GL v6 with improved auto-fitting and icon support

The map subplot has been rebuilt to use MapLibre GL v6, requiring a new worker setup and ESM bundle loading. The default map view now automatically fits to the visible trace data (scattermap/densitymap) using a new \fitbounds\ attribute, replacing the previous static center/zoom defaults. Additionally, missing map icons are now dynamically fetched from the jsdelivr CDN (Maki v8), and text positioning for map markers has been improved to better align with icon sizes.

src/plots/map · high confidence

Migrate to schema-generated TypeScript types with hybrid config overrides

The public and internal TypeScript definitions in src/types/core have been restructured to generate the majority of types (Data, Layout, ConfigBase, etc.) from the Plotly JSON schema, replacing the previous hand-written definitions. To handle fields that the schema cannot model (such as function values or arbitrary-key maps in the Config), a hybrid approach is used where hand-written interfaces (ConfigOverrides) are merged with the generated types. This migration also introduces new internal types for fully processed data and layout (FullData, FullLayout) that include runtime state properties, and adds pixel coordinate support (xPixel, yPixel) to mouse and hover event payloads.

src/types/core · high confidence

Modebar configuration and button definitions are now schema-driven and localized

The modebar's layout attributes (such as orientation, colors, and button add/remove lists) are now defined in a dedicated schema file (attributes.ts) with corresponding defaults, replacing the previous inline configuration. This change introduces a new 'Share chart' confirmation dialog that validates the destination URL and displays localized, context-aware messaging for Plotly Cloud versus custom servers. Additionally, modebar buttons are now fully localized via the translation system, and the share dialog wording has been updated to reflect current branding.

src/components/modebar · high confidence

New color handling module with culori integration and explicit attribute defaults

The color component now uses the culori library for robust color parsing and manipulation, replacing previous implementations. This introduces a new \attributes.js\ file that explicitly defines default colors (e.g., muted blue, safety orange) and line colors (e.g., \\#444\ for default lines, \\#BEC8D9\ for borders), ensuring consistent visual defaults across the library. The core \index.js\ module normalizes color inputs, handling invalid strings by defaulting to opaque black with a warning, and supports both string specifiers and raw channel arrays for WebGL performance. Key behavioral changes include stricter validation of hex colors (requiring the \\#\ prefix) and improved handling of alpha channels and out-of-gamut values.

src/components/color · high confidence

New promise-based image export and download API

The snapshot module has been refactored to introduce a new, promise-based \Plotly.toImage\ and \Plotly.downloadImage\ API, replacing the previous callback-based system. This change adds support for exporting plots as SVG, PNG, JPEG, WebP, and a new 'full-json' format. The download functionality now intelligently derives filenames from the plot's title or subtitle (skipping LaTeX titles to avoid invalid characters) and uses \URL.createObjectURL\ for more reliable file saving across browsers, including specific handling for Safari and Internet Explorer. Additionally, the \clonePlot\ helper was updated to better manage 3D scene axes for thumbnails, and the SVG export process now cleans up font styles and quotation marks to improve compatibility with external renderers like Adobe Illustrator.

src/snapshot · high confidence

New shape drawing attributes and defaults moved to dedicated module

The attribute definitions, default value logic, and constants for the \newshape\ and \activeshape\ configuration objects have been extracted from the main shapes component into a new \src/components/shapes/draw\_newshape\ directory. This change introduces specific schema definitions for new shape properties—including \visible\, \showlegend\, \layer\, \drawdirection\, and detailed \label\ settings (text, position, angle, anchors)—along with the corresponding default coercion logic. Users interacting with the shape drawing mode will now have these configuration options managed through this dedicated module, ensuring consistent defaults and attribute handling for newly drawn shapes.

_src/components/shapes/draw\newshape · high confidence

Parallel coordinates trace refactored with new axis brushing and dimension attributes

The parallel coordinates trace has been refactored to use a new, custom axis brushing implementation (replacing the previous d3.svg.brush dependency) which supports multiple selection ranges and improved ordinal axis snapping. New attributes have been added to allow users to control dimension label positioning and rotation (\labelside\, \labelangle\), enable multi-selection on individual dimensions (\multiselect\), and customize the appearance of unselected lines (\unselected.line.color\, \unselected.line.opacity\). The trace now also supports per-dimension tick formatting (\tickformat\) and uses a centralized attributes system for better consistency with cartesian axes.

src/traces/parcoords · high confidence

Pie chart trace refactored into modular components with enhanced text and color controls

The pie chart implementation has been restructured into distinct modules (attributes, calc, defaults, plot, style) to improve maintainability and support new features. Users gain finer control over text presentation with new \texttemplate\ and \hovertemplate\ attributes for custom formatting, \insidetextorientation\ to control text alignment within slices, and \automargin\ to allow outside labels to adjust chart margins. Color handling is enhanced with \piecolorway\ and \extendpiecolors\ for managing slice colors across multiple charts, and \marker.pattern\ support allows for patterned fills. The trace now supports aggregated labels (summing values for duplicate labels) and improved event data including bounding boxes and point numbers.

src/traces/pie · high confidence

Polar plots refactored to new axis and subplot architecture

The polar plot implementation has been restructured to use a new axis and subplot framework. This includes the introduction of explicit \angularaxis\ and \radialaxis\ objects, replacing the previous flat attribute structure. Users will see changes in how polar axes are configured, with new defaults such as \rangemode: 'tozero'\ for radial axes and support for \category\ type on angular axes. The refactoring also brings improved drag interactions, including an 'inner' radial dragbox for plots with a hole, and better handling of autorange and range validation. Additionally, the polar subplot now supports \gridshape: 'linear'\ for polygonal grids and integrates with the new title attribute structure.

src/plots/polar · high confidence

Pre-bundled stackgl modules for improved compatibility

The stackgl modules are now provided as a pre-bundled CommonJS module (index.js) generated via webpack, replacing the previous loose dependency structure. This change ensures consistent handling of GLSL shader inlining and resolves compatibility issues with modern module systems by outputting a single, stable artifact that plotly.js can reliably import, while also removing unused dependencies and polyfills from the build configuration.

_stackgl\modules · high confidence

Range selector behavior and styling updates

The range selector component now defaults its vertical anchor to 'bottom' and sets the border width to 0, resulting in a flatter visual appearance. It introduces an 'activecolor' attribute to style the currently selected button and applies rounded corners (rx/ry) to button rectangles. The 'todate' step mode has been renamed to 'to-date' for consistency, and the component now prevents non-Gregorian calendar steps (month/year) from using 'todate' mode. Additionally, default positioning logic has been refined to place selectors relative to anchored axes, and button labels now support template strings via the \_meta helper.

src/components/rangeselector · high confidence

Redesigned shape editing, positioning, and labeling system

The shape component has been refactored to support more intuitive editing and flexible positioning. Shapes can now be resized and moved with dedicated vertex and group controllers, and pixel-sized shapes can be anchored to specific data values using the new \xanchor\/\yanchor\ and \xsizemode\/\ysizemode\ attributes. The system now supports multi-axis shapes (referencing different axes for x0/x1 or y0/y1) and allows shapes to be included in legends. Labeling has been enhanced with \texttemplate\ support, automatic text angles for line shapes, and better positioning logic. Additionally, the \layer\ attribute now includes a 'between' option to draw shapes between gridlines and traces, and the \calc\_autorange\ logic has been updated to correctly handle these new shape configurations.

src/components/shapes · high confidence

Redesigned updatemenus with new layout, scrolling, and toggle capabilities

The updatemenus component has been completely rewritten to support a new 'type' attribute (dropdown or buttons), a unified 'direction' attribute for layout orientation, and improved positioning with scrollbars for overflow. Users can now create toggle buttons using the new 'args2' attribute, control button execution via the 'execute' flag, and customize visibility with the 'showactive' attribute. The component also introduces a 'skip' method for buttons that perform no API calls, allowing for custom event handling, and adds support for meta attributes in labels.

src/components/updatemenus · high confidence

Refactored 3D scene and axis layout configuration

The 3D plot layout logic has been reorganized into a modular structure under \src/plots/gl3d/layout\, introducing dedicated files for attributes, defaults, conversion, and rendering specifics. This change standardizes how 3D axes (x, y, z) inherit and override properties from 2D cartesian axes, ensuring consistent handling of tick labels, grid lines, and axis visibility. It also introduces new configuration options for 3D scenes, including explicit camera projection types (perspective vs. orthographic), granular drag and hover mode controls per scene, and improved spike line rendering. Users will see more predictable default behaviors for axis ranges and aspect ratios, along with enhanced customization for 3D scene interactions and visual styling.

src/plots/gl3d/layout · high confidence

Refactored CSS architecture to modular SCSS with updated theming

The CSS styling has been reorganized from a single file into a modular SCSS structure, introducing separate partials for base styles, the modebar, tooltips, the notifier, the cloud dialog, and cursor states. This refactor standardizes the visual theme by defining explicit color variables (e.g., brand primary \#447adb) and applies a consistent 'Open Sans' font stack across components. The modebar now supports both horizontal and vertical orientations with improved focus visibility and hover transitions, while the cloud dialog and notifier have been restyled with modern flexbox layouts and updated border/radius properties.

src/css · high confidence

Refactored drag interaction handling with new alignment and cursor utilities

The drag element component has been restructured to improve interaction reliability and visual feedback. A new 'cover slip' mechanism now listens to document-level mouse and touch events, allowing users to drag elements beyond the plot boundaries without losing the interaction. The system now supports passive touch events for better performance on mobile devices and correctly initializes client coordinates for touch inputs. Additionally, new helper modules provide automatic alignment logic and dynamic cursor changes (e.g., resize arrows) based on the element's position relative to anchors, enhancing the user experience during drag operations.

src/components/dragelement · high confidence

Refactored scattergeo trace into modular components with new location and selection capabilities

The scattergeo trace has been restructured into separate modules (attributes, calc, defaults, plot, hover, select, style) to improve maintainability and consistency with other trace types. This change introduces support for the \locationmode\ 'geojson-id' to match locations against custom GeoJSON features via the new \geojson\ and \featureidkey\ attributes. It also adds persistent lasso and click-to-select functionality, allowing users to select and deselect points on the map. Additionally, the trace now supports \texttemplate\ and \hovertemplate\ for customizable text display, and improves handling of geographic projections and auto-fitting, particularly for data crossing the antimeridian.

src/traces/scattergeo · high confidence

Regenerated TypeScript types from plot-schema

The generated TypeScript definitions in src/types/generated/schema.d.ts have been regenerated from the plot-schema.json source. This update introduces new type definitions such as TraceType (with a deprecated PlotType alias), updated enum values for attributes like Calendar and TransitionEasing, and refined interfaces for common elements like Font and Pattern. Users relying on these generated types will see stricter or updated type constraints reflecting the latest schema changes, including support for new pattern shapes and transition easing functions.

src/types/generated · high confidence

Regenerated WebGL state management code for unchecked regl

The generated code in src/generated/regl-codegen has been updated to use unchecked regl. This change modifies the internal state tracking and WebGL command emission logic within the generated modules, affecting how rendering states like blending, depth testing, and stencil operations are managed during draw calls.

src/generated · medium confidence

Slider component restructured with new attributes and event handling

The slider component has been refactored to support a 'skip' method for steps, allowing sliders to function without triggering API calls or automatic state binding, which is useful for custom component interfaces. A new 'execute' boolean attribute has been added to steps to control whether the API method is run, enabling manual execution via events like \plotly\_sliderchange\. The component now includes a 'currentvalue' display option with configurable prefix, suffix, and alignment, and supports padding via a 'pad' attribute. Additionally, the slider's layout and positioning logic has been updated to use the new automargin framework, and touch interactions are now supported.

src/components/sliders · high confidence

Unified hover mode and enhanced hover label styling

The hover interaction system has been refactored to support 'x unified' and 'y unified' hover modes, which consolidate data from multiple traces at the same axis position into a single, shared hover label. This change introduces new layout attributes including \hoversort\ to control the ordering of items in unified labels, \hoversubplots\ to define how hover effects expand across overlapping axes, and \hoveranywhere\/\clickanywhere\ to emit events even when the cursor is not directly over a trace. Additionally, trace-level \hoverlabel\ properties (such as \bgcolor\, \bordercolor\, \font\, \align\, and \namelength\) now support array values, allowing for per-point customization of hover label appearance.

src/components/fx · high confidence

Updated modebar icons and added new drawing tool icons

The modebar icons have been updated, including a new link icon for the share button and a new icon for the JSON button. Additionally, new icons have been added to support drawing new shapes, such as drawopenpath, drawclosedpath, lasso, selectbox, drawline, drawrect, drawcircle, and eraseshape.

src/fonts · high confidence

Volume trace gains opacity scaling and hover formatting

The volume trace now supports \opacityscale\ (inherited from the surface trace) to control how opacity varies with data values, and includes hover formatting attributes (\xhoverformat\, \yhoverformat\, \zhoverformat\, \valuehoverformat\) for consistent tooltip presentation. These changes align the volume trace's attribute schema and rendering behavior more closely with other 3D traces like isosurface and surface.

src/traces/volume · high confidence

Test coverage

3559 commits adding/updating tests in test/jasmine/tests; Add strict D3 validation tests and regenerate plot schema; Added bundle-level regression tests for core, traces, and configuration; Added test utility modules for image asset path resolution and mock discovery; New Jasmine test infrastructure and asset helpers; New Jasmine test runner configuration; New image testing infrastructure with baseline generation and pixel comparison.

Dependencies

Initialize project dependency manifests and build configuration

This change introduces the foundational dependency and build configuration files for the project. It adds a \package.json\ and \package-lock.json\ at the root level, along with a \composer.json\ for PHP package registry compatibility. It also establishes a \stackgl\_modules\ subdirectory containing its own \package.json\ and \package-lock.json\ to manage WebGL-related dependencies (such as \gl-mesh3d\, \gl-surface3d\, and \glslify\) separately, and a \topojson\ subdirectory with its own \package.json\ for geospatial data processing tools.

(dependencies) · high confidence

Housekeeping

Repository maintenance and documentation overhaul

This release introduces a comprehensive set of documentation and repository maintenance updates. It adds an AGENTS.md guide for coding agents, updates CONTRIBUTING.md with new workflows and label definitions, and refreshes BUILDING.md with Angular CLI integration details. The CHANGELOG.md is updated to v4.1.1, and CITATION.cff is added for academic referencing. Configuration files like .gitignore and .npmignore are refined to better manage build artifacts and source files, while .nvmrc sets the Node.js version to 22.23.0. The README.md is updated with current usage examples, bundle information, and community links.

(repo-wide) · 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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 49 → 41 (-7.4)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 42 → 42 (+0.0)
  • Architecture 86 → 85 (-1.2)
  • Maturity 66 → 66 (-0.1)
  • Readiness 41 → 26 (-14.3)
  • Security 67 → 69 (+2.4)
  • Performance 60 (new)

Resolved (192)

  • Dependency hygiene PARTLY measured — npm pinning read, dependency currency not (no pnpm-resolved versions to grade)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • High CVE: [GHSA redacted] (topojson/package-lock.json)
  • Hotspot: src/components/drawing/index.js (src/components/drawing/index.js)
  • Hotspot: src/components/modebar/buttons.js (src/components/modebar/buttons.js)
  • Hotspot: src/lib/geo_location_utils.js (src/lib/geo_location_utils.js)
  • Hotspot: src/lib/index.js (src/lib/index.js)
  • Hotspot: src/plot_api/plot_api.js (src/plot_api/plot_api.js)
  • Hotspot: src/plots/plots.js (src/plots/plots.js)
  • Hotspot: src/traces/parcoords/parcoords.js (src/traces/parcoords/parcoords.js)
  • Hotspot: src/traces/quiver/style.js (src/traces/quiver/style.js)
  • Hotspot: src/traces/scattergl/convert.js (src/traces/scattergl/convert.js)
  • Off-boarding risk: anonymized user #1
  • Off-boarding risk: anonymized user #2
  • Rotate the exposed credentials — git history can't be un-committed
  • Secret: generic-api-key (src/plots/maplibre/constants.js)
  • Secret: generic-api-key (tasks/util/constants.js)
  • Secret: generic-api-key (tasks/util/constants.js)
  • Secret: generic-api-key (tasks/util/constants.js)
  • …and 172 more

New (373)

  • Documentation: no contributor guidance (README.md)
  • 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] (package-lock.json)
  • High CVE: [GHSA redacted] (topojson/package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • Hotspot: src/plots/geo/geo.js (src/plots/geo/geo.js)
  • Hotspot: src/traces/quiver/calc.js (src/traces/quiver/calc.js)
  • Hotspot: src/traces/sankey/plot.js (src/traces/sankey/plot.js)
  • Hotspot: src/traces/scattergl/hover.js (src/traces/scattergl/hover.js)
  • Medium CVE: [GHSA redacted] (stackgl_modules/package-lock.json)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • …and 353 more

Changes since last survey

  • 26 commits — 17 feature/other, 9 fixes

By area

  • (repo) — 6 commits
  • src/components — 4 commits
  • test/jasmine — 3 commits
  • draftlogs/8080_fix.md — 2 commits
  • src/plot_api — 2 commits
  • src/traces — 2 commits
  • draftlogs/8066_change.md — 1 commit
  • draftlogs/8079_fix.md — 1 commit
  • draftlogs/8086_fix.md — 1 commit
  • draftlogs/8087_fix.md — 1 commit
  • draftlogs/XXXX_fix.md — 1 commit
  • src/lib — 1 commit
  • src/types — 1 commit

Notable commits

  • fix: Fix file name
  • fix: Merge pull request #8061 from Lexachoc/fix-lib-resolve
  • fix: Merge pull request #8080 from Yahiro025/fix/download-image-opts-optional-8072
  • fix: Merge pull request #8087 from plotly/cam/8086/fix-arrayOk-types-typed-array
  • fix: fix unresolved drawing methods
  • fix: fix unresolved lib methods
  • fix: fix(types): make downloadImage opts optional
  • fix: fix: Allow typed arrays for numeric arrayOk attributes
  • fix: fix: Pick the trace drawn last on a hover tie in scattergl and splom
  • change: Add config.edits attribute description
  • change: Add draftlog
  • change: Add draftlog
  • change: Add draftlogs
  • change: Add missing key to test
  • change: Add tests
  • change: Apply batched suggestions from code review
  • change: Merge pull request #7991 from CAOShurong/docs/colorbar-dtick-log-syntax
  • change: Merge pull request #8066 from plotly/cam/8057/update-toImageButtonOptions-attribute
  • change: Merge pull request #8079 from plotly/cam/8077/hover-tie-scattergl
  • change: Refactor modeBarButtons export syntax
  • …and 6 more

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

Survey your own repository

plotly/plotly.js 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 1 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 62d72143a4bd4a6a64188ca29fae85147cdf5290 — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.