Skip to content

Releases: MarkusNeusinger/anyplot

v2.0.0 — anyplot.ai Relaunch

23 Apr 21:49

Choose a tag to compare

The project rebrands from pyplots.ai to anyplot.ai, ships a redesigned homepage, a new Okabe-Ito color palette, and first-class dark mode for both the site and every plot preview. This is a major release because URLs, the database schema, and the public domain all change.

⚠️ Breaking changes — Update bookmarks to https://anyplot.ai. The old pyplots.ai domain now redirects, but the spec URL structure changed: see "URL restructure" below.

Highlights

🎨 New homepage & visual identity

  • Full landing-page redesign: hero, libraries section, palette section, specifications/featured-examples grid, palette swatches, masthead rule, science note (#1ecf700b, #f12d08ce, #d439ebe6, #f095287c, #d7ea3d00, #db013c7d).
  • Clickable Plot of the Day with GitHub source link and tagline (#fed6fec4).
  • All pages unified under the landing-page style with mobile overhaul (#49119d96, #b3df441f).
  • New typography doctrine: MonoLisa-only across the site (#1ecf700b, #7cfd7fc6).
  • New Okabe-Ito colorblind-safe palette with theme-adaptive chrome (#1d46297b).

🌗 Dark mode (site + plots)

  • Theme toggle with prefers-color-scheme detection and persistence.
  • Backend renders dual-theme previews — every plot ships plot-light.png and plot-dark.png (plot-light.html / plot-dark.html for interactive libraries) (#0f1a9946).
  • Theme-aware preview selection across the API and frontend (#e5bb5a81), with mandatory theme-readability review in the AI quality pipeline.
  • Theme tokens (--ink, --rule, --bg-*) drive all chrome; CSS code-block colors fixed for both modes (#edc93f52, #c3463e43).

🌍 Rebrand: pyplots.ai → anyplot.ai

  • Domain migration with nginx fixes for redirect loops (#bd4cee15, #1a20d1c5, #13a52c32, #ee32a0dc, #fec16a78, #32a933d1).
  • Repository, MCP server, READMEs, and all in-app references updated.

🔗 URL restructure (breaking)

  • New canonical spec URL: /{specId}/{language}/{library} (#e24a7cd7, PR #5289).
  • Hub view consolidated: /{specId} with optional ?language= filter (#129e10cf, PR #5297).
  • Catalog → Plots rename (#4be4cc0f, #2ad0d725).
  • Old paths return a NotFoundPage instead of looping redirects (#fec16a78, #32a933d1).

🗄️ Schema changes (breaking)

  • Multi-language path restructure with new languages table (#306d5ba1).
  • Implementations now expose preview_url_light / preview_url_dark; the legacy preview_url is a synonym for the light variant (#0f1a9946, #e5bb5a81, #3b51f66d).
  • Related-specs endpoint also returns themed URLs (#3b51f66d).

Frontend

  • New components: NavBar, HeroSection, LibrariesSection, LibraryCard, PaletteStrip, NumbersStrip, MastheadRule, ScienceNote, SectionHeader, PlotOfTheDayTerminal, ThemeToggle, RootLayout, BareLayout, RouteErrorBoundary, TypewriterText (#74d98414, #d7e46ead, #fed6fec4, #4be4cc0f).
  • New pages: LandingPage, LibrariesPage, PalettePage, AboutPage, NotFoundPage, SpecsListPage (#d439ebe6, #f095287c).
  • Route-level error boundary with chunk-reload recovery for stale deploys (#f52e97c8, PR #5298).
  • ImageCard and grid now respect dark mode (last two patches in this branch — 8e9a8cf3, 3b51f66d).
  • Pseudo-function style applied consistently across the frontend (#28e94693, PR #5293).
  • MUI bumped from v7 to v9, with FilterBar breaking-change fixes (#66a3fe94, #3dd2acaf).

Backend / API

  • Theme-aware preview selection in spec, implementation, related-specs, and POTD endpoints (#e5bb5a81, #3b51f66d).
  • API in-memory cache invalidation after sync-postgres (#ef0512be).
  • Sync triggers now include alembic versions/ (#6101bd4a).
  • Cloudflare bypass on cache-invalidate; created timestamps preserved across regenerations (#c8921b95, #7a33c0db).
  • Preview URL migration to the anyplot-images GCS bucket (#f37ebbdc).

CI / infrastructure

  • 6 workflows migrated from service-account keys to Workload Identity Federation (#1cdb8b94).
  • Bulk-generate moved to paced sequential dispatch with a global mutex (#407d34ab, #5e40a57f).
  • Daily cron regenerates the oldest not-recently-updated spec (#a3af50c4); shifted to a 4h cadence with a Berlin-evening blackout (#94ad42b2).
  • Mandatory dual-theme rendering and readability checks in the impl-generate / impl-review pipeline (#0f1a9946).
  • allowed_bots='*' set on the Claude action (#62c8c80a).
  • nginx: stop caching /public static files as 1y immutable (#ea0b1015).

Plots

  • New specs added: scatter-lag, upset-basic, bar-spine, bar-3d-categorical, network-bipartite, map-tilegrid, dendrogram-radial, heatmap-polar, spiral-timeseries, diagnostic-regression-panel, dot-matrix-proportional, heatmap-adjacency, area-cumulative-flow, ice-basic, shap-waterfall, scatter-embedding.
  • Implementations across all 9 libraries for scatter-lag and scatter-basic regenerated under the new dual-theme pipeline (#5268#5276, #5300, #5308#5315, #5318).

Quality / tooling

  • Comprehensive frontend & backend test suite expansion (#3b18c56e, PR #5277).
  • WCAG-AA contrast pass for dark-mode adaptive chrome (#c3463e43).
  • Style-guide synced with the landing-page rollout and mobile patterns (#9fc72a27, #966bc650, #3e73e450).
  • Dependency bumps: MUI 7→9, React group, Vite 7→8, FastMCP v3, FastAPI 0.136, anthropic 0.97, SQLAlchemy 2.0.49, uvicorn 0.44, plus minor security bumps for cryptography/mako/authlib/python-multipart (#66a3fe94, #46cbe725, #44f47013, #6e2e82db, #eaf03fbe, #132a0ebe, #5bda5bb2, #76837a9f, #a3c5e059, #d438ff53, #77d1b824).

Migration notes

  • Bookmarks: https://pyplots.ai/... is gone; use https://anyplot.ai/....
  • Spec URLs: deep links to old /specs/{id}/{library} paths should be updated to /{specId}/{language}/{library} (e.g. /scatter-basic/python/matplotlib).
  • MCP clients: point your config at the new anyplot.ai endpoint.
  • API consumers: prefer the new preview_url_light / preview_url_dark fields; the legacy preview_url keeps working as the light variant.

Full Changelog: v1.1.0...v2.0.0

v1.1.0 — Visual Redesign & Theme Tokenization

10 Apr 22:27

Choose a tag to compare

What's New

Design System & Theme Tokenization

  • Centralized all 80+ hardcoded hex colors and font strings into app/src/theme/index.ts
  • New theme tokens: fontSize.micro/xxs, colors.primaryDark/accentBg/codeBlock/highlight/tooltipLight
  • Shared style constants: headingStyle, subheadingStyle, textStyle, codeBlockStyle, tableStyle
  • LIB_ABBREV map centralized in constants

WCAG AA Accessibility

  • Fixed 15+ contrast violations where gray.400 (#9ca3af, 2.9:1 ratio) was used for text
  • All text now meets 4.5:1 minimum contrast ratio
  • Added keyboard accessibility to zoom container (role, tabIndex, Enter/Space, focus-visible)
  • Added aria-labels to interactive elements

Plot of the Day Redesign

  • Terminal-style frame with $ python plots/… prompt (links to GitHub source)
  • Split layout: image left, info panel right
  • Fade-in animation on load
  • Real library and Python versions from API
  • >>> plot.png saved │ Library · Python 3.x.x status bar

Responsive Improvements

  • Breadcrumb abbreviations on mobile: pyplots.aipp, matplotlibmpl
  • RelatedSpecs grid: smoother column progression (2→3→4→6)
  • Better icon spacing in mobile breadcrumb

Code Quality

  • Fixed 3 pre-existing lint errors (setState in useEffect → render-time ref pattern)
  • Fixed useCallback missing dependency warning
  • Added AbortController for fetch cleanup on unmount
  • Added setTimeout cleanup via ref on unmount
  • Removed unused ImageLightbox component
  • Updated test suite for new API fields and endpoints
  • Complete style guide documentation (docs/reference/style-guide.md)

Full Changelog: v1.0.0...v1.1.0

v1.0.0

07 Apr 21:41

Choose a tag to compare

pyplots v1.0.0

First formal release of pyplots.ai — an AI-powered platform for Python data visualization examples across 9 libraries.

Platform

  • 309 specifications with 2,668 implementations across 9 libraries (Altair, Bokeh, Highcharts, lets-plot, Matplotlib, Plotly, plotnine, Pygal, Seaborn)
  • 439K+ lines of generated Python plotting code
  • 1,798 interactive HTML visualizations
  • Fully automated pipeline: community proposes via GitHub Issues → AI generates, tests, reviews → deployed

Features

Core

  • Browse, filter, and search plots across 11 tag categories (AND/OR logic)
  • View implementations with syntax-highlighted code, quality reviews, and interactive previews
  • Copy code, download PNGs, open fullscreen interactive views
  • Responsive images (WebP + PNG, multiple sizes)
  • MCP server for AI assistant integration

New in v1.0.0

  • Stats Dashboard (/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 — tag-based Jaccard similarity with hover-highlighting of shared tags
  • Deferred DB loading — heavy fields (code, review data) loaded on demand, ~25MB saved per query
  • Lazy code loading/specs/{id}/{lib}/code endpoint, frontend prefetch

Infrastructure

  • 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