Skip to content

Releases: nteract/semiotic

Semiotic v3.2.2

31 Mar 04:34
9eb9931

Choose a tag to compare

[3.2.2] - 2026-03-30

Added

  • 346 new scene builder tests — Exhaustive coverage for all XY and ordinal scene builders with actual coordinate/position assertions.
  • FunnelChart and LikertChart HOC tests — 60 tests for the two previously untested HOCs.
  • Render pipeline benchmarks — Scene builder throughput, RingBuffer ops, end-to-end ingest-to-render.
  • Dev-mode d.data access warning — Frame callbacks warn when accessing wrapper properties instead of d.data?.field. Zero production overhead.
  • Streaming-first docs — Landing and Getting Started pages restructured to lead with the streaming engine.

Fixed

  • @modelcontextprotocol/sdk removed from production dependencies — MCP CLI now bundles the SDK via esbuild. npm install semiotic no longer pulls in the 4MB+ SDK.
  • @types/d3-quadtree moved to devDependencies
  • Stacked area points at wrong Y position — Fixed cumulative Y computation.
  • Null Y datums assigned stacked Y — Added null/NaN guard.
  • Stale forecast overlays on prop removal — Clears overlays when both forecast and anomaly become falsy.
  • GeoCanvasHitTester inconsistent hit radius — Unified to Math.max((r||4)+5, 12).
  • backgroundGraphics not honoring margins — Fixed in StreamXYFrame and StreamGeoFrame.

See CHANGELOG.md for full details.

Semiotic v3.2.1

31 Mar 04:32
808590f

Choose a tag to compare

[3.2.1] - 2026-03-30

Added

  • LikertChart — new ordinal HOC for Likert scale survey data (diverging horizontal / stacked vertical).
  • onClick prop on all HOCs — Direct click handler receiving (datum, { x, y }).
  • categoryFormat prop — Custom tick label formatting on ordinal HOCs.
  • category-highlight annotation type — Highlight category columns/rows.
  • labelPosition on threshold annotations — Position labels left/center/right (y) or top/center/bottom (x).
  • Coordinate-based linked crosshairlinkedHover with mode: "x-position" for synced vertical crosshairs.
  • Tooltip viewport-aware flip — Auto-flip near container edges.
  • Data-driven histogram bin snapping — Snaps to actual computed bin boundaries.
  • IBM Carbon color palettesCARBON_CATEGORICAL_14, CARBON_ALERT, "carbon"/"carbon-dark" theme presets.
  • Legend line wrapping — Horizontal legends wrap to multiple rows.
  • showPoints on AreaChart and StackedAreaChart

