# CanvasXpress (v71.1) > CanvasXpress is a source-available JavaScript library for interactive, reproducible scientific data visualization. A single grammar-of-graphics engine — data → aesthetics → layers (geom × stat × position) → scales → coord → facet — renders 60+ chart types from one portable JSON specification (meta.cxplot) — clustered heatmaps with dendrograms, volcano, Kaplan-Meier, oncoprint, UpSet, genome browser, network, circular, Sankey, choropleth/symbol maps, 3D scatter and more — with in-chart hierarchical and k-means clustering, regression/loess/quantile fits with confidence bands, data transforms, reference-line and range annotations, 20+ built-in themes, a themeable UI (dataUIStyle presets, light/dark/auto widgets via widgetsTheme or data-cx-ui-theme, each preset keeping its own accent colour in dark, --cx-ui-* CSS variables), an interactive data table, highlight/ghost/focus emphasis and screen-reader/keyboard accessibility, and including KPI indicators — gauges, ring meters and bullet graphs that share one range/target model with qualitative range bands, reference targets and click-to-select tiles that broadcast to linked charts. It offers first-class R, Python and JavaScript APIs that share the same engine and grammar, a no-code interactive UI (zoom, filter, sort, transform, facet, broadcast) where selections and filters coordinate across every linked chart and a whole page can be saved and restored as a named view, with shelf-style field mapping (Marks/Facets/Filters) plus calculated fields, binning and aggregation, drill-down hierarchies (click a mark to filter and regroup to the next annotation level via drillHierarchy, with a breadcrumb and ESC to step up; dashboards add declarative drill-through actions), built-in time-series forecasting (exponential smoothing with prediction intervals, matching R's HoltWinters), a structured chart footer (notes, linked source, byline, Get-the-data CSV download, kept in image exports), editorial annotations (arrow/curved callouts with drag-to-place, direct end-of-line series labels), editorial chart types (parliament hemicycles, election half-donuts, before-to-after arrow plots), classed choropleths (Jenks natural breaks, quantile, equal width) with stepped legends and region labels, publishing tables (in-cell bars and sparklines, per-column number formats), an editorial publication theme and responsive width rules (responsiveRules config overrides per breakpoint, reverted on resize), locale-aware number formatting on every display surface (numberFormat presets, sprintf or locale/currency/compact specs, per-axis and per-tooltip/legend/data-label overrides), live streaming (pushData appends new readings to a chart and keeps a rolling window; dashboards subscribe panels to Server-Sent-Events streams without code), a reproducible audit trail where every committed action is a replayable grammar operation with undo/redo, a built-in AI copilot, a Model Context Protocol (MCP) server (canvasxpress-mcp) so AI agents can build and edit figures, and a connectors package (canvasxpress-connectors) for charting authenticated SQL databases, cloud warehouses, DuckDB/Parquet and Google Sheets without exposing credentials to the browser, and a dashboards package (canvasxpress-dashboards) — a no-code builder and portable JSON spec to compose, coordinate, persist and share linked charts, with pluggable storage (file/S3/Postgres/Google Drive). It also meets users inside their tools: a Jupyter/Colab/marimo widget (canvasxpress-anywidget), a %%cxplot IPython magic, Streamlit and Dash components, a VS Code notebook renderer, a Quarto shortcode, an Observable module, and CanvasXpressBio for Bioconductor SummarizedExperiment objects. Charts are accessible: every rendered canvas carries a screen-reader text alternative (WCAG 2.1 role="img" plus a generated aria-label describing chart type, titles, axes, series/sample counts and value range) that regenerates whenever the chart updates (or the author's own alt text via a11yDescription, also written into SVG exports and as the tagged figure of PDF exports), plus a screen-reader data table, keyboard traversal of data points, a high-contrast theme and reduced-motion support. The figure format is a published standard: versioned JSON Schemas at /schema/ (cxfigure, cxplot and the full config parameter schema), a compatibility policy, a schema validator and a headless renderer exposed by canvasxpress-mcp (/validate, /render). Packaging is modern: npm ships an ESM entry with an exports map plus the UMD bundle and strict TypeScript definitions generated from the parameter registry (closed graphType union, per-graph-type CXConfigFor). Every GitHub release is archived on Zenodo (concept DOI 10.5281/zenodo.22261679); the preferred citation is the JOSS 2025 paper (doi:10.21105/joss.07529) and a CITATION.cff ships in the repository. The built-in AI assistant can be pointed at a self-hosted canvasxpress-mcp server (seven provider backends incl. fully local Ollama; keys stay on the server) and a page-level policy (meta canvasxpress-llm-outbound=off or CanvasXpress.llmOutbound=false) blocks all outbound inference. ## Documentation - [Documentation](https://www.canvasxpress.org/documentation.html): Core concepts and getting started - [Architecture](https://www.canvasxpress.org/architecture.html): Grammar-of-graphics engine and the meta.cxplot spec - [Spec](https://www.canvasxpress.org/spec.html): The versioned, published self-describing figure format + JSON Schemas + compatibility policy - [Quality](https://www.canvasxpress.org/quality.html): Visual-regression suite, CI, browser support and reproducibility signals - [Benchmarks](https://www.canvasxpress.org/benchmarks.html): Honest, reproducible six-library performance numbers (Plotly, ECharts, Chart.js, deck.gl) — including where others win - [Accessibility](https://www.canvasxpress.org/accessibility.html): WCAG 2.1 AA conformance report (VPAT-style): screen-reader, keyboard, high-contrast, reduced-motion - [Regulated & GxP](https://www.canvasxpress.org/compliance.html): How reproducibility, audit trail and self-describing exports support 21 CFR Part 11 / GxP workflows - [Quick Start](https://www.canvasxpress.org/quickstart.html): Install and first visualization - [Learn & Migrate](https://www.canvasxpress.org/migrate.html): First ten minutes, ggplot2/Plotly translation guides, and eleven task recipes (volcano, Kaplan-Meier, oncoprint, heatmap, boxplot, PCA, correlation, network, time series, stacked bar, dose-response) in R, Python and JS - [Interfaces](https://www.canvasxpress.org/interfaces.html): R, Python, JavaScript, React and cxplot APIs - [MCP & Agents](https://www.canvasxpress.org/mcp.html): canvasxpress-mcp Model Context Protocol server for AI agents: generate, validate (JSON Schema, pointer-level errors), headless render, schema:// and audit:// resources - [How to cite](https://www.canvasxpress.org/references.html#cite): JOSS 2025 paper (preferred citation), R-package BibTeX, per-release Zenodo DOIs, CITATION.cff - [Dashboards](https://www.canvasxpress.org/dashboards/): canvasxpress-dashboards no-code builder + spec to compose, persist and share linked charts - [R interface](https://www.canvasxpress.org/r-interface.html): library(canvasXpress) — CRAN package - [Python interface](https://www.canvasxpress.org/python-interface.html): pip install canvasxpress — PyPI package - [Julia interface](https://www.canvasxpress.org/julia-interface.html): CanvasXpress.jl — Julia General registry package (IJulia, Pluto, VS Code) - [cxplot interface](https://www.canvasxpress.org/cxplot-interface.html): Fluent grammar-of-graphics builder - [ggplot interface](https://www.canvasxpress.org/ggplot-interface.html): Convert ggplot2 plots to interactive charts - [Parameters](https://www.canvasxpress.org/parameters.html): Full configuration parameter reference - [Examples](https://www.canvasxpress.org/examples.html): Gallery of scientific examples - [Compare](https://www.canvasxpress.org/compare.html): CanvasXpress vs. Highcharts, Plotly, ECharts, D3, Chart.js, Tableau/Spotfire, Power BI and Datawrapper - [CanvasXpress vs. Spotfire](https://www.canvasxpress.org/canvasxpress-vs-spotfire.html): Long-form article: the engine and canvasxpress-dashboards vs. Spotfire, including where Spotfire is the better choice - [CanvasXpress vs. Tableau](https://www.canvasxpress.org/canvasxpress-vs-tableau.html): Long-form article: the engine and canvasxpress-dashboards vs. Tableau, including where Tableau is the better choice - [CanvasXpress vs. Plotly Dash](https://www.canvasxpress.org/canvasxpress-vs-dash.html): Long-form article: declarative CanvasXpress dashboards vs. Dash callback apps, with the same dashboard built both ways - [Data formats](https://www.canvasxpress.org/data.html): y/x/z data structures and file formats - [File loading](https://www.canvasxpress.org/files.html): Load JSON/XML/CSV/TSV/Parquet/GML/GPML/PNG/SVG/PDF plus .gz/.zip/.tar.gz archives (manifest, config+data pair, or single file) by drag-drop or URL - [Authenticated data](https://www.canvasxpress.org/authenticated-data.html): Chart SQL databases & Google Sheets via canvasxpress-connectors - [Audit trail](https://www.canvasxpress.org/audit.html): Reproducible, replayable interaction log - [Highlighting & Selecting](https://www.canvasxpress.org/highlighting.html): Emphasize, ghost or focus data with highlightMode, selectionMode and highlightBy - [Forecasting](https://www.canvasxpress.org/forecasting.html): Project a time series forward with a prediction interval: showForecast (SES / Holt / Holt-Winters, as R stats::HoltWinters), per-group forecasts, date axes, and R forecast/geom_forecast drawn as-is - [Editorial Chart Types](https://www.canvasxpress.org/editorial-charts.html): Parliament charts (pieType parliament), election donuts (pieShape half), before-to-after arrow plots (dumbbellArrowDirection order), range plots and small multiples - [Annotations](https://www.canvasxpress.org/annotations.html): Editorial callouts with straight/curved arrow connectors to data points (drag-to-place writes fractions back to the config), free text notes, and direct end-of-line series labels (showLineEndLabels) replacing the legend - [Chart Footer](https://www.canvasxpress.org/chart-footer.html): Structured publication footer: notes, source with link, byline, Get-the-data CSV download and footerAlign; drawn on the canvas so PNG/SVG exports keep the attribution - [Number Formats](https://www.canvasxpress.org/number-formats.html): Locale-aware number formatting on every display surface: numberFormat plus tooltip/legend/dataLabel and per-axis overrides; presets (comma, percent, dollar, compact), sprintf, or {locale, style, currency, decimals}; Intl-backed, off by default - [UI styles](https://www.canvasxpress.org/ui-styles.html): Restyle every widget around a chart (toolbar, menus, Customizer, data table, filters, dialogs) with dataUIStyle, in light and dark via widgetsTheme; each style keeps its own accent colour in dark - [Live streaming](https://www.canvasxpress.org/streaming.html): Charts that follow data as it arrives: pushData appends readings and keeps a rolling streamWindow; dashboards subscribe panels to Server-Sent-Events streams (canvasxpress-connectors) without code - [Themes & Color Schemes](https://www.canvasxpress.org/themes.html): Restyle every non-data element with a named theme (theme config or setTheme: CanvasXpress, CanvasXpressDark, CanvasXpressBlue, CanvasXpressTraditional and themed palettes) and choose the data palette with colorScheme (User colors or built-in ColorBrewer schemes) - [Decorations & Reference Lines](https://www.canvasxpress.org/decorations.html): The decorations config: threshold/reference lines, shaded ranges, markers, points, on-chart text and fitted curves (1D: line/range/point/text/marker/error; scatter: linear/regression/polynomial/etc or shapes) drawn into every PNG/SVG/PDF export - [Statistical Fits & Clustering](https://www.canvasxpress.org/statistics.html): Regression (showRegressionFit, regressionType) and LOESS (showLoessFit) trend fits with a confidence band (showConfidenceIntervals, confidenceIntervalColor, fitLineColor), and heatmap clustering (samplesClustered/variablesClustered with distance/linkage, or k-means) - [Exporting & Saving](https://www.canvasxpress.org/exporting.html): Save any chart as PNG, SVG, PDF or JSON, or print it, from the right-click menu or the API; image exports keep titles, legends, decorations and the footer, and the JSON export is the reproducible self-describing spec - [AI copilot](https://www.canvasxpress.org/llm.html): Generate chart specs from plain English - [Integrations](https://www.canvasxpress.org/integration.html): Install + examples for HTML, Python, Jupyter/VS Code notebooks, Streamlit, Dash, R, Bioconductor, React, Vue, Quarto, Observable - [Updates](https://www.canvasxpress.org/updates.html): Changelog - [Changelog](https://www.canvasxpress.org/changelog.html): Curated user-facing release notes and the versioning / release-channel policy - [Governance](https://www.canvasxpress.org/governance.html): Maintainers, decision-making, release process and succession guarantees - [Support](https://www.canvasxpress.org/support.html): Community support and commercial support tiers with response commitments - [License text](https://www.canvasxpress.org/LICENSE.txt): Verbatim CanvasXpress Community License file ## Knowledge base (machine-readable, for LLMs) - [Capabilities](https://www.canvasxpress.org/data/md/CAPABILITIES.md): What CanvasXpress can do today — shipped features across charting, interactivity, data, ecosystem and reproducibility - [Feature inventory](https://www.canvasxpress.org/data/md/FEATURES.md): Complete generated map of every graph type and parameter category, grouped by family, with also-known-as terms from other tools (machine-readable: /data/md/features.json) - [Overview](https://www.canvasxpress.org/data/md/OVERVIEW.md): Working minimal call for every graph type - [Minimal parameters](https://www.canvasxpress.org/data/md/MINIMAL-PARAMETERS.md): Minimal required config per graph type - [Schema](https://www.canvasxpress.org/data/md/SCHEMA.md): Data and configuration schema - [Config JSON Schema](https://www.canvasxpress.org/schema/canvasxpress-config-latest.schema.json): Every documented config parameter with type, default and allowed values (JSON Schema, generated from the engine registry) - [Figure JSON Schema](https://www.canvasxpress.org/schema/cxfigure-1.0.schema.json): The persisted {data, config} self-describing figure format - [cxplot JSON Schema](https://www.canvasxpress.org/schema/cxplot-1.0.schema.json): The materialized grammar-of-graphics spec - [Decision tree](https://www.canvasxpress.org/data/md/DECISION-TREE.md): Choosing the right chart type - [Rules](https://www.canvasxpress.org/data/md/RULES.md): Config generation rules and constraints - [Parameter compatibility](https://www.canvasxpress.org/data/md/PARAMETER-COMPATIBILITY-MATRIX.md): Which parameters apply per graph type - [Comparison](https://www.canvasxpress.org/data/md/COMPARISON.md): CanvasXpress vs other libraries - [Chain of thought](https://www.canvasxpress.org/data/md/CHAIN-OF-THOUGHT.md): Requirement → config reasoning - [Contradictions](https://www.canvasxpress.org/data/md/CONTRADICTIONS.md): Common config pitfalls to avoid ## Packages & source - [Source (GitHub)](https://github.com/neuhausi/canvasXpress) - [MCP server (GitHub)](https://github.com/neuhausi/canvasxpress-mcp) - [Connectors (GitHub)](https://github.com/neuhausi/canvasxpress-connectors) - [Dashboards (GitHub)](https://github.com/neuhausi/canvasxpress-dashboards) - [LLM knowledge base (GitHub)](https://github.com/neuhausi/canvasxpress-LLM) - [R package (CRAN)](https://cran.r-project.org/package=canvasXpress) - [Python package (PyPI)](https://pypi.org/project/canvasxpress/) - [Connectors package (PyPI)](https://pypi.org/project/canvasxpress-connectors/) - [Notebook widget canvasxpress-anywidget (PyPI)](https://pypi.org/project/canvasxpress-anywidget/) - [IPython %%cxplot magic canvasxpress-magic (PyPI)](https://pypi.org/project/canvasxpress-magic/) - [Streamlit component canvasxpress-streamlit (PyPI)](https://pypi.org/project/canvasxpress-streamlit/) - [Dash component canvasxpress-dash (PyPI)](https://pypi.org/project/canvasxpress-dash/) - [VS Code notebook renderer (Marketplace)](https://marketplace.visualstudio.com/items?itemName=canvasxpress.canvasxpress-vscode) - [Quarto shortcode extension (GitHub)](https://github.com/neuhausi/canvasxpress-quarto) - [Observable module in canvasxpress-js (GitHub)](https://github.com/neuhausi/canvasxpress-js) - [CanvasXpressBio for Bioconductor (GitHub)](https://github.com/neuhausi/CanvasXpressBio) - [JavaScript package (npm — ESM + UMD + TypeScript defs)](https://www.npmjs.com/package/canvasxpress) - [cxspec — the published figure spec + converters (GitHub)](https://github.com/neuhausi/cxspec) - [Zenodo archive (concept DOI)](https://doi.org/10.5281/zenodo.22261679) - [JOSS paper (preferred citation)](https://doi.org/10.21105/joss.07529) ## Optional - [Full knowledge base](https://www.canvasxpress.org/llms-full.txt): Summary plus inlined KB - [Full site map](https://www.canvasxpress.org/sitemap.xml): Every indexable page