Skip to content

Canvas Memory

Canvas memory stores structured JSON data on a canvas, scoped by namespace. It persists across runs so workflows can keep state, pass data between branches, or look up records by matching fields.

  • Canvas-scoped — Data belongs to one canvas.
  • Namespaces — You choose a namespace string per use case (for example deployments or incidents).
  • Rows — Each write can add or update rows; each row holds JSON values (object).
  • Matching — Read, update, delete, and upsert operations can match rows by field values (JSON containment).

Runs on the same canvas are independent: payloads from one run do not automatically appear in the next. Canvas memory is where you store facts that should survive until a later run needs them.

PatternHow
Staged rolloutUpsert the current stage; next run Read (latest) to decide whether to advance.
Incident handoffRun 1 Add IDs; Run 2 Read by key to continue the same incident.
DeduplicationUpsert on a stable key; branch on found / notFound.
CountersUpdate to merge new values (e.g. attempt count); later runs read the totals.

SuperPlane provides five components for canvas memory:

ComponentPurpose
Add MemoryAppend a new row in a namespace.
Read MemoryFind rows by namespace and match criteria; emits on found or notFound.
Update MemoryUpdate matching rows by merging new fields; emits on found or notFound.
Delete MemoryDelete matching rows; emits on deleted or notFound.
Upsert MemoryUpdate the first match, or insert if none match.

Read Memory supports:

  • Result modeall (every match) or latest (most recent).
  • Emit modeallAtOnce (one event with all matches) or oneByOne (one event per row).

See the Components reference for field-level configuration.

Canvas memory can also be listed or cleared via the REST API (see Public API Reference). Managing memory records requires canvas permissions that allow reading or updating the canvas as appropriate.