This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+1 more
Summary
AI summaryNew physics-backed CrucibleChart component adds authored phases, events, products, and outlets.
Full changelog
Added
CrucibleChart. A new physics-backed HOC (semiotic/physics) where
bounded peer components undergo authoredphasesandevents, form
declaredproducts, and settle into reason-labelledoutletswith source
lineage — the ledger/projection is authoritative, motion never infers
classification, timing, membership, loss, or routing.
buildCrucibleProductEvents(...)is pure authoring sugar for
combine → contribute* → complete-product. The ref handle'sreplay()
atomically restarts the deterministic tape mid-run;reset()
restores-and-pauses. Ships with SSR support, AI/schema registration
(CrucibleChart.capability.ts), and full test coverage.- Word Trails recipe.
wordTrailsLayout(semiotic/recipes) is a
quantitatively anchored word-cloud layout: column = category, segment =
ordered vertical position, weight = font size, with overlap-free stable
placement.wordTrailsProgressiveReveal(...)fades future/past segments
without reflow for scrollytelling-style reveals. - Net Ensemble recipe.
netEnsembleLayout(semiotic/recipes) lays out
ensembles of disconnected/trivially-connected DAGs as small multiples in
motif bands — splitting into weakly-connected components, classifying each
by directedness (single sink vs. branching), and grouping order-isomorphic
motifs via Weisfeiler–Leman fingerprinting.analyzeNetEnsemble(nodes, edges)is the pure headless census with no rendering. Demo at
/recipes/net-ensemble. - DistanceCartogram strip layout. A new
cartogramLayout: "radial" | "strip"prop adds a Langren-style 1D cost-axis layout (origin left, cost
right), used automatically inmode="sparkline"and available in any mode. - ForceDirectedGraph node/edge stroke separation.
nodeStroke/
nodeStrokeWidth(node-only outline) andedgeColor/edgeWidth/
edgeOpacity(edge-only stroke) let a caller style nodes and edges
independently; the genericstroke/strokeWidth/opacityprops continue
to style all marks uniformly. Precedence per property: specific > generic >
built-in default. RenderEvidenceexposes the resolved margin and plot rectangle.
renderChartWithEvidencenow returnsmargin: {top,right,bottom,left}and
plot: {x,y,width,height}— the actual geometry Semiotic used after
auto-reservation (e.g. a legend), matching exactly where the SVG's
data-areagroup is translated. A caller hand-drawing an SSR overlay no
longer has to guess or conservatively bail when it can't reconstruct the
plot rectangle from its input margin alone.- Chart-aware numeric data audit.
semiotic/ai,semiotic/ai/core,
semiotic/utils, andsemiotic/utils/corenow exportauditData,
formatDataAudit,profileNumericFields, andtoDataAuditNotifications.
SerializablenumericContractson chart
capabilities detect non-finite/non-numeric values, zero-span or single-row
domains, invalid log inputs, negative size geometry, unsafe normalized or
part-to-whole totals, and scale-dominating outliers with bounded row evidence.
diagnoseConfiginherits the checks, schema-driven docs playgrounds show a
live Data Truth Lens, andChartContainer dataAuditcan surface findings in
its existing accessible notification bell. - Data Viz for Dummies example. A scrollytelling example organizes seven
chart families by a two-way taxonomy (data structure vs. analytical task)
through a fictional basketball season.
Changed
- Frame-batched network ingestion. Sequential
StreamNetworkFrame.push()
calls now share one layout pass per animation frame instead of recomputing the
whole layout for every edge.pushMany()absorbs pending single-push layout
work into its synchronous batch; reads/mutations flush first, andclear()
cancels uncommitted layout work so imperative semantics stay deterministic.
Fixed
renderCharthonors customsvgAnnotationRulesserver-side. A chart's
svgAnnotationRules(top-level orframeProps) now runs during static/SSR
rendering the same way it does on the client — custom annotation shapes
(endpoint bulbs, hover guides, bespoke glyphs) no longer silently vanish from
renderChart/renderChartWithEvidenceoutput. Passed through for XY,
ordinal, network, and geo static render paths alike.- SSR annotation context now infers
frameTypefrom scales/projection,
matching the client overlay. A non-ordinal static render (geo, bare
network) no longer advertises a default vertical ordinalprojection,
which could make a customsvgAnnotationRulesrule branching on frame type
resolve incorrectly server-side. framePropsescape-hatch overrides forshowAxes/showLegend/
showLabels/showGrid/xLabel/yLabel/categoryLabel/valueLabelno
longer silently dropped inrenderChart. The static common-prop builder
used to reassert each of these from the mode-resolved default after
spreadingframeProps, clobbering an explicit override the live HOC
otherwise honors (frameProps spreads last there). A chart passing
frameProps={{ showAxes: false }}(or any of the above) server-side now
renders identically to the live component instead of always showing the
mode's default axis/label chrome.- Ordinal
x-thresholdannotation now renders in SSR. On a horizontal
ordinal chart (bar, swimlane, etc.) the value axis IS the x axis, but the
static renderer never populated an XY-stylescales.xfor ordinal frames,
sox-thresholdalways silently dropped — while the client (OrdinalSVGOverlay)
already resolved it correctly against the r-scale.x-thresholdnow mirrors
the same orientation-aware resolutiony-thresholdalready had. profileNumericFieldsno longer misclassifies dirty-numeric strings.
Whitespace-only strings (" ") now count as missing rather than
non-numeric, and an explicit"NaN"/"Infinity"/"-Infinity"string now
counts as a non-finite hazard rather than being lumped in with unparseable
garbage — distinguished from garbage (which also parses toNaN) by the
literal token, not the parsed value.PhysicsSettledSVG'srenderBodySVGnow receives the resolved
idPrefix. A custom body renderer emitting its own<defs>(a
<filter>, a gradient) can namespace those ids — SVG ids are
document-global, so without this, two settled-physics SVGs embedded in one
document could collide and mis-apply each other's filter.
CrucibleChart's settled-product glow filter now uses it.
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]