> For the complete documentation index, see [llms.txt](https://docs.klink.cloud/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.klink.cloud/getting-started/setup-channels/live-chat/chat-widget-sdk-versions-and-urls.md).

# Chat Widget - SDK Versions & URLs

Choose how your website or app receives updates to the klink.cloud chat widget: automatically, or only when you decide to upgrade.

#### Which URL should I use?

| URL                                                          | You get                            | Updates                                    | Best for                                                          |
| ------------------------------------------------------------ | ---------------------------------- | ------------------------------------------ | ----------------------------------------------------------------- |
| `https://chat.klink.cloud/klink-chat-widget.embed.latest.js` | The latest release                 | Automatic, within minutes                  | Most websites                                                     |
| `https://chat.klink.cloud/sdk/v1/klink-chat-widget.js`       | The latest **1.x** release         | Automatic, but **never a breaking change** | Websites that want updates, but no surprises                      |
| `https://chat.klink.cloud/sdk/1.0.0/klink-chat-widget.js`    | Exactly version 1.0.0, **forever** | Never. You upgrade by changing the URL     | Mobile apps and teams that test every upgrade before releasing it |

{% hint style="info" %}
**Available from widget version 1.0.0.** The `sdk/v1/` and `sdk/<version>/` URLs go live with the 1.0.0 release. Until then, use `klink-chat-widget.embed.latest.js`. It's permanently supported, so you never need to change it.
{% endhint %}

Use the URL in the installation snippet:

```javascript
var SCRIPT_PATH = "https://chat.klink.cloud/sdk/v1/klink-chat-widget.js";
```

***

#### How versions work

Widget versions follow the format **MAJOR.MINOR.PATCH** (e.g. `1.4.2`):

| Change    | Example           | What it means for you                                                                                                                                          |
| --------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Patch** | `1.4.1` → `1.4.2` | Bug fixes. Nothing to do                                                                                                                                       |
| **Minor** | `1.4.2` → `1.5.0` | New optional features (new options, events). Existing code keeps working                                                                                       |
| **Major** | `1.9.0` → `2.0.0` | Something could break an existing integration (e.g. an option removed or renamed). Announced in advance in the [release notes](/general-docs/release-notes.md) |

* `sdk/v1/` receives every **1.x** release and stays on the last 1.x release when 2.0.0 ships. To upgrade, you switch to `sdk/v2/`.
* A pinned version (`sdk/1.0.0/`) never changes. Its files are cached for a year, so it also loads fastest for returning visitors.
* `klink-chat-widget.embed.latest.js` always follows the newest release. Breaking changes will be announced before they reach it.

***

#### Check which version is running

Open your browser's developer console on your website and type:

```javascript
window.klinkChatSDK.version
// "1.0.0"
```

Include this when contacting support.

***

#### Recommendations

* **Websites:** use `embed.latest.js` or `sdk/v1/` to get fixes automatically.
* **Mobile apps (script embed):** pin an exact version (e.g. `sdk/1.0.0/`) and store the URL in remote configuration (e.g. Firebase Remote Config). You can then upgrade without releasing a new app version.
* **Mobile apps (hosted chat page `chat.klink.cloud/app`):** the hosted page always runs the latest release, so there's nothing to pin. Its URL parameters are stable.
* **Don't add cache-busting parameters** like `?v=<timestamp>`. They make every visitor download the full widget on every page view. The URLs above are already served with the right caching.
* **Content Security Policy:** if your site restricts scripts, allow `https://chat.klink.cloud`. The widget loads optional parts (emoji picker, image carousel) from the same host when they're first used.

***

#### Old URLs

| Old URL                                                                        | Status                  | Replace with  |
| ------------------------------------------------------------------------------ | ----------------------- | ------------- |
| `https://webchat.klink.cloud/widget/klink-chat-widget.umd.js`                  | ❌ No longer works       | Any URL above |
| `https://cdn-webchat.s3.ap-southeast-1.amazonaws.com/klink-chat-widget.umd.js` | ❌ No longer works       | Any URL above |
| `https://chat.klink.cloud/klink-chat-widget.embed.latest.js`                   | ✅ Permanently supported | Nothing to do |
