This release adds 5 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+1 more
Summary
AI summaryDefault tick/axis font size raised to 12 px, fixing legibility warnings and preventing animated network chart crashes with unmemoized props.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Low |
Default tick/axis font size raised from 10px to 12px across all themes. Default tick/axis font size raised from 10px to 12px across all themes. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Bugfix | Medium |
Animated network charts no longer crash with unmemoized function props. Animated network charts no longer crash with unmemoized function props. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Bugfix | Medium |
Hook-order regressions across loading/empty/data transitions are fixed in the HOC catalog. Hook-order regressions across loading/empty/data transitions are fixed in the HOC catalog. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Bugfix | Medium |
`callout-circle` and `callout-rect` annotations are now handled by default annotation rules. `callout-circle` and `callout-rect` annotations are now handled by default annotation rules. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Bugfix | Medium |
Label and callout rules pass connector metadata through to renderer for lifecycle/editorial status rendering. Label and callout rules pass connector metadata through to renderer for lifecycle/editorial status rendering. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Bugfix | Medium |
Value‑anchored annotations gain regression coverage for sort, filter, and rescale reflow. Value‑anchored annotations gain regression coverage for sort, filter, and rescale reflow. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Bugfix | Medium |
Progressive disclosure now correctly reveals deferred annotations in geo frames and network HTML widgets. Progressive disclosure now correctly reveals deferred annotations in geo frames and network HTML widgets. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Bugfix | Medium |
Colored statistical overlays are no longer misclassified as color‑only annotation failures. Colored statistical overlays are no longer misclassified as color‑only annotation failures. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Bugfix | Medium |
Variant discovery now mirrors `suggestCharts` for non‑visual audiences, folding receivability penalties into fit scores. Variant discovery now mirrors `suggestCharts` for non‑visual audiences, folding receivability penalties into fit scores. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Bugfix | Medium |
The "horizontal ranked view" variant heuristic is restricted to charts supporting `orientation` and `sort`. The "horizontal ranked view" variant heuristic is restricted to charts supporting `orientation` and `sort`. Source: llm_adapter@2026-06-08 Confidence: high |
— |
Full changelog
Added
- Accessibility audit, descriptions, and structured reader navigation.
auditAccessibility()/
formatAccessibilityAudit()grade chart configs against Chartability-style heuristics, while
describeChart(),buildNavigationTree(),AccessibleNavTree, anduseNavigationSync()provide
layered chart descriptions, WAI-ARIA tree navigation, bidirectional tree/canvas focus sync, and
annotation-anchor focus for non-visual readers. - IDID reader-grounding and receivability primitives.
describeChart()can emit an optional L4
communicative-act sentence from a chart capability,buildReaderGrounding()combines description,
intent, and structure into one agent-readable payload,AudienceProfile.receptionModalitylets
suggestCharts()penalize charts a non-visual audience cannot receive, and
accessibilityCaveats()feeds audit warnings into recommendation caveats. - Conversation-arc telemetry.
enableConversationArc(),disableConversationArc(),
getConversationArcStore(),useConversationArc(), andsummarizeArc()expose a bounded,
opt-in event stream for suggestion, interrogation, navigation, export, and annotation-status
events, with zero overhead while disabled.registerConversationArcSink(),
createLocalStorageConversationArcSink(),createIndexedDBConversationArcSink(),
createWebhookConversationArcSink(),loadConversationArc(), andreplayConversationArc()add
opt-in durable capture and replay hydration without duplicating sink or analytics events. - Variant-discovery API and MCP tool.
proposeVariant()emits registered variants,
conservative heuristic transforms, and same-intent cross-family alternatives;
evaluateVariantProposal()scores fit, novelty, risk, rubric deltas, and audience bias; and
MCP now exposesproposeChartVariantsfor agent-driven variant exploration. - Chart repair workflow primitive.
repairChartConfig()and the MCPrepairChartConfigtool
use capability fit and chart suggestions to critique a proposed chart choice and return safer
alternatives for agent retry loops. semiotic/valueandBigNumber. A focal-value KPI component now ships as a lightweight value
entry point, with formatting, threshold, comparison/target, staleness, push-buffer, and slot APIs
for embedding trend or chart context.- First-class annotation design assistance for 3.7.0.
autoPlaceAnnotationsnow composes collision-aware placement, curved connector routing, density budgets, progressive disclosure, responsive shedding, redundant association cues, cohesion modes, audience-aware amount, and defensive annotations. Per-annotationemphasisestablishes hierarchy, while provenance confidence supplies a default reading order when hierarchy is not explicit. - Annotation provenance and editorial lifecycle.
AnnotationProvenanceandAnnotationLifecyclecarry actor, evidence, confidence, stable identity, freshness, editorial status, and supersession metadata.applyAnnotationLifecycle,applyAnnotationStatus, andfilterAnnotationsByStatuskeep visual treatment, descriptions, and structured navigation aligned on the current annotation set. - Stable semantic annotation anchors.
anchor: "semantic"/lifecycle.anchor: "semantic"now re-resolves annotations throughprovenance.stableIdafter data refresh, using point scene nodes or matching data rows before falling back to the recorded coordinate when the target is gone. - Annotation reception surfaces.
describeChartleads with author-marked features,buildNavigationTreeadds an Annotations branch, and the accessibility audit checks color-only note-to-target association. - Annotation connector diagnostics.
diagnoseConfig()now warns about far notes without a
connector and very long connectors, keeping placement guidance aligned with the annotation design
assistant. - Annotation design guidance docs. The first-class Annotations docs section now includes Overview, Design Guidance, Advanced Annotations, and Provenance & Lifecycle pages with live examples.
- Linked-hover series mode.
linkedHover={{ mode: "series" }}now resolves each chart's
series-identity field automatically, withseriesFieldavailable as an override for cross-chart
series highlighting. - Capability-driven visual baseline gate.
check:visual-baseline-capabilitiesderives SSR and
linked-hover visual coverage requirements fromchartSpecs.ts, verifies the current Playwright
evidence, and keeps the remaining SSR/CSR parity and linked-hover interaction snapshots in
one-way burn-down maps. It is wired into CI,release:check, andprepublishOnly. - Shareable, restorable docs playgrounds. Every
/playground/*page now
serializes its knob + dataset state into the URL (?sc=…&ds=…) and restores it
on load, with "Copy link" and "Copy config (JSON)" affordances. The round-trip
dogfoods the library's owntoConfig/toURL/fromURL/fromConfig/
copyConfigso a playground configuration becomes a portable, inspectable
ChartConfigartifact; non-serializable composite playgrounds degrade
gracefully (no toolbar, no URL writes). - Faithful "Copy" in docs live examples. The code a docs
LiveExamplecopies to the clipboard
now serializes the real props the chart rendered with, instead of the trimmed/elided display stub —
so copied example code reproduces the example rather than referencing undefined or shortened values.
Display stays readable; copy is runnable. The pure code-generation moved to a React-free
codegenmodule. - Generated, complete
llms.txt.docs:llms(scripts/generate-llms-txt.mjs) regenerates the
rootllms.txtretrieval index with the full chart catalog derived fromchartSpecs(grouped by
family, every charted component), each entry tagged with its communicative act
(resolveCommunicativeAct) so an agent reader gets what a chart is for, not just what it shows.
Replaces the previously hand-maintained (and stale) index; kept fresh by thecheck:llmsgate in CI
andrelease:check, and regenerated duringwebsite:build. - Docs: per-chart "At a glance" grounding panel. A reusable
ChartGroundingcomponent renders,
live for each chart, the communicative act it performs (buildReaderGrounding), a layered L1–L3
description (describeChart), the chart type's reader caveats, and an accessibility badge
(auditAccessibility— hovering the badge lists the specific findings; clicking opens the full
audit) — the reader/agent grounding for the chart, computed from the shipped intelligence APIs so it
can't drift. Now on all 39 static chart pages (props centralized in a reviewed fixtures map;
realtime/push-only charts are exempt), and enforced bycheck:docs-coverage. - Docs: "Reshape to unlock" generative suggestions. The
/choosepicker now goes beyond charts the
data already fits: from a flat table's field profile it proposes the transform that unlocks
Semiotic's distinctive charts — pivot two columns into a Sankey, stamp an event log with time for
a ProcessSankey, nest categories into a Treemap, etc. — each with the reshape and why that
chart is worth it. Surfaces the flow/temporal/hierarchy/geo charts that a fit-only recommender can
never reach. Driven by a puresuggestReshapes(profile)heuristic. - Docs: "Choose a Chart" front door. A new top-level
/choosepage profiles a dataset and ranks
the catalog by fit and communicative act (livesuggestCharts), showing each recommendation's score,
reasons, and caveats with links to the chart pages. An audience selector demonstrates how the ranking
shifts per reader — with the biasing familiarity/targets and their rationale shown — and surfaces
governed stretch picks. Users can arrive with data and intent instead of a component name. - Docs: a11y hooks & theming serialization. The Accessibility docs now cover the preference hooks
useReducedMotion/useHighContrastand theuseNavigationSynctree↔canvas sync hook; the Theming
docs now coverresolveThemePreset,themeToCSS,themeToTokens, and building custom theme objects.
Custom Charts cross-links the related Cookbook recipes. - Docs: AI authoring & tooling pages. The Intelligence docs section gains four pages closing the
previously-undocumented AI surface: CLI & MCP (everynpx semiotic-aiflag and every
npx semiotic-mcptool, with agent setup), Variant Discovery & Repair (proposeVariant,
evaluateVariantProposal,registerVariantDiscovery,repairChartConfig), Capability Authoring
(theChartCapabilitydescriptor,registerChartCapability,registerIntent, and the intent
taxonomy), and Audience Profiles (theAudienceProfileshape, suggestion bias, stretch picks,
reception modality, and governance). - Playground control-drift gate.
check:docs-playground-controlschecks each playground's
selectknobs againstchartSpecs.ts: a knob bound to an enum-typed prop can no longer offer an
option the chart doesn't accept. It only gates enum-typed props (and treatsmapProps-transformed
pages as informational), so an enum member renamed in the API now fails the build instead of
leaving a dead knob. Wired into CI,release:check, andprepublishOnly. - Prop-table drift gate.
check:docs-prop-tablesresolves each chart's prop surface from
chartSpecs.ts(ownPropsover resolvedPROP_BAGS) and AST-checks every chart page's
documented prop names against it, failing if a statically-required prop is undocumented. It keeps
the hand-authored tables (and their curation) verifiable against the canonical registry rather than
replacing them;--verbosereports props documented but absent fromchartSpecsas a follow-up
backlog. Wired into CI,release:check, andprepublishOnly. - Docs coverage gate + per-page quality bar.
check:docs-coveragederives the required
chart-page set fromchartSpecs.tsand verifies every chart page renders the standard contract
(ComponentMeta, a prop table, and an interactive example), with one-way burn-down maps for the
three charts documented elsewhere. Wired into CI,release:check, andprepublishOnly. The
previously-inconsistentConnectedScatterplot,DifferenceChart,LikertChart,OrbitDiagram,
BigNumber, andProcessSankeypages were backfilled to meet the bar. - Expanded SSR/CSR visual parity matrix. Shared Playwright fixtures now cover the high-risk
SSR paths forDifferenceChart,Heatmap,QuadrantChart, geo maps, and statistical ordinal
charts, plus frame background/foreground graphics, a dark-theme SSR case, annotation callouts,
progressive disclosure, lifecycle/status styling, geo annotations, and a network widget
annotation browser fixture. ThesupportsSSRburn-down drops from 29 to 17 entries.
Changed
- Default tick/axis font size raised from 10px to 12px across every shipped theme, the runtime
light/dark/high-contrast defaults, and the SVG-overlay CSS-var fallbacks, so axis text clears
Chartability's 9pt/12px legibility floor out of the box.auditAccessibility's
perceivable.small-textheuristic now reportspasson the defaults instead of warning, and the
ChartGroundingdocs badge leads with the verdict ("Passes a11y · N advisories") with the specific
findings surfaced on hover. Override per chart viatheme.typography.tickSizeor the
--semiotic-tick-font-sizeCSS variable. - Annotation note-type semantics are centralized so layout, density, diagnostics, and accessibility checks agree on what counts as a note and which notes draw connectors.
- Static SVG annotation rendering now uses the shared note renderer for labels and callouts, including
callout-circleandcallout-rect. - React hooks linting now enforces
react-hooks/rules-of-hooks, with exhaustive-deps staged as a
warning while legacy dependency sites are burned down. check:capabilitiesnow rejectsserverChartConfigs.tsentries that are absent from
chartSpecs.ts, with an explicit server-only exception forSparkline.
Fixed
- Hook-order regressions across loading/empty/data transitions were fixed across the HOC catalog,
including the remaining Minimap validation early-return path, so charts no longer trip React's
"Rendered more hooks than during the previous render" failure when async data arrives. - Animated network charts (OrbitDiagram and other hierarchy layouts) no longer crash the tab when
given unmemoized function props. The hierarchy-ingest effect inStreamNetworkFrameno longer
re-runs on pipeline-config identity changes — so a parent passing fresh inline-arrow callbacks
(nodeStyle,revolution, …) on each render no longer re-ingests data and fires asetStateper
render, which previously compounded with the continuous animation frame loop until React's
max-update-depth guard tripped and the page ran out of memory. Config/style changes are still
applied (via the dedicatedupdateConfigeffect), and data/dimension changes still re-ingest. callout-circleandcallout-rectare now handled by the default annotation rules instead of being documented but silently skipped.- Label and callout rules now pass connector disable, opacity, and stroke-dasharray metadata through to the annotation renderer, allowing lifecycle and editorial status treatments to render as documented.
- Value-anchored annotations now have explicit regression coverage for sort, filter, and rescale
reflow so labels stay bound to their data values rather than incidental array positions. - Progressive disclosure now reveals deferred annotations in geo frames and correctly hides/reveals network HTML widget annotations.
- Colored statistical overlays are no longer misclassified as color-only annotation-to-target correspondence failures.
- Variant discovery now mirrors
suggestChartsfor non-visual audiences:evaluateVariantProposal
audits a proposal's props and folds the receivability penalty into its fit, so
proposeChartVariantsno longer ranks variants that can't be received via the declared modality. - The "horizontal ranked view" variant heuristic is restricted to categorical charts that actually
exposeorientation+sort(BarChart,GroupedBarChart,StackedBarChart,DotPlot),
preventing unsupported prop leakage onto Pie/Donut/Gauge/Likert/Swimlane. - The MCP
proposeChartVariantstool strips the non-serializablebuildPropsfunction from each
proposal instructuredContent, keeping the JSON output transport-safe while preserving the
computedprops.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About nteract/semiotic
React data visualization MCP server with 30+ chart types. 5 tools: suggest charts for a dataset, render validated React configs to SVG, diagnose configuration anti-patterns, get component schemas, and report issues.
Related context
Related tools
Earlier breaking changes
- v3.8.1 Removed `/healthz` alias; only `GET /health` is supported for health checks.
- v3.8.0 Deprecates `GuantletChart` typo alias; use `GauntletChart`. Migration required.
- v3.6.0 Changes DifferenceChart to accept 2+ series via top‑2 subselection, adding caveats for extra series.
- v3.6.0 Changes AreaChart to a single‑series chart; multi‑series inputs are subselected.
Beta — feedback welcome: [email protected]