<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Semiotic Blog</title>
  <subtitle>Chart explainers, case studies, and release notes from the Semiotic data-visualization library.</subtitle>
  <link rel="self" type="application/atom+xml" href="https://semiotic.nteract.io/blog/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog"/>
  <id>https://semiotic.nteract.io/blog/</id>
  <updated>2026-07-16T00:00:00Z</updated>
  <author><name>Semiotic</name></author>
  <entry>
    <title>Metadata That Travels</title>
    <id>https://semiotic.nteract.io/blog/metadata-that-travels</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/metadata-that-travels"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/metadata-that-travels.png"/>
    <published>2026-07-16T00:00:00Z</published>
    <updated>2026-07-16T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <summary type="text">A chart an AI can pick correctly, a screen reader can receive, and that carries its own provenance is worth more than one that merely looks right — and those properties are metadata, portable in a way a renderer is not. The portability spec standardizes three of them as JSON Schemas, with a strict Vega-Lite supported-subset round trip and typed refusals for unsupported semantics.</summary>
  </entry>
  <entry>
    <title>Semiotic 3.8.0</title>
    <id>https://semiotic.nteract.io/blog/release-3-8-0</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/release-3-8-0"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/release-3-8-0.png"/>
    <published>2026-07-11T00:00:00Z</published>
    <updated>2026-07-11T00:00:00Z</updated>
    <author><name>AI-Generated</name></author>
    <category term="release"/>
    <summary type="text">Semiotic 3.8.0 introduces StreamPhysicsFrame and its evidence-first process runtime, alongside bounded streaming work, selective canvas painting, persistent workers, chart-level findings, slimmer imports, stronger layouts, and a chart-free AI core with a focused public MCP profile.</summary>
  </entry>
  <entry>
    <title>Physics that settles into charts</title>
    <id>https://semiotic.nteract.io/blog/physics-that-settles-into-charts</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/physics-that-settles-into-charts"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/physics-that-settles-into-charts.png"/>
    <published>2026-07-07T00:00:00Z</published>
    <updated>2026-07-07T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="physics"/>
    <category term="realtime"/>
    <summary type="text">The physics frame is not a particle-effect feature. It is a chart frame for cases where motion is the mechanism: sampling, lateness, queueing, routing, collision, and accumulation. The guardrail is simple: every physics chart must settle into a readable chart, expose the same state to readers and agents, and be exportable without asking the browser to perform the story live.</summary>
  </entry>
  <entry>
    <title>How Semiotic Keeps Fast PRs Clean</title>
    <id>https://semiotic.nteract.io/blog/release-gates-for-fast-prs</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/release-gates-for-fast-prs"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/release-gates-for-fast-prs.png"/>
    <published>2026-07-05T00:00:00Z</published>
    <updated>2026-07-05T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="release"/>
    <category term="process"/>
    <summary type="text">Semiotic can move through a high volume of PRs because review is backed by a stack of specific gates: builds, types, registry drift checks, docs and AI freshness, visual baselines, performance comparison, package smoke tests, and release verification. Humans review the rendered changes and the code that actually needs judgment.</summary>
  </entry>
  <entry>
    <title>What an Annotation Should Carry</title>
    <id>https://semiotic.nteract.io/blog/what-an-annotation-should-carry</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/what-an-annotation-should-carry"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/what-an-annotation-should-carry.png"/>
    <published>2026-07-03T00:00:00Z</published>
    <updated>2026-07-03T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <summary type="text">Once a chart is a surface that agents, watchers, and humans all write to, the annotation becomes the unit of the conversation. This is the release that gives annotations what that role requires: emphasis hierarchy, swoopy connectors, and provenance + lifecycle metadata aligned with the IDID conversational substrate.</summary>
  </entry>
  <entry>
    <title>Live conversational dashboards</title>
    <id>https://semiotic.nteract.io/blog/live-conversational-dashboard</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/live-conversational-dashboard"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/live-conversational-dashboard.png"/>
    <published>2026-07-02T00:00:00Z</published>
    <updated>2026-07-02T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="realtime"/>
    <summary type="text">Static dashboards show the past; chat-with-chart makes the past interrogable. Live conversational dashboards add what&apos;s missing: an AI watching the stream as it arrives, narrating events anchored to the chart, with a chat surface for human follow-ups. A case study on composing Semiotic&apos;s streaming runtime, interrogation hook, and annotation model into a single product.</summary>
  </entry>
  <entry>
    <title>Your sample lies about your data</title>
    <id>https://semiotic.nteract.io/blog/scale-aware-suggestions</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/scale-aware-suggestions"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/scale-aware-suggestions.png"/>
    <published>2026-06-30T00:00:00Z</published>
    <updated>2026-06-30T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="ai"/>
    <summary type="text">Hand `suggestCharts()` a hundred rows and it&apos;ll pick the right chart for the hundred. The production dataset is a million rows and the choice is wrong. Scale-aware suggestions close the gap by accepting a declared `DataScaleProfile` — what scale the data actually has, not what the sample looked like. With the design decisions behind it: split scale from quality, breakpoints per-chart not global, and the single-value gap the work surfaced.</summary>
  </entry>
  <entry>
    <title>From spec to runtime</title>
    <id>https://semiotic.nteract.io/blog/from-spec-to-runtime</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/from-spec-to-runtime"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/from-spec-to-runtime.png"/>
    <published>2026-06-26T00:00:00Z</published>
    <updated>2026-06-26T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="ai"/>
    <category term="roadmap"/>
    <summary type="text">applyAnnotationLifecycle as a one-line opacity-and-dashing pass, useConversationArc as the React entry point, auto-instrumentation on the existing AI hooks so an arc captures itself, and the shared bandFromAge primitive that lets decay, staleness, and freshness compose instead of competing.</summary>
  </entry>
  <entry>
    <title>The arc, the annotation, and the variant</title>
    <id>https://semiotic.nteract.io/blog/talk-track-intelligence</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/talk-track-intelligence"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/talk-track-intelligence.png"/>
    <published>2026-06-25T00:00:00Z</published>
    <updated>2026-06-25T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="ai"/>
    <category term="roadmap"/>
    <summary type="text">AI-assisted chart authoring is a session, not a single call. The spine for treating that session as a first-class thing — an event vocabulary for the arc itself, provenance + lifecycle on every annotation, and an extension surface for variant proposers.</summary>
  </entry>
  <entry>
    <title>Multimodal response: chart as output channel</title>
    <id>https://semiotic.nteract.io/blog/multimodal-response</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/multimodal-response"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/multimodal-response.png"/>
    <published>2026-06-23T00:00:00Z</published>
    <updated>2026-06-23T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <summary type="text">Modern LLM assistants treat text as the only output channel. When the question is about a chart, charts give us a parallel surface — callouts, threshold lines, bands, selections — that&apos;s both more honest and easier to read. Drafted exploration of what multimodal response means in practice.</summary>
  </entry>
  <entry>
    <title>Annotations That Make Room and Make Sense</title>
    <id>https://semiotic.nteract.io/blog/annotations-that-make-room-and-make-sense</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/annotations-that-make-room-and-make-sense"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/annotations-that-make-room-and-make-sense.png"/>
    <published>2026-06-21T00:00:00Z</published>
    <updated>2026-06-21T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="roadmap"/>
    <summary type="text">After hierarchy and placement, the next two annotation milestones handle the failure modes that show up at scale: too many notes, and notes that only connect to their target by color. This is achieved via an opt-in density budget with progressive disclosure and an accessibility audit for color-only association and an opt-in redundant leader-line cue.</summary>
  </entry>
  <entry>
    <title>Making Better Custom Charts</title>
    <id>https://semiotic.nteract.io/blog/making-better-custom-charts</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/making-better-custom-charts"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/making-better-custom-charts.png"/>
    <published>2026-06-20T00:00:00Z</published>
    <updated>2026-06-20T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="network"/>
    <category term="ai"/>
    <summary type="text">Every charting library hits the wall where the catalog runs out. This is about what&apos;s on the other side of that wall in Semiotic: a custom-layout surface principled enough to host a domain pipeline&apos;s lineage DAG and to render another library&apos;s baked render IR — even a hand-written one.</summary>
  </entry>
  <entry>
    <title>Streaming that aggregates itself</title>
    <id>https://semiotic.nteract.io/blog/streaming-that-aggregates-itself</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/streaming-that-aggregates-itself"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/streaming-that-aggregates-itself.png"/>
    <published>2026-06-19T00:00:00Z</published>
    <updated>2026-06-19T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="realtime"/>
    <summary type="text">Buffering raw records and redrawing them is the default front-end streaming pattern, and it scales with stream volume. Aggregate on ingest into bounded event-time windows and the cost follows the resolution of the view instead. That collapses bounded memory, downsampling, backpressure, and windowing into one mechanism, with live charts.</summary>
  </entry>
  <entry>
    <title>Semiotic 3.7.2</title>
    <id>https://semiotic.nteract.io/blog/release-3-7-2</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/release-3-7-2"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/release-3-7-2.png"/>
    <published>2026-06-12T00:00:00Z</published>
    <updated>2026-06-12T00:00:00Z</updated>
    <author><name>AI-Generated</name></author>
    <category term="release"/>
    <summary type="text">3.7.2 makes the MCP HTTP server easier to host: stateless Streamable HTTP, JSON responses, health endpoints, host allowlisting, and a Cloud Run wrapper. It also fixes dark-mode misses in the accessibility navigation demos and restores visible callouts in the contested-annotations blog chart.</summary>
  </entry>
  <entry>
    <title>Semiotic 3.7.1</title>
    <id>https://semiotic.nteract.io/blog/release-3-7-1</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/release-3-7-1"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/release-3-7-1.png"/>
    <published>2026-06-11T00:00:00Z</published>
    <updated>2026-06-11T00:00:00Z</updated>
    <author><name>AI-Generated</name></author>
    <category term="release"/>
    <summary type="text">3.7.1 makes charts checkable: renderChartWithEvidence() returns scene-graph ground truth so agents can verify marks actually drew, diagnoseConfig() flags deceptive designs like cherry-picked windows and over-sliced pies, every theme preset is gated against WCAG contrast floors, and the MCP server ships an experimental ChatGPT Apps chart widget.</summary>
  </entry>
  <entry>
    <title>Annotations That Get Contested, and Heard</title>
    <id>https://semiotic.nteract.io/blog/annotations-that-get-contested-and-heard</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/annotations-that-get-contested-and-heard"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/annotations-that-get-contested-and-heard.png"/>
    <published>2026-06-10T00:00:00Z</published>
    <updated>2026-06-10T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="roadmap"/>
    <category term="accessibility"/>
    <summary type="text">Annotations need to be well-placed, un-crowded, legibly associated, responsive, and defensible. But they also need to know where they are in the annotation lifecycle: proposed / accepted / disputed / retracted, supersession chains, and conversation-arc events. This way, a note becomes the durable node that captures conversation and meaning-making. Annotations lead the chart description and get their own branch in the navigation tree, so a screen-reader user meets the author&apos;s intent head-on.</summary>
  </entry>
  <entry>
    <title>Annotations That Adapt and Travel</title>
    <id>https://semiotic.nteract.io/blog/annotations-that-adapt-and-travel</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/annotations-that-adapt-and-travel"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/annotations-that-adapt-and-travel.png"/>
    <published>2026-06-09T00:00:00Z</published>
    <updated>2026-06-09T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="roadmap"/>
    <summary type="text">Make annotations adapt to space and house style. It sheds secondary notes as the plot narrows, and chooses whether notes blend into the chart or read as a distinct editorial layer. M6 adapts to the reader and to reuse: scale annotation amount by audience familiarity, and mark a note defensive so it survives every export with its source and confidence baked in.</summary>
  </entry>
  <entry>
    <title>Annotations That Lead and Land</title>
    <id>https://semiotic.nteract.io/blog/annotations-that-lead-and-land</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/annotations-that-lead-and-land"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/annotations-that-lead-and-land.png"/>
    <published>2026-06-07T00:00:00Z</published>
    <updated>2026-06-07T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="roadmap"/>
    <summary type="text">Semiotic already treated annotations as data-bound objects. Now it helps authors make design decisions with those objects: primary and secondary notes, inferred reading order from confidence, an accessibility audit hook, and an opt-in annotationLayout recipe that places notes near their targets while avoiding obvious collisions.</summary>
  </entry>
  <entry>
    <title>Semiotic 3.7.0</title>
    <id>https://semiotic.nteract.io/blog/release-3-7-0</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/release-3-7-0"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/release-3-7-0.png"/>
    <published>2026-06-07T00:00:00Z</published>
    <updated>2026-06-07T00:00:00Z</updated>
    <author><name>AI-Generated</name></author>
    <category term="release"/>
    <summary type="text">3.7.0 makes Semiotic&apos;s AI and annotation work receivable: charts can describe themselves, expose structured navigation, carry annotation provenance, persist authoring context, repair or vary agent proposals, and render focal values through the new BigNumber entry point.</summary>
  </entry>
  <entry>
    <title>Auditing What You Can&apos;t See</title>
    <id>https://semiotic.nteract.io/blog/auditing-what-you-cant-see</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/auditing-what-you-cant-see"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/auditing-what-you-cant-see.png"/>
    <published>2026-06-05T00:00:00Z</published>
    <updated>2026-06-05T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="accessibility"/>
    <summary type="text">A canvas chart is an opaque image to a screen reader, and automated checkers can&apos;t see it. auditAccessibility() grades a chart config against Chartability&apos;s heuristics crediting the built-ins every chart ships, flagging the author-actionable gaps, and, most importantly, marking what it cannot know as &apos;manual&apos; instead of manufacturing a false green checkmark.</summary>
  </entry>
  <entry>
    <title>Anchored conversations: when the AI knows which point you&apos;re asking about</title>
    <id>https://semiotic.nteract.io/blog/anchored-conversations</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/anchored-conversations"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/anchored-conversations.png"/>
    <published>2026-06-01T00:00:00Z</published>
    <updated>2026-06-01T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <summary type="text">Chat-with-chart works, but the user has to verbalize which point they care about and the AI has to verbalize where the answer applies. Both steps lose the spatial information that&apos;s already on screen. Bidirectional point-anchored AI conversation, with useChartFocus + useChartInterrogation as the building blocks.</summary>
  </entry>
  <entry>
    <title>Semiotic 3.6.0</title>
    <id>https://semiotic.nteract.io/blog/release-3-6-0</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/release-3-6-0"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/release-3-6-0.png"/>
    <published>2026-05-26T00:00:00Z</published>
    <updated>2026-05-26T00:00:00Z</updated>
    <author><name>AI-Generated</name></author>
    <category term="release"/>
    <summary type="text">3.6.0 turns Semiotic&apos;s observation hooks, native annotations, and streaming runtime into an explicit AI-facing surface. Charts declare what they&apos;re for; datasets get profiled and ranked; audiences get calibrated; conversations anchor back to the chart instead of stopping at a chat bubble. Three case-study posts published alongside the release walk through what the new shape makes possible.</summary>
  </entry>
  <entry>
    <title>Charts that know what they&apos;re for</title>
    <id>https://semiotic.nteract.io/blog/charts-that-know-what-theyre-for</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/charts-that-know-what-theyre-for"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/charts-that-know-what-theyre-for.png"/>
    <published>2026-05-25T00:00:00Z</published>
    <updated>2026-05-25T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <summary type="text">Semiotic 3.6.0 ships a chart recommendation engine that&apos;s heuristic-first, LLM-optional, and audience-aware. Charts now carry descriptors that declare what data shapes they serve and which questions they answer; an AudienceProfile layers per-org familiarity and adoption targets on top; a separate &apos;stretch&apos; surface grows literacy without forcing it.</summary>
  </entry>
  <entry>
    <title>Semiotic 3.5.4</title>
    <id>https://semiotic.nteract.io/blog/release-3-5-4</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/release-3-5-4"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/release-3-5-4.png"/>
    <published>2026-05-21T00:00:00Z</published>
    <updated>2026-05-21T00:00:00Z</updated>
    <author><name>AI-Generated</name></author>
    <category term="release"/>
    <summary type="text">3.5.4 adds a first-class asymmetric band encoding (with percentile fans) to LineChart and AreaChart, sharpens the axis surface with edge-anchored ticks, CSS-variable font sizes, and per-axis class names, ships loadingContent across every HOC, and collapses bounds + band into a single shared ribbon primitive.</summary>
  </entry>
  <entry>
    <title>Semiotic 3.5.3</title>
    <id>https://semiotic.nteract.io/blog/release-3-5-3</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/release-3-5-3"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/release-3-5-3.png"/>
    <published>2026-05-18T00:00:00Z</published>
    <updated>2026-05-18T00:00:00Z</updated>
    <author><name>AI-Generated</name></author>
    <category term="release"/>
    <summary type="text">3.5.3 adds DifferenceChart, exact axis ticks, Swimlane rounded ends, and ProcessSankey lifecycle timing; it also launches the docs blog, refreshes AI capabilities to 45 chart schemas, and wires new release gates for capability and blog metadata drift.</summary>
  </entry>
  <entry>
    <title>Process Sankey vs Classic Sankey</title>
    <id>https://semiotic.nteract.io/blog/process-sankey-vs-classic-sankey</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/process-sankey-vs-classic-sankey"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/process-sankey-vs-classic-sankey.png"/>
    <published>2026-05-16T00:00:00Z</published>
    <updated>2026-05-16T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="chart-explainer"/>
    <category term="network"/>
    <summary type="text">Same flow data, two layouts, two stories. The classic Sankey is unbeatable for part-to-whole at aggregate scale; the Process Sankey paints discrete events at their actual times and makes surges, cycles, and lingering patients visible. With an Anscombe&apos;s-quartet section: four scenarios that produce a byte-identical aggregate Sankey and four operationally distinct ProcessSankey timelines.</summary>
  </entry>
  <entry>
    <title>DifferenceChart, explained</title>
    <id>https://semiotic.nteract.io/blog/difference-chart</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/difference-chart"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/difference-chart.png"/>
    <published>2026-05-14T00:00:00Z</published>
    <updated>2026-05-14T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="chart-explainer"/>
    <category term="xy"/>
    <summary type="text">A two-line chart leaves the difference implicit; DifferenceChart fills it in. Plot A and B as overlay lines, color the area between with one color where A leads and the other where B leads, and let the chart interpolate the crossovers so the fills kiss at zero. Forecast vs actual, YoY, temperature anomaly — the classic uses.</summary>
  </entry>
  <entry>
    <title>Semiotic 3.5.2</title>
    <id>https://semiotic.nteract.io/blog/release-3-5-2</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/release-3-5-2"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/release-3-5-2.png"/>
    <published>2026-05-10T00:00:00Z</published>
    <updated>2026-05-10T00:00:00Z</updated>
    <author><name>AI-Generated</name></author>
    <category term="release"/>
    <summary type="text">3.5.2 is mostly a factor-and-extend release: useSeriesFeatures / useEncodingDomain / useStreamStatus / useXYLineStyle hooks land, ProcessSankey inherits SankeyDiagram&apos;s canvas particle pipeline, regression-line sugar extends to five more charts, FlowMap joins the push family, and ai/capabilities.json indexes all 44 charts.</summary>
  </entry>
  <entry>
    <title>Minard&apos;s March, rebuilt in Semiotic</title>
    <id>https://semiotic.nteract.io/blog/minards-march</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/minards-march"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/minards-march.png"/>
    <published>2026-04-22T00:00:00Z</published>
    <updated>2026-04-22T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="case-study"/>
    <category term="geo"/>
    <category term="tutorial"/>
    <summary type="text">Tufte called Minard&apos;s chart &quot;the best statistical graphic ever drawn.&quot; Rebuilding it is the cleanest way to learn Semiotic&apos;s composition primitives — FlowMap with tiles, particles, a linked ConnectedScatterplot, and shared categorical colors all in one page.</summary>
  </entry>
  <entry>
    <title>QuadrantChart, explained</title>
    <id>https://semiotic.nteract.io/blog/quadrant-chart</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/quadrant-chart"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/quadrant-chart.png"/>
    <published>2026-04-03T00:00:00Z</published>
    <updated>2026-04-03T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="chart-explainer"/>
    <category term="xy"/>
    <summary type="text">Most strategic frameworks are 2×2 grids — quick wins vs strategic bets vs fill-in vs money pits. QuadrantChart bakes the threshold lines and quadrant labels into a scatterplot so &apos;which quadrant is this in?&apos; answers itself.</summary>
  </entry>
  <entry>
    <title>FunnelChart, explained</title>
    <id>https://semiotic.nteract.io/blog/funnel-chart</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/funnel-chart"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/funnel-chart.png"/>
    <published>2026-03-08T00:00:00Z</published>
    <updated>2026-03-08T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="chart-explainer"/>
    <category term="ordinal"/>
    <summary type="text">A FunnelChart is a bar chart with the geometry tweaked so stage-to-stage drop-off is the visual headline. Sales funnels, signup conversion, recruiting pipelines, manufacturing yield — anywhere monotonically-shrinking ordered stages need a chart that shows where the lake drains.</summary>
  </entry>
  <entry>
    <title>OrbitDiagram, explained</title>
    <id>https://semiotic.nteract.io/blog/orbit-diagram</id>
    <link rel="alternate" type="text/html" href="https://semiotic.nteract.io/blog/orbit-diagram"/>
    <link rel="enclosure" type="image/png" href="https://semiotic.nteract.io/blog/og/orbit-diagram.png"/>
    <published>2026-02-18T00:00:00Z</published>
    <updated>2026-02-18T00:00:00Z</updated>
    <author><name>Elijah Meeks</name></author>
    <category term="chart-explainer"/>
    <category term="network"/>
    <category term="hierarchy"/>
    <summary type="text">OrbitDiagram is the chart for when the audience needs to feel oriented, not make a decision. Concentric rings, slow rotation, depth-as-radius. The animation isn&apos;t gratuitous — it tells the eye that ring membership is the encoding and angular position is decorative.</summary>
  </entry>
</feed>
