An adapter, here, is not "support for format X." It is avector that carries Semiotic's ideas into an ecosystem that doesn't have them. A chart that an AI can pick correctly, that a screen-reader user can receive, and that carries its own provenance is worth more than one that merely renders — and those properties are metadata, portable in a way a rendering engine is not. Each adapter on this page reproduces a source's analytical logic, then hands the result the legibility, accessibility, and provenance the source format never had.
The strategy in one paragraph
Breadth must not cost coherence. Every adapter here compiles to the same small set of gate-defended public artifacts — a serializableChartConfig, a provenancedannotation array, or the generate→validate→repair→prove trust loop — so reaching a new ecosystem never widens the surface that has to be maintained. The library takes on no new dependency for any single adapter: heavy parsers and engines (a Mermaid grammar, an Arrow table, an LLM SDK) are user-supplied or duck-typed, never folded into the core. And an adapter that can't faithfully represent a source constructrefuses with a reason rather than emit a plausible-but-wrong chart — because the failures are exactly where a non-expert reader and an LLM are both deceived.
Inbound and outbound
Most adapters are inbound — a foreign spec, dataset, or quality signal comes in and becomes a Semiotic chart or annotation. Theportability spec also goes outbound: toVegaLite round-trips a chart back through the dominant interchange format with its metadata intact, which is the portability claim in runnable form. New formats slot into the same framework — each is a pure function returning an inspectable object, so it is testable, SSR-safe, and usable server-side and in notebooks.
The adapters
The schema at the center
Three library-neutral JSON Schemas for the metadata that makes a chart agent-legible and audience-aware — chart capability, audience profile, annotation provenance & lifecycle. This is what turns an adapter from a parser into an export of the ideas.
- Portability Spec— The standard itself + bidirectional Vega-Lite (toVegaLite) and the IDID-over-Vega-Lite binding.
Inbound spec adapters — a format becomes a chart
Parse another tool's chart description and compile it to a Semiotic ChartConfig. The chart arrives with the accessibility, navigation, theming, and provenance the source never had.
- Vega-Lite— fromVegaLite — the dominant declarative grammar (stable).
- Observable Plot— fromObservablePlot — the notebook→production handoff.
- Flint Chart— unstable_fromFlintChart — agent-authored semantic chart requests into Semiotic ChartConfig.
- Mermaid— fromMermaid — text-to-graph, compiled to a layered, accessible DAG.
- GoFish DisplayList— unstable_fromGofishIR — maps GoFish's baked render IR (toDisplayList) onto a custom layout by role.
Inbound data adapter — a data runtime becomes marks
Feed an in-browser analytics engine straight into the chart accessor path.
- Apache Arrow— fromArrow — Arrow / DuckDB-Wasm result sets into Semiotic rows.
Inbound semantics — metadata becomes meaning on the chart
Ingest a data-quality or data-truth signal and put it on the chart as a provenanced, lifecycled annotation — flipping the chart's communicative act from report to alert.
- Data-Truth Bridge— fromDbtArtifacts / fromGreatExpectations → provenanced annotations.
Agent integration — an LLM ↔ a trustworthy chart
Wrap chart generation in a deterministic loop so an agent ships a guaranteed-renderable chart or precise reasons to retry — never a broken one.
Status & staging
New grammar adapters ship behind an unstable_ prefix insemiotic/experimental while they're proven against real inputs (Observable Plot, Mermaid, GoFish, and the portability runtime surface live there today); the stable, lower-ambiguity adapters (fromVegaLite, fromArrow) ship insemiotic/data, and the agent + data-truth surfaces ridesemiotic/ai. The JSON Schemas themselves are the durable, versioned artifact. Every adapter ships proportional to its surface: a docs page, a fixture suite that doubles as a regression target, and — for the config-producing ones — a round-trip test throughfromConfig that proves it emits only props the schema knows.