Skip to content

0.2.0

Released 2026-06-08.

A breaking wire-contract release. 0.2.0 realigns Toise onto the merged OpenTelemetry entity-events specification (specification/entities/entity-events.md, merged 2026-06-04) and removes the transitional relation extension. What changes is the wire contract producers emit; stored event-log data and the GraphQL/MCP query schemas are unaffected.

Toise is pre-1.0/alpha, so this is a clean break with no compatibility shim — update producers in lockstep. See the 0.1 → 0.2 migration guide.

Changed

  • Relationships are embedded-only. Edges now ride embedded on the source entity's state event as an entity.relationships array ({ relationship.type, entity.type, entity.id } naming the target); removal is by absence. The engine, change taxonomy, and bi-temporality are unchanged — the ingest boundary still translates each descriptor into a first-class relation event.
  • Ingest realigned onto the merged OTel entity-events spec. Entity events are identified by the LogRecord EventName (entity.state / entity.delete), not an attribute; attribute keys drop the otel. prefix and rename (entity.type, entity.id, entity.description); the liveness interval is entity.report.interval in seconds (was otel.entity.interval in milliseconds — a unit fix); the relationship descriptor field is relationship.type; entity.id is typed map<string,string>.
  • Process identity follows the OTel semantic conventions{ process.pid, process.creation.time }, so PID reuse across a restart is a new process, not a mutated one.

Added

  • Layered configuration for toise-server — built-in defaults < YAML file (--config / TOISE_CONFIG) < environment (TOISE_*) < flags. Unknown YAML keys are rejected; secrets are sourced from the environment only. See Configuration.
  • GraphQL API reference — schema, Relay pagination, the bi-temporal eventTime / recordedAt / asKnownAt model, worked queries, and the guardrails. See GraphQL API.
  • connected_to relation type and topology-as-entities — ports as network.interface entities linked by has_interface, with bare connected_to adjacency, so edges stay attribute-free under the embedded model.
  • graph-viz example — a live GraphQL-subscriptions client rendering the graph in real time.

Removed

  • The entity.relation.* relation extension — separate relation LogRecords, edge attributes, and the strict-purity routing path are gone. Relationships are embedded-only.

Fixed

  • WebSocket subscriptions no longer hit the per-request timeout. The GraphQL subscription upgrade is routed around the timeout handler, so long-lived subscriptions work.

Upgrading

The breaking change is entirely in what producers emit. Update your producers to the embedded-relationships, EventName-keyed wire shape described in Ingesting data, then upgrade toise-server. The full, field-by-field migration is in the 0.1 → 0.2 migration guide.