The widget is never frozen in your bundle
Like@stripe/stripe-js, @concatflow/embed does not bundle the widget. It loads the hosted widget.js. Your customers always get the current launcher and assistant, with its fixes, without a redeploy on your side.
The contract is versioned
Everyinit call from @concatflow/embed carries the version of the options contract it speaks: v: 1, exported as PROTOCOL_VERSION.
widget.js and the assistant’s iframe carry their own version too. A message from another version is ignored, never guessed.
The rule on Concatflow’s side: the hosted script keeps understanding older versions. An old copy of @concatflow/embed in your bundle keeps working after Concatflow ships a new widget.
Package versions
Both packages are at0.2.0. They are versioned independently of the widget: upgrading them is never needed to get widget fixes.
The HTTP API
@concatflow/node calls versioned routes under /api/v1/. See the HTTP API.