Changed

  • ThemeProvider categorical colors flow to all HOCs automatically.
  • 12px minimum hit target (Fitts's law) on all canvas hit testers.

Fixed

  • Legend styleFn contract, LikertChart tooltip, category-highlight annotation positioning, crosshair cleanup on unmount, FlippingTooltip dependency array, removed dead slicePadding prop.

See CHANGELOG.md for full details.

Semiotic v3.2.0

31 Mar 04:31
3909fea

Choose a tag to compare

[3.2.0] - 2026-03-25

Added

  • Hover dot color matching — The hover indicator dot now automatically matches the hovered element's color (line stroke, area stroke, point fill) instead of hardcoded blue.
  • Adaptive time tick formatting — hierarchical axis labels that auto-space to prevent overlap.
  • Forecast: training line stylingtrainStroke, trainLinecap, trainUnderline, trainOpacity, forecastOpacity on ForecastConfig.
  • Forecast: per-datum anomaly stylinganomalyColor, anomalyRadius, and anomalyStyle now accept functions for data-driven rendering.
  • 128 new unit tests

Fixed

  • SVGOverlay left axis label missing in dual-axis mode
  • ThemeStore mode: "dark" merged onto wrong base
  • Tick label overlap on time axes
  • Function accessors with forecast/anomaly now bake resolved values for annotation rendering
  • Geo hover ring color, tick color dark mode fallback, annotation accessor fallback

See CHANGELOG.md for full details.

Semiotic v3.1.2

31 Mar 04:30
637627c

Choose a tag to compare

Semiotic v3.1.2

Critical MCP server fix — all 5 tools now receive arguments correctly. Geo chart rendering support added. HTTP transport mode for remote MCP inspectors.

Note: v3.1.1 was yanked from npm. Upgrade directly from 3.1.0 to 3.1.2.

Fixed

  • MCP server tools received no arguments — all 5 tools used empty {} Zod schemas, causing the MCP SDK to strip all incoming parameters. Every tool call silently fell into "missing field" error paths. Fixed by defining proper Zod input schemas for all tools.
  • MCP geo chart renderingrenderHOCToSVG rejected geo components not in the validateProps validation map. Geo components now skip validation gracefully and render correctly.
  • MCP --port parsing--http without --port no longer produces NaN (falls back to 3001).
  • MCP "top-level fields" dead code — removed unreachable spread logic from renderChart/diagnoseConfig handlers; updated Zod descriptions to match actual schema behavior.
  • suggestChart Histogram heuristic — removed unreachable data.length >= 10 check (suggestChart accepts 1–5 samples per its Zod schema).
  • renderHOCToSVG validation fragility — tightened unknown-component skip check to require exactly one "Unknown component" error.

Added

  • MCP getSchema tool — returns the prop schema for any component on demand, or lists all 30 components with [renderable] markers. Reduces token overhead vs loading full schema.
  • MCP suggestChart tool — analyzes 1–5 sample data objects and recommends chart types with confidence levels, reasons, and example JSX. Supports intent parameter (comparison, trend, distribution, relationship, composition, geographic, network, hierarchy).
  • MCP geo chart support — ChoroplethMap, ProportionalSymbolMap, FlowMap, and DistanceCartogram added to the render registry (25 renderable components total).
  • MCP HTTP transportnpx semiotic-mcp --http --port 3001 starts a session-based HTTP server with CORS headers for browser-based MCP inspectors and remote access.
  • suggestChart input validation — Zod schema enforces .min(1).max(5) on data array.

Changed

  • MCP server now has 5 tools total: getSchema, suggestChart, renderChart, diagnoseConfig, reportIssue.
  • npm keywords added for MCP directory discoverability (mcp, model-context-protocol, mcp-server).
  • prepublishOnly cleans dist/ to prevent stale dynamic import chunks in published tarball.

Install

npm install semiotic@3.1.2

MCP Setup

{
  "mcpServers": {
    "semiotic": {
      "command": "npx",
      "args": ["semiotic-mcp"]
    }
  }
}

Semiotic v3.1.0

21 Mar 16:18
87e3fbf

Choose a tag to compare

Semiotic v3.1.0

Geographic visualization, accessibility foundation, performance optimizations, and comprehensive bug fixes.

Added

Geographic Visualization (semiotic/geo)

  • ChoroplethMap — sequential color encoding on GeoJSON features with valueAccessor, colorScheme, and reference geography strings ("world-110m", "world-50m")
  • ProportionalSymbolMap — sized/colored point symbols on a geographic basemap with sizeBy, sizeRange, and colorBy
  • FlowMap — origin-destination flow lines with width encoding, animated particles (showParticles, particleStyle), and lineType ("geo"|"line")
  • DistanceCartogram — ORBIS-style projection distortion based on travel cost with concentric ring overlay, north indicator, configurable strength and line mode
  • StreamGeoFrame — low-level geo frame with full control over areas, points, lines, canvas rendering, and push API for streaming
  • Zoom/Pan — all geo charts accept zoomable, zoomExtent, onZoom with imperative getZoom()/resetZoom()
  • Drag Rotate — globe spinning for orthographic projections, latitude clamped to [-90, 90]
  • Tile MapstileURL, tileAttribution, tileCacheSize for slippy-map basemaps (Mercator only)
  • Reference geographyresolveReferenceGeography() returns Natural Earth GeoJSON features; mergeData() joins external data into features
  • GeoParticlePool — object-pool polyline particle system for animated flow particles
  • GeoCanvasHitTester — spatial indexing for hover/click hit detection on canvas-rendered geo marks
  • 6 documentation pages, 2 playground pages, 1 recipe page
  • Comprehensive test suites: FlowMap (25), ChoroplethMap (16), DistanceCartogram (19), colorUtils (+6), hooks (+3)

Accessibility (WCAG 2.1 AA ~70%)

  • Canvas aria-label on all Stream Frames describing chart type and data shape
  • Legend keyboard navigation — roving tabindex, Enter/Space activate, arrow keys navigate
  • aria-live="polite" region mirroring tooltip text for screen readers
  • SVG <title> and <desc> on all overlay components
  • aria-label on ChartContainer toolbar buttons
  • 35 Playwright accessibility integration tests

Streaming

  • Streaming legend support — useStreamingLegend hook discovers categories from pushed data dynamically
  • 20+ Playwright streaming regression tests (canvas pixel sampling, legend appearance, tooltip content, stability)

Performance

  • Color map cache — skips rebuild when categories unchanged
  • Stacked area cache — skips cumulative sum when data unchanged
  • Buffer array cache — dirty flag prevents re-materialization on hover/transition ticks
  • Canvas buffer reuse — skips GPU reallocation when dimensions unchanged
  • Path2D caching on geo nodes — eliminates per-hover allocations
  • Streaming push backpressure — microtask batching in DataSourceAdapter

AI Tooling

  • MCP server consolidated from 19 tools to 3 (renderChart, diagnoseConfig, reportIssue)
  • Self-healing error boundaries — SafeRender runs diagnoseConfig on chart failures (dev mode)
  • 61 new unit tests for withChartWrapper, network utilities, and ordinal push API

Fixed

  • Grey fills on push API charts — end-to-end fix for color pipeline when colorScale is unavailable during streaming
  • LineChart infinite re-render loop — circular dependency between statistical overlay effect and line style
  • tooltip={false} now correctly disables tooltips on all 22 remaining HOCs
  • Network HOC tooltip double-chrome wrapping (7 charts)
  • Math.min/max(...spread) stack overflow on >100K datasets
  • Unbounded memory growth in "growing" window mode (capped at 1M default)
  • Geo hooks crash — "Rendered more hooks than during previous render" in FlowMap and ChoroplethMap
  • ChoroplethMap colorScale crash with null areas during async loading
  • Function colorBy produced undefined colorsuseColorScale derives categories from data when colorBy is a function
  • Area/StackedArea tooltips showing "-" instead of values
  • Force graph centering and streaming refresh
  • FIFO category ordering for streaming ordinal charts
  • Edge hit areas expanded to 5px minimum tolerance
  • Sankey crossing reduction via barycenter ordering
  • Anti-meridian line handling for geo projections
  • And 20+ more fixes — see CHANGELOG.md

Improved

  • @ts-nocheck removed from Legend.tsx — full type safety restored
  • 38 as any casts eliminated from PipelineStore
  • useSyncExternalStore replaces custom shim (concurrent mode safe)
  • Shared useChartSetup hook — 10 HOCs refactored, ~170 lines removed

Tests

  • 1944 total tests, 106 test files
  • Direct tests for StreamXYFrame (39) and StreamOrdinalFrame (44)
  • Legend tests (33), tooltipUtils tests (35), ordinal scene builder tests (67)

Semiotic v3.0.1

20 Mar 04:44

Choose a tag to compare

Semiotic v3.0.1

Bug fixes, emphasis prop, direct labels, gap strategy fixes, and export improvements.

Added

  • emphasis prop — all charts accept emphasis="primary" | "secondary". ChartGrid spans primary charts across two columns
  • directLabel rendering — labels now actually render via new "text" annotation type
  • gapStrategy fixes"break" correctly splits lines at null boundaries; "interpolate" no longer coerces null to 0

Fixed

  • PNG export now composites canvas + SVG layers (previously captured only axes)
  • directLabel annotations no longer silently dropped
  • gapStrategy="break" no longer draws lines through gaps
  • colorBy type mismatch in network/hierarchy charts
  • Duplicate amplitude property in StreamOrdinalFrameProps

See CHANGELOG.md for details.

Semiotic v3.0.0

20 Mar 04:44
3bb2c48

Choose a tag to compare

Semiotic v3.0.0

Complete rewrite of Semiotic. Stream-first canvas architecture, 37 HOC chart components, full TypeScript, AI tooling, coordinated views, realtime encoding, and native server-side rendering.

Highlights

  • Stream-first rendering — all frames are canvas-first with SVG overlays for labels, axes, and annotations
  • 37 HOC chart components — XY (LineChart, Scatterplot, Heatmap, ...), Ordinal (BarChart, BoxPlot, ...), Network (ForceDirectedGraph, SankeyDiagram, ...), Realtime (RealtimeLineChart, ...)
  • Full TypeScript strict mode with generic type parameters on all components
  • Server-side rendering — component-level SSR (automatic in Next.js/Remix/Astro) + standalone semiotic/server
  • Realtime visual encoding — decay, pulse, transition, staleness effects
  • Coordinated views — LinkedCharts, CategoryColorProvider, cross-filtering, linked hover/brush
  • AI toolingsemiotic/ai schema, MCP server, CLI, validateProps, diagnoseConfig
  • 9 sub-package entry pointssemiotic, semiotic/xy, semiotic/ordinal, semiotic/network, semiotic/realtime, semiotic/geo, semiotic/ai, semiotic/data, semiotic/server

See CHANGELOG.md for the full list.

Annotation & Brush Bug-Squashing

21 Jan 03:13

Choose a tag to compare

FIXES

  • Updating note props wouldn't cause the note to rerender (thanks @torioLuz!)
  • Brushing could return null extent, failing the destructuring default (in the docs even!)

Smarter Tooltips, Clean Up Logging Issues

15 Nov 20:16

Choose a tag to compare

Minor release (the real work is going on in the semiotic-2 branch) that adds some functionality thanks to @torioLuz and otherwise just cleans up some minor logging bugs

FEATURES

  • Outbound tick lines option (@torioLuz could you make a PR to document this on semiotic-docs and/or a codepen or other to show how to use it?)
  • Add more tooltip attributes to improve tooltip behavior (@torioLuz could you make a PR to document this on semiotic-docs and/or a codepen or other to show how to use it?)

FIXES

  • Remove console log from OrdinalFrame

React 16.8+ Compatibility

06 Oct 20:01

Choose a tag to compare

Semiotic 2.0 deprecates a lot of old compatibility props, removes the download button and gets rid of deprecated lifecycle events. It should also (hopefully) take advantage of some of the newer React features. Please take a look and file any issues you discover.

  • DownloadButton is gone. It provided some convenience and much hassle and my philosophy on how to handle exporting data is that it should be a case-by-case feature handled outside of the dataviz framework.
  • Since everyone didn't always want to render with sketchy rendering it's optional now, so to enable sketchy rendering you will need to import Rough or a Rough-like library and pass it to your frame using the sketchyRenderingEngine prop. So something like:
import roughjs from "roughjs/dist/rough.es5.umd.js"
<XYFrame 
   sketchyRenderingEngine={roughjs}
/>
  • Old names for props (like areas in XYFrame which was replaced by summaries) are no longer honored.
  • react15Wrapper is removed from FacetController since React 15 is no longer supported
  • wordcloud has been removed from NetworkFrame it was never a very good word cloud

Other changes should be coming. If you have any suggestions just let me know. Bugfixes to 1.X will, of course, continue.