Semiotic 3.8.0 is a release about making ambitious charts cheaper to run and easier to trust. It moves expensive work away from the main thread, redraws only what changed, puts hard bounds around long-running streams, and gives both people and agents better evidence about what a chart is doing. It also trims the default package surface so consumers pay for specialized capabilities only when they choose them. Full release notes are onGitHub.
Whole-Chart Findings Have a Home
Not every warning belongs to one mark. ChartContainer now accepts notifications for data-quality findings, accessibility audits, data-pitfall warnings, and host-authored notes that apply to the chart as a whole. They collapse into a severity-aware bell and open into dismissible cards, so a new finding never pushes a streaming chart around on the page.
The notification layer includes an aria-live summary, semantic class hooks, stable dismiss-by-id behavior, and anonNotificationDismiss callback. The same finding can now be visible, announced, styled, and synchronized with a host store without inventing a fake annotation anchor.
The five Stream Frames are now memoized, and the XY, network, and geo render paths distinguish data-canvas work from interaction-canvas work. Hover changes and annotation retries no longer force a complete repaint of otherwise stable marks. Shared canvas-background and paint decision helpers keep those rules consistent across chart families.
Long-running streams get safer defaults too. Growing windows now cap themselves at 100,000 points unless configured otherwise, warn once as they cross 50,000 points in development, and resize without the old repeated-shift cost. ID-keyed update and removal paths share the same optimized helpers, while XY decay and pulse reuse a single datum-index map.
StreamPhysicsFrame: Motion with Evidence
The largest new charting surface in 3.8.0 isStreamPhysicsFrame: a streaming frame for stories where movement is the mechanism—sampling, lateness, queues, routing, threshold crossings, collisions, and accumulation. Its bodies carry data, its walls and sensors come from chart geometry, and its pipeline has explicit running, paused, and settled states. Authors can execute the resident physics loop on the main thread or in a worker, suspend it when hidden, and keep deterministic control through the frame ref.
This is a complete Semiotic frame rather than a particle layer. It has chart-derived colliders, body forces, regions, portals, absorption, annotations that can follow live bodies, legends, hover, click, selection without relayout, observation events, custom canvas drawing, and an imperative surface for pushing, inspecting, popping, and clearing bodies or region state. The optional Matter and Rapier adapters sit behind the same engine contract, while the built-in deterministic kernel remains the default.
A process-authoring kit rides the same heartbeat. Capacity queues expose work, wait time, utilization, pressure, overflow, and completion evidence; finite resource pools make staff or machines explicit; service-level controllers and dependency gates model delay and blocked work; and journey ledgers, stage-region projections, reference envelopes, and trace comparisons turn the live mechanism into inspectable operations evidence. Those primitives power the physics HOC family, including EventDrop, Galton board, gauntlet, pile, collision, and process-flow charts, while PhysicsCustomChart keeps the lower-level frame available for bespoke systems.
Most importantly, every animation has a non-animated truth. Settled projections produce ordinary scene nodes, standalone SVG, mark and simulation evidence, accessible semantic items, live announcements, and optional data tables. Reduced-motion readers, server exports, test agents, and people who arrive after the simulation stops all receive the same outcome. Server-side stepping can capture deterministic SVG frames and animated GIFs from the actual physics store instead of fabricating an animation from unrelated snapshots.
Force Layouts Leave the Main Thread
ForceDirectedGraph gains layoutExecution,layoutLoadingContent, and onLayoutStateChange. Expensive layouts can settle in a module Web Worker and fall back to synchronous execution when workers are unavailable. The worker client now keeps a long-lived, request-addressed session instead of spawning and terminating a worker for every layout, while cancellation removes only the pending request.
The force model itself is more expressive: degree-aware charge, degree-normalized link strength, radius-aware collision, weaker centering, and d3-force under the recipe-level forceLayout. SSR and first hydration remain synchronous for markup parity, and the same seed remains deterministic within this model—but geometry differs from earlier 3.x releases, so position-pinned snapshots need review.
Annotations and Layouts That Hold Up
New x-band annotations mark eras and phases as full-height regions in canvas and static SSR output. intervalLanesLayoutnow applies a minimum rendered width and packs in pixel space, keeping zero- and short-duration intervals visible without allowing them to overlap their neighbors.
Custom XY, ordinal, network, and geo charts expose their last computed layout through ref.current.getCustomLayout(). Inspectors, validation layers, and statistics panels can read placement without running the layout twice. Interaction consumers also get a more reliable unwrapDatum, which now handles payloads nested under either data or datum.
A Smaller Default Surface
Physics chart HOCs no longer ride along with the rootsemiotic entry. Import GaltonBoardChart,GauntletChart, PhysicsPileChart, and related charts from semiotic/physics. That change cuts the measured full root package substantially while keeping the specialized family available as an explicit subpath. The misspelledGuantletChart alias is deprecated in favor ofGauntletChart.
world-atlas is now an optional peer, so applications that never resolve a built-in reference geography do not install it as a hard dependency. Library output now targets ES2020, and size budgets cover the physics, server, AI, recipes, utilities, and value entry points in addition to the core chart families.
A Focused Surface for Agents
Backend agents can import deterministic recommendation, validation, repair, grounding, and provider-tool adapters fromsemiotic/ai/core without loading the chart HOC catalog. The provider helpers now include toOpenAIResponsesTool alongside the Anthropic and OpenAI Chat Completions shapes.
The MCP server adds a focused public profile with five task-oriented tools: create, improve, explain, audit, and inspect a chart schema. A generated AI surface manifest records the current component, export, renderability, tool, resource, and prompt inventory, and the portable Semiotic chart skill ships in the npm package for agent hosts that can install it.
Experimental Means Explicit
The DataPitfalls bridge and GoFish DisplayList adapter remain outside the stable API. Their exports keep the unstable_ prefix onsemiotic/experimental, including notification and annotation return paths for DataPitfalls findings. This is deliberate: those contracts depend on external schemas and render IR that are still being tested with real integrations.
Before You Upgrade
- Move physics HOC imports from
semiotic tosemiotic/physics. - Allow
worker-src 'self' in Content Security Policy when worker-backed force layouts are enabled. - Review force- and physics-position visual snapshots instead of accepting geometry changes blindly.
- Confirm ES2020 is compatible with the browsers and runtimes in your support matrix.
- Install
world-atlas when using built-in reference geography resolution.
See Chart Containers,CLI and MCP,Data Pitfalls Bridge, andGoFish DisplayList for the updated guides.