Skip to content

docs: add library expansion roadmap#5951

Merged
MarkusNeusinger merged 9 commits into
mainfrom
claude/research-charting-libraries-DVk2q
May 7, 2026
Merged

docs: add library expansion roadmap#5951
MarkusNeusinger merged 9 commits into
mainfrom
claude/research-charting-libraries-DVk2q

Conversation

@MarkusNeusinger
Copy link
Copy Markdown
Owner

@MarkusNeusinger MarkusNeusinger commented May 7, 2026

Summary

Strategic overview for expanding anyplot beyond Python into a true multi-language gallery. Estimates the global charting-library market and recommends a concrete priority order.

Key findings

  • Language demand: Python ~45 %, JavaScript/TS ~35 %, R ~10 %, everything else ~10 %. JavaScript is the single biggest gap today.
  • 3 of 9 current Python entries are non-native bindings: Plotly (JS native), Highcharts (JS native), lets-plot (Kotlin native). The "native / most-used variant only" rule suggests fixing Highcharts (move to JS) and adding a JS Plotly entry alongside the Python one.
  • Tier 1 additions: Chart.js, D3.js, ECharts.
  • Tier 2: ggplot2 (R), Plotly.js, Highcharts (JS, replaces Python entry).
  • Tier 3: Recharts, Observable Plot, Makie.jl, ApexCharts.

After Phase 3 anyplot covers ~95 % of global charting demand with 13 entries.

Settled design decisions (§9 in the doc)

  1. JS / TS = one language. Snippets authored in plain JS; TSX only when a library is realistically only used that way (Recharts).
  2. React / Vue / Svelte / Angular = JavaScript with a framework metadata flag, not separate languages. Frontend exposes a framework filter.
  3. Cross-language libraries appear once, under the variant with ≥ 3× more weekly downloads (else native). One-release deprecation-window exception when a library moves between languages.
  4. Highcharts moves Python → JavaScript. Both entries kept for one release as a deprecation window, then the Python entry is removed.
  5. Licensing: FOSS-first. Libraries with a free-for-private-use tier (Highcharts) are allowed but tagged and never crowd out FOSS alternatives at the same tier. Suggested license metadata field uses valid SPDX identifiers (GPL-2.0-only / GPL-2.0-or-later, …) plus a LicenseRef-Commercial-Free-NonCommercial form for commercial-with-free-tier libraries. Hard-paywalled libraries are out of scope.
  6. Annual review cadence. Once a year revisit the doc against four signals: download trends (re-run the 3× test), Plausible visitor data, trend scan (JS Rising Stars / PyPI top-movers / GitHub Trending), and tier reshuffle. Off-cycle reviews triggered by major releases of in-scope libraries.
  7. Language scope. New languages must satisfy three criteria: code-driven (no GUI workflows), free toolchain (so CI can render previews), and a public package registry. After Python/R/JS only Julia (Makie.jl) has a clear case (Phase 5); Swift Charts is an optional Phase 6. Java, Go, Rust, C#, F#, Scala etc. are deferred or skipped. Excel, Tableau, Power BI, MATLAB, SAS, SPSS, Stata, Mathematica, Origin and Prism are explicitly out of scope.
  8. amCharts: skipped. Duplicates the Highcharts slot at ~18× lower download volume; would weaken the FOSS-first stance. Revisit only if visitor data shows unmet demand.

Open questions

None — §10 is now empty. New questions surface through the annual review.

Test plan

  • Markdown renders correctly on the site / in GitHub preview
  • Team confirms the eight settled decisions before implementation work starts

https://claude.ai/code/session_01A9yaZzBa3zR4W7KHs9ruH6


Generated by Claude Code

Strategic overview ranking language and library candidates by estimated
global charting demand, with concrete priorities for moving anyplot
beyond Python (Tier 1: Chart.js, D3.js, ECharts; Tier 2: ggplot2,
Plotly.js, Highcharts JS). Flags the three current Python entries
(Plotly, Highcharts, lets-plot) that are non-native bindings and
recommends migrations under the "native / most-used variant only" rule.
Copilot AI review requested due to automatic review settings May 7, 2026 17:02
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new concept document that outlines a proposed roadmap for expanding anyplot beyond Python into a multi-language gallery, including a prioritized list of target libraries and open decision points for the team.

Changes:

  • Introduces a market-estimate-driven prioritization of languages and charting libraries (JS/TS, R, later Julia/JVM/.NET).
  • Documents a “cross-language library” policy application (e.g., Plotly/Highcharts placement) and a phased rollout plan.
  • Captures open questions for team alignment (Highcharts migration approach, React-only libraries, TS vs JS registry stance, commercial licenses).

Comment thread docs/concepts/library-expansion.md Outdated
Comment on lines +8 to +11
> **Note on numbers.** The percentages below are *estimates* synthesised from
> public signals (Stack Overflow Developer Survey, PyPI/npm download counts,
> GitHub stars, Google Trends, JS Rising Stars). They are good enough to
> prioritise — they are not authoritative market shares.
Comment thread docs/concepts/library-expansion.md Outdated
Comment on lines +19 to +29
| # | Library | Native language | In anyplot as | Notes |
|---|------------|-----------------|---------------|--------------------------------------------------|
| 1 | Matplotlib | Python | Python | True native. |
| 2 | Seaborn | Python | Python | Built on matplotlib. |
| 3 | Plotly | JavaScript | Python | Python is a wrapper around `plotly.js`. |
| 4 | Bokeh | Python | Python | True native. |
| 5 | Altair | Python | Python | Python interface to Vega-Lite (JSON spec). |
| 6 | plotnine | Python | Python | Python port of R's `ggplot2`. |
| 7 | Pygal | Python | Python | True native. |
| 8 | Highcharts | JavaScript | Python | Python is a paid wrapper; native is JS. |
| 9 | lets-plot | Kotlin | Python | Kotlin/JVM core; Python is one of the front-ends.|
Comment thread docs/concepts/library-expansion.md Outdated

| Library | Share within R | Notes |
|-----------------|---------------:|-------------------------------------------------------------|
| **ggplot2** | ~70 % | The de-facto standard. R-native target #1. |
Comment thread docs/concepts/library-expansion.md Outdated
source form, or as two separate "languages" in the registry? (Recommend:
one — the file extension and tooling differ, but the library identity does
not.)
4. **Commercial licenses.** Highcharts requires a paid licence for commercial
claude added 2 commits May 7, 2026 17:21
Replaces the ambiguous "native or most-used" rule with a single
quantitative criterion: a binding qualifies as the canonical entry if
it has >=3x more weekly downloads than every other variant; otherwise
default to the native implementation.

Consequences:
- Plotly stays in Python (PyPI ~22x npm)
- lets-plot stays in Python
- Highcharts is the only existing entry that moves (to JavaScript)
- Plotly.js drops out of Tier 2 (one entry per library)
- Phase 2 only adds Highcharts JS as a replacement; cumulative count
  after Phase 3 is now 13, not 14
JS and TS share the same library APIs and TS is a syntactic superset of
JS, so charting snippets can be authored once in plain JavaScript and
used unchanged from TS. Documented authoring convention: plain JS by
default, TSX only for libraries that are essentially never shown
without it (Recharts).

Resolves the corresponding open question by promoting it to a settled
decision in section 6.
Copilot AI review requested due to automatic review settings May 7, 2026 17:24
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 7 comments.

Comment thread docs/concepts/library-expansion.md Outdated
ranks candidates by reach and integration cost, and recommends a concrete
priority order.

> **Note on numbers.** The percentages below are *estimates* synthesised from
Comment thread docs/concepts/library-expansion.md Outdated
> **Note on numbers.** The percentages below are *estimates* synthesised from
> public signals (Stack Overflow Developer Survey, PyPI/npm download counts,
> GitHub stars, Google Trends, JS Rising Stars). They are good enough to
> prioritise — they are not authoritative market shares.
Comment thread docs/concepts/library-expansion.md Outdated
| 6 | plotnine | Python | Python | Python | Sister library to ggplot2, not a wrapper. |
| 7 | Pygal | Python | Python | Python | Native = most-used. |
| 8 | Highcharts | JavaScript | Python | **JavaScript** | npm ~1 M / wk vs `highcharts-core` ~5 k / wk.|
| 9 | lets-plot | Kotlin | Python | Python | Python front-end has the most users today. |
Comment thread docs/concepts/library-expansion.md Outdated

| Library | Share within R | Notes |
|-----------------|---------------:|-------------------------------------------------------------|
| **ggplot2** | ~70 % | The de-facto standard. R-native target #1. |
Comment thread docs/concepts/library-expansion.md Outdated
2. **React-specific libraries.** Recharts, Visx, Nivo only make sense if
anyplot intends to support framework-specific entries. If we keep entries
framework-agnostic, drop them and lean on Chart.js / ECharts.
3. **Commercial licenses.** Highcharts requires a paid licence for commercial
Comment on lines +206 to +207
After Phase 3 anyplot covers ~95 % of global charting-library demand with 13
entries.
Comment on lines +1 to +5
# Library Expansion Roadmap

Strategic overview for expanding anyplot beyond Python into a true multi-language
gallery. This document estimates the global market for charting libraries,
ranks candidates by reach and integration cost, and recommends a concrete
claude added 2 commits May 7, 2026 19:15
React is a JavaScript library, not a language - JSX/TSX compiles to
plain JS. Same for Vue, Svelte, Angular. The framework requirement is
a runtime constraint, so model it on library metadata
('framework: none|react|vue|...') rather than as a separate
'language_id'. Keeps the registry simple, lets the frontend offer
dual filters ('all JS' / 'React-compatible'), and indexes
framework-locked libraries under both their language and framework
keywords for SEO.

Resolves the corresponding open question by promoting it to a settled
decision in section 6.
Adds a "Licensing policy" subsection: FOSS-first, with libraries that
have a free-for-private-use tier (Highcharts, amCharts) allowed but
tagged and never displacing FOSS alternatives at the same tier. Hard-
paywalled libraries are out of scope. Suggests a 'license' metadata
field per library and a "FOSS only" frontend filter.

Promotes the Highcharts-migration and commercial-license open questions
to settled decisions and reorganises section 9 into "Settled decisions"
plus a much shorter "Open questions" list. Tier 2 entries now show
their licence inline.
Copilot AI review requested due to automatic review settings May 7, 2026 19:20
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 5 comments.

Comment thread docs/concepts/library-expansion.md Outdated

### Tier 2 — high value, slightly more work

4. **ggplot2 (R)** — MIT/GPL-2. Unlocks the entire R / academic audience;
Comment thread docs/concepts/library-expansion.md Outdated
page. Suggested metadata field on each library:

```python
"license": "MIT" | "Apache-2.0" | "BSD-3-Clause" | "ISC" | "GPL-2.0"
Comment on lines +261 to +262
After Phase 3 anyplot covers ~95 % of global charting-library demand with 13
entries.
Comment on lines +1 to +5
# Library Expansion Roadmap

Strategic overview for expanding anyplot beyond Python into a true multi-language
gallery. This document estimates the global market for charting libraries,
ranks candidates by reach and integration cost, and recommends a concrete
Comment thread docs/concepts/library-expansion.md Outdated
Comment on lines +280 to +284
## 10. Open questions for the team

1. **Refresh cadence for the 3× threshold.** Download numbers shift over time.
Recommend re-checking the canonical-variant decisions once a year and on
any major release of a contender.
claude added 2 commits May 7, 2026 19:26
Yearly review walks four signals: PyPI/npm download trends to re-run
the 3x canonical-variant test, Plausible visitor data to see which
existing entries actually draw traffic, a trend scan (JS Rising Stars,
PyPI top-movers, GitHub Trending) for new contenders, and a tier
reshuffle in section 7 based on the above. Off-cycle reviews triggered
by a major release of an in-scope library or a clear emerging
contender. Removes the corresponding open question; only the amCharts
inclusion question remains.
Defines three scope criteria for any new language entry: code-driven
(no GUI workflows), free toolchain (so CI can render previews and
contributors avoid licence costs), and a public package registry.

Explicitly lists tools that fail at least one criterion - Excel,
Google Sheets, Tableau, Power BI, Looker, Qlik, MATLAB, SAS, SPSS,
Stata, Mathematica, Origin, SigmaPlot, Prism - so the question
doesn't get re-asked at every annual review.

Reranks remaining candidates: Julia (Makie.jl) is the only clear
"add later" entry; Swift Charts becomes an optional Phase 6 if
Apple-platform audience matters; Kotlin/C#/Java/Go/Rust/F#/Scala
are deferred or skipped.
Copilot AI review requested due to automatic review settings May 7, 2026 19:44
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 5 comments.

Comment thread docs/concepts/library-expansion.md Outdated

### Tier 2 — high value, slightly more work

4. **ggplot2 (R)** — MIT/GPL-2. Unlocks the entire R / academic audience;
Comment on lines +292 to +293
| 2 | Highcharts (replaces Python entry) | — | 12 |
| 3 | ggplot2 | + R | 13 |
Comment on lines +297 to +298
After Phase 3 anyplot covers ~95 % of global charting-library demand with 13
entries.
Comment thread docs/concepts/library-expansion.md Outdated
Comment on lines +302 to +333
## 9. Settled decisions

- **JS / TS treated as one language**, snippets authored in plain JS (TSX
only when a library is realistically only used that way, e.g. Recharts).
- **React / Vue / Svelte / Angular** are JavaScript with a `framework`
metadata flag, not separate languages.
- **Cross-language libraries** appear once, under the variant with ≥ 3× more
weekly downloads (else native).
- **Highcharts** moves from Python to JavaScript. Keep both entries for one
release as a deprecation window, then drop the Python entry.
- **Licensing**: FOSS-first; libraries with a free-for-private-use tier
(Highcharts, amCharts) are allowed but tagged and never crowd out FOSS
alternatives at the same tier.
- **Annual review cadence.** Once a year, revisit this document and check:
1. **Downloads**: re-run the 3× test on every cross-language library; flip
canonical variants where the gap has reversed.
2. **Visitor data** (Plausible): which libraries / plot pages drew the most
traffic? Promote rising entries in the recommendation tiers; demote ones
nobody visits.
3. **Trend scan**: JS Rising Stars, PyPI top-movers, GitHub Trending in
`data-visualization`. Add anything that has clearly broken into the
mainstream and isn't already covered.
4. **Tier reshuffle**: update §7 priority order accordingly.

An off-cycle review is also triggered by a major release of an in-scope
library or a clear emerging contender.

## 10. Open questions for the team

1. **amCharts inclusion.** Same licence model as Highcharts. Add as a Tier 3
entry, or skip on the grounds that Highcharts already covers the
"commercial, free for private" niche?
Comment thread docs/concepts/library-expansion.md Outdated
Comment on lines +145 to +151
A library that exists in many languages appears **exactly once**, under the
**most-used variant**. "Most-used" is decided quantitatively:

> A binding qualifies as the canonical entry if it has **≥ 3× more weekly
> downloads** than every other variant. Otherwise default to the native
> implementation.

claude added 2 commits May 7, 2026 19:54
amCharts duplicates Highcharts' commercial-with-free-tier slot at
~18x lower download volume; a second commercial entry would weaken
the FOSS-first stance set in section 6. Revisit only if Plausible
data shows unmet demand for amCharts-specific examples. Section 10
is now empty - new questions surface through the annual review.
Correctness fixes:
- ggplot2 license: was "MIT/GPL-2", corrected to "MIT" per current CRAN
  DESCRIPTION
- License metadata example now uses valid SPDX identifiers
  (GPL-2.0-only / GPL-2.0-or-later) and a LicenseRef-Commercial-Free-
  NonCommercial form for the Highcharts/amCharts case
- §6 "exactly once" rule now explicitly notes the deprecation-window
  exception used for the Highcharts move
- §8 phased rollout adds a callout explaining why Phase 2 ships
  Highcharts before the higher-ranked ggplot2: Phase 2 reuses the JS
  pipeline from Phase 1, ggplot2 requires a brand-new R runtime

Discoverability:
- Add docs/concepts/library-expansion.md to docs/index.md (Concepts
  section + Documentation Structure tree)

Style consistency (repo uses American English):
- synthesised -> synthesized, prioritise -> prioritize,
  prioritises -> prioritizes
- front-end -> frontend
- de-facto -> de facto
- licence -> license throughout

Skipped: nothing - all 21 review comments dedupe to ten distinct
issues, all addressed above.
Copilot AI review requested due to automatic review settings May 7, 2026 19:59
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

Comment on lines +246 to +248
Net effect on the existing catalogue: **only Highcharts moves.** Plotly and
lets-plot stay where they are because their Python variants outweigh the
native versions by more than the 3× threshold.
Comment on lines +315 to +316
After Phase 3 anyplot covers ~95 % of global charting-library demand with 13
entries.
@MarkusNeusinger MarkusNeusinger merged commit 08e3cce into main May 7, 2026
11 checks passed
@MarkusNeusinger MarkusNeusinger deleted the claude/research-charting-libraries-DVk2q branch May 7, 2026 20:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants