Skip to main content
DocsEmbed scriptInstallation
Embed script

Installation

Drop one script tag on your page — the widget auto-injects its launcher and connects to your assistant.

Last updated 2026-06-03

Zupport.chat ships as a single JavaScript file served from the GitHub Releases CDN. Drop the script tag on your page — the widget auto-injects a floating launcher in the corner. That's the whole install.

1. Latest release (recommended for trying it out)

Always serves the newest published build. Easy to start with, but a bad release could affect every site at once — pin a version for production (next section).

<script
  src="https://github.com/pavelsima/zupport-embed/releases/latest/download/embed.js"
  data-assistant-id="YOUR_ASSISTANT_ID"
  defer
></script>

2. Pinned release (recommended for production)

Lock to a specific tag so updates only ship when you choose to bump the version. Browse available tags at github.com/pavelsima/zupport-embed/releases .

<script
  src="https://github.com/pavelsima/zupport-embed/releases/download/v0.13.4/embed.js"
  data-assistant-id="YOUR_ASSISTANT_ID"
  defer
></script>
Why the defer attribute?
defer tells the browser to download the script in parallel but only run it after the HTML is parsed. The widget needs the body to exist before it can mount its launcher, and defer guarantees that without blocking first-paint.
One install path
Zupport.chat's embed loads directly from GitHub Releases — no package manager needed. One install path means one set of bug reports. The embed script itself is open source (MIT) — issues and PRs at github.com/pavelsima/zupport-embed/issues.

Where to place the snippet

Either inside <head> (with defer) or just before </body> works. The widget auto-injects its launcher into document.body as soon as the DOM is ready.

Loading order

  1. The browser parses the <script> tag.
  2. Once the DOM is ready, the script registers the <zupport-chat> custom element and appends one to the page.
  3. It fetches config.json, scenarios.json, and (on desktop with the LLM engine) vectors.json from the configured base URL.
  4. The selected runtime boots: model weights download on desktop with the LLM engine, or scenarios load instantly on mobile. The launcher becomes interactive.
  5. zupport-ready fires.

Verifying the install

Open the site in a clean browser tab and confirm:

  • A round launcher button appears in the bottom corner.
  • The browser console has no errors from embed.js.
  • Opening the launcher shows the chat panel and the greeting you configured.

If something is off, jump to Troubleshooting.