Releases: MarkusNeusinger/anyplot
v2.3.0 — 10 new plot types & end-to-end auto-merge
✨ New
/mappage — force-directed spec map clustered by tag similarity, with a teaser on the landing page (#5647, #5649, #5665).- OG images redesigned in the any.plot() visual identity — branded cards with light/dark variants (#5659).
- Mobile debug: on-device console + richer ErrorBoundary so crashes on phones are inspectable (#5808).
- Legal page gained an avatar in the operator block (#5726).
- 10 new plot types × 9 libraries:
area-stacked,bar-horizontal,bland-altman-basic,count-basic,ice-basic,radar-multi,scatter-embedding,scatter-regression-polynomial,shap-waterfall,spiral-timeseries. - Coverage filled:
horizon-basicgot seaborn (#5851).
🛠️ Fixes
- iOS Safari: polyfilled
requestIdleCallbackso the site loads on iOS (#5816). - POTD: GitHub source link now includes the language segment (#5663); letterbox strips around the preview image removed (#5943).
- Frontend lint: 32 → 0 errors. Five
react-hooks/set-state-in-effectviolations refactored to React 19's "adjust state on prop change" pattern;Math.randompurity issue extracted to a module-level helper (#5818). - Analytics safety: fire-and-forget tasks in
api/analytics.pycould be GC'd mid-flight; now held in a module-level set (#5727).
🏷️ Tag-vocabulary policy
The auto-polish step was stripping valid niche tags (bioinformatics, confidence-interval, ohlc, …) because it treated the recommended-values tables as canonical for every dimension. Vocabulary policy is now asymmetric (#5856, #5859):
plot_typeis canonical — table is authoritative; new types added via PR.data_type/domain/featuresare advisory — any well-formed, recognized data-viz term is valid; polish only moves misclassified tags or canonicalizes synonyms.
Tables expanded with legitimate tags surfaced by an audit of all 327 specs.
🔧 Pipeline
- End-to-end auto-merge: polish PRs and impl PRs squash-merge themselves once green.
gh pr merge --autois set on creation (#5955);auto-update-pr-branches.ymlkeeps behind branches in sync after every push tomain(#5957, #5958). - Autonomous spec polish + cross-library similarity audit in daily-regen pre-flight (#5714).
- Daily-regen defaults to Haiku, gained
spec_idandmodelinputs (#5706). - Resumable regen — split into single-step invocations for local-model workflows (#5650).
- Transient retry hardened across impl-generate / impl-review (#5819, #5725, #5724).
evaluate-plot.pyswitched to the canonical 6-category rubric and bumpedclaude_modeldefault toclaude-sonnet-4-6(#5818).
🗂️ Repo
- Plot implementations moved under
plots/{spec}/implementations/python/{library}.py(metadata undermetadata/python/) to make room for other languages (#5648). - 64
Optional[X]→X | Nonemodernizations via UP007/UP045 (#5727).
📚 Docs
- Library expansion roadmap (#5951).
- Plausible: FCP/TTFB Web-Vitals events documented (#5818).
/seo-proxy/maphandler so bots get a real<title>for the network map (#5818).
Full Changelog: v2.2.0...v2.3.0
v2.2.0 — Regen wave, Cloudflare Access on /debug & 4-attempt pipeline
A quality-regeneration wave (12 specs re-rolled end-to-end on Sonnet, ~3.5× throughput vs. v2.1.0), two coverage gaps filled, a 4th repair attempt added to the impl pipeline, and /debug moved behind Cloudflare Access. No breaking changes.
🔁 Regen wave
12 specs regenerated through impl-generate / review / repair / merge — same plot types, fresh code, higher quality scores. Daily-regen now runs on Claude Sonnet (#5452) and skips the 20:00–24:00 Berlin window (#5517).
✅ Coverage filled
network-basic: 8/9 → 9/9area-mountain-panorama:bokehadded (highchartsstill in-flight)
🔐 Cloudflare Access on /debug
/debug is gated behind Cloudflare Access with a service-token fallback for CI (#5522). Same-origin /api proxy fixes the cookie scope (#5551), and a hard-reload on TypeError fires the page-gate cleanly when the JWT lapses (#5552).
🔧 Pipeline
- Repair budget bumped 3 → 4 attempts with cascading thresholds (90/80/70/60/50).
ADMIN_TOKENPAT forimpl-mergeso--adminbypasses the main-branch ruleset (#5523, #5521).
🧰 Tooling
/Regencommand for unattended library regeneration./auditframework split into per-agent files; 7 new auditors added (#5413/#5451). Critical/High findings applied across multiple waves.- Mandatory PR follow-through codified in
CLAUDE.md(#5553).
⬆️ Dependencies
8 Dependabot bumps landed: uvicorn, setuptools, sqlalchemy, cloud-sql-python-connector, matplotlib, react-router-dom, plus npm-minor / python-minor / actions groups.
Full Changelog: v2.1.0...v2.2.0
v2.1.0 — Tri-state theme, pipeline resilience & 2 new plot types
Three days after the v2.0.0 relaunch: two new plot types, two coverage gaps filled, five existing specs regenerated, a tri-state theme mode, and pipeline hardening. Drop-in over v2.0.0.
🎨 New plot types
| Spec | Coverage | Notes |
|---|---|---|
venn-labeled-items |
9/9 | Venn diagram with labeled members per region |
area-mountain-panorama |
7/9 | Spec refined mid-flight to require jagged piecewise-linear ridgelines (#5411). bokeh + highcharts still in-flight. |
✅ Coverage filled
donut-basic(plotnine): 8/9 → 9/9contour-basic(pygal): 8/9 → 9/9
🔁 Regen
Five specs regenerated for quality / pipeline alignment.
🌗 Tri-state theme mode
Theme toggle gained a system / light / dark state with live OS sync — site follows the OS theme by default while still respecting an explicit user override (#5412).
🔧 Pipeline resilience
The impl-generate / review / repair pipeline is now self-healing against transient Claude Code Action failures (#5410): generate retry budget bumped 2 → 3, repair auto-retries once via marker comment, review auto-retries once via repository_dispatch. All marker counts now use --paginate --per_page=100.
📊 Analytics, polish, backend
- Tracking added for landing-page hero/libraries/palette/nav/footer interactions (#5400).
- Scroll restoration on route change (#5403/#5404), code-view paper aesthetic (#5401), mobile-search width fix (#5363).
- In-memory caching for spec lookups; review feedback from prior attempts now passed back into regeneration runs.
Full Changelog: v2.0.0...v2.1.0
v2.0.0 — anyplot.ai Relaunch
The project rebrands from pyplots.ai to anyplot.ai, ships a redesigned homepage, an Okabe-Ito color palette, and first-class dark mode for both the site and every plot preview. Major because URLs, schema, and the public domain all change.
⚠️ Breaking — bookmarks should switch tohttps://anyplot.ai. Spec URL structure changed (see below).
Highlights
- 🎨 New homepage & visual identity: hero, libraries / palette / specifications sections, MonoLisa typography, Okabe-Ito colorblind-safe palette, theme-adaptive chrome.
- 🌗 Dark mode (site + plots): backend renders dual-theme previews — every plot ships
plot-lightandplot-darkvariants. Theme tokens drive all chrome; mandatory theme-readability check in the AI quality pipeline. - 🌍 Rebrand: domain migration from
pyplots.aitoanyplot.aiwith nginx redirect-loop fixes. - 🔗 URL restructure (breaking): canonical spec URL is now
/{specId}/{language}/{library}. Hub view consolidated under/{specId}with optional?language=filter. Catalog → Plots rename. - 🗄️ Schema (breaking): multi-language path restructure with new
languagestable. Implementations exposepreview_url_light/preview_url_dark(legacypreview_urlaliases the light variant).
CI / infrastructure
- 6 workflows migrated from service-account keys to Workload Identity Federation.
- Bulk-generate moved to paced sequential dispatch with a global mutex.
- Daily cron regenerates the oldest not-recently-updated spec on a 4h cadence with a Berlin-evening blackout.
Quality
- Mandatory dual-theme rendering and readability checks in impl-generate / review.
- WCAG-AA contrast pass for dark-mode adaptive chrome.
- MUI 7 → 9, Vite 7 → 8, FastMCP v3, FastAPI 0.136, anthropic 0.97, plus security bumps for cryptography / mako / authlib / python-multipart.
Migration notes
- Bookmarks: use
https://anyplot.ai. - Deep links: update
/specs/{id}/{library}→/{specId}/{language}/{library}(e.g./scatter-basic/python/matplotlib). - MCP clients: point config at the new
anyplot.aiendpoint. - API consumers: prefer
preview_url_light/preview_url_dark; legacypreview_urlkeeps working as the light variant.
Full Changelog: v1.1.0...v2.0.0
v1.1.0 — Visual Redesign & Theme Tokenization
Visual redesign and theme tokenization pass.
Highlights
- Theme tokenization — 80+ hardcoded hex colors and font strings centralized into
app/src/theme/index.ts. New tokens forfontSize.micro/xxsandcolors.primaryDark/accentBg/codeBlock/highlight/tooltipLight. Shared style constants (headingStyle,subheadingStyle,codeBlockStyle, etc.) and a centralizedLIB_ABBREVmap. - WCAG AA — fixed 15+ contrast violations (
gray.400was 2.9:1); all text now meets 4.5:1. Keyboard-accessible zoom container with focus-visible. - Plot of the Day redesign — terminal-style frame with
$ python plots/...prompt linking to GitHub source, split layout, fade-in animation, real library + Python versions, status bar. - Responsive — mobile breadcrumb abbreviations (
pyplots.ai→pp,matplotlib→mpl), smoother RelatedSpecs grid progression (2 → 3 → 4 → 6). - Code quality — fixed pre-existing lint errors (setState in useEffect → render-time ref), AbortController fetch cleanup on unmount, full style-guide doc.
Full Changelog: v1.0.0...v1.1.0
v1.0.0
pyplots v1.0.0
First formal release of pyplots.ai — an AI-powered platform for Python data visualization examples across 9 libraries.
At launch: 309 specifications, 2,668 implementations, 439K+ lines of generated Python plotting code, 1,798 interactive HTML visualizations.
What's in it
- Browse, filter, and search plots across 11 tag categories (AND/OR logic).
- Implementations with syntax-highlighted code, AI quality reviews, and interactive previews; copy code, download PNG, open fullscreen.
- Stats Dashboard at
/stats— library quality/LOC histograms, coverage dot matrix, top-rated implementations, tag cloud, timeline. - Plot of the Day — daily featured high-quality implementation on homepage.
- Similar Specifications / Implementations via tag-based Jaccard similarity.
- MCP server for AI assistant integration.
Stack
FastAPI + async SQLAlchemy + PostgreSQL · React 19 + Vite + MUI 7 + TypeScript · 13 GitHub Actions workflows (spec creation, impl generation, AI review, auto-merge) · Google Cloud Run + Cloud SQL + GCS · 1,081 unit tests.
Links
- Website: https://pyplots.ai
- MCP:
claude mcp add pyplots --transport http https://api.pyplots.ai/mcp/