Two version counters
The content version is bumped by the editor’s migrations as the component model evolves. The wire format version stays at
1 because the on-the-wire JSON shape the SDK parses has not changed in a way that breaks older SDKs. They are not the same number, and that is expected.
Editor migrations (content version)
When the editor loads a flow whoseversion is below 9, it applies migrations in sequence until it reaches the current version. Each migration is small and runs on load (never on save unless you then save the draft).
If a flow is somehow ahead of the migration registry (no migration path found), the editor logs a warning and stamps it as the current version without transforming it.
Removed and rewritten types
Migrations strip or rewrite types that are no longer in the schema:- Stripped from the layout tree on load:
carousel,video,chart,spacer,divider(and the old placeholderlottie). The parent stays; only the removed node and its descendants go. - Rewritten into a composition of current primitives:
checkboxandchipbecome styled stacks;cardbecomes a styled stack with surface defaults; legacy button-only prop names map to the canonical ones.
lottie and comparisonChart are supported component kinds in the current schema. The strip in the 3 to 4 migration applied to the earlier placeholder versions of these kinds; the real primitives were added later. See the Component reference for the current list.SDK compatibility (wire format version)
Both SDKs check the resolve response’sschema_version against the highest version they support (1.0.0 in the current iOS and Expo SDKs). They compare the major component only.
- Same major version: the flow renders. If the minor or patch is newer than the SDK, the SDK renders best-effort and logs a warning. Any component or node type the build does not recognize is skipped rather than failing the whole screen.
- Higher major version: the SDK throws
unsupportedSchemaVersionwith the message “Flow requires schema X, but SDK only supports up to Y. Please update the app.” This is the signal that the wire format changed in a way the installed SDK genuinely cannot parse.
unsupportedSchemaVersion on iOS, UNSUPPORTED_SCHEMA_VERSION on Expo). See error handling for iOS or Expo for how each delivers it (the iOS never-throwing overloads return it as a FlowResult error rather than throwing).
Notes
- The migration chain is what lets you publish over many months without breaking old drafts: opening an old flow upgrades it in the editor.
- The exact per-version field-level changes beyond the descriptions above are not enumerated here; the migration descriptions above are taken verbatim from the migration registry.