> ## Documentation Index
> Fetch the complete documentation index at: https://docs.concatflow.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Versioning

> The widget updates itself. Your copy of the npm package keeps working.

There are two things with a version, and they move apart on purpose.

| What | Where it lives | Who updates it |
| - | - | - |
| `widget.js` and the assistant | Concatflow's origin | Concatflow, continuously |
| `@concatflow/embed`, `@concatflow/node` | your `package.json` | you, when you choose |

## 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

Every `init` call from `@concatflow/embed` carries the version of the options contract it speaks: `v: 1`, exported as `PROTOCOL_VERSION`.

```ts theme={"system"}
import { PROTOCOL_VERSION } from "@concatflow/embed";

console.log(PROTOCOL_VERSION); // 1
```

The messages between `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 at `0.2.0`. They are versioned independently of the widget: upgrading them is never needed to get widget fixes.

```bash theme={"system"}
npm install @concatflow/embed@^0.2.0 @concatflow/node@^0.2.0
```

## The HTTP API

`@concatflow/node` calls versioned routes under `/api/v1/`. See the [HTTP API](https://docs.concatflow.com/reference/api/overview.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.