Add an AI support assistant to a Vue or Nuxt app
One component with one prop, or two lines in index.html. Either way the widget itself never enters your bundle.
- One component
- About two minutes
- One file
pnpm add @matterchat/vue<script setup>import { MatterChat } from "@matterchat/vue";</script> <template> <!-- your app --> <MatterChat public-key="bot_your_key" /></template>vue · render it once
Where the component goes
Install @matterchat/vue and render <MatterChat public-key=... /> once in App.vue. It renders nothing and does all of its work in onMounted, so it is safe to import in a Nuxt app — wrap it in <ClientOnly> and it stays out of the server render entirely. If you would rather add nothing to package.json, the plain script tag still works: index.html for a Vite app, or app.head.script in nuxt.config.
- Vue: one component in App.vue
- Render it once, anywhere. It adds the script itself and renders as an empty comment node.
- Nuxt: inside <ClientOnly>
- Belt and braces — the work already happens in onMounted, which Nuxt only runs in the browser.
- Script tag: still the no-dependency route
- index.html before the closing body tag, or app.head.script in nuxt.config. Same widget, no package.
- No SSR hazard
- The widget is fetched at run time, not imported, so nothing of it ever runs during server render.
It renders nothing — an empty comment node — and does all of its work in onMounted, so it is safe to import on the server. On Nuxt, wrap it in <ClientOnly> and it stays out of the server render entirely. Rendering it twice is safe: the script is added once.
Documentation without duplication
The crawler reads your published documentation wherever it is deployed. Nothing has to be imported into the app, kept in sync, or maintained twice.
What the crawler sees: Vue SPA vs Nuxt
Our crawler fetches HTML and does not execute JavaScript. A Vite-built Vue SPA therefore reads as an empty shell — while a Nuxt site, server-rendered or statically generated, serves complete HTML and crawls like any other site.
Almost nothing in the dependency tree
The package is a thin wrapper with no dependencies of its own. It pins our loader rather than a widget build, so widget fixes reach you without a version bump, and nothing arrives in your lockfile because of a support widget. Skip it and paste the script tag, and there is no package at all.
Checking it actually worked
Four things, in order. The third is the one people skip, and it is the one that tells you whether the answers are grounded.
- 1Hard refresh the page — the launcher appears bottom-right.
- 2Ask it something your site answers, and check the reply cites a page.
- 3Ask it something your site does not cover, and check it declines.
- 4Open Conversations in the dashboard; both should be there.
On a different stack?
The snippet is the same everywhere. Only the place you paste it changes.
What developers ask
Short answers. If yours is not here, the assistant on this page will try it — and tell you honestly if it cannot.
Can you crawl a client-rendered Vue SPA?
No crawler that skips JavaScript can — ours reads the served HTML, which in a Vite SPA is a mount point and a script tag. Nuxt SSR or SSG serves real HTML and crawls normally; for a plain SPA, crawl your docs site or upload files.
How do I add it to Nuxt?
Render <MatterChat> inside <ClientOnly> in app.vue, or add the script through app.head.script in nuxt.config if you would rather not add a package. Both handle the server-rendered first load and later client navigation without per-page work.
Will it cause hydration errors?
No. The component renders nothing and does its work in onMounted, which never runs on the server, so it does not participate in hydration. The script tag route does not participate in rendering at all.
Does it work with Vue 2?
The package needs Vue 3. On Vue 2, paste the script tag into index.html — it goes in the HTML rather than the framework, so the Vue version is irrelevant.
From the blog
All posts- BuildingDomain locks and why “works on localhost” isn’t enoughDomain allowlists exist so your bot answers only where you installed it. Testing on localhost proves the script loads; it does not prove production embeds are locked down.Read
- EvaluatingThe best AI chatbot for a Webflow site, compared honestly (2026)Matter Chat, Social Intents, Ultimo Bots, Chatling, WeblyChat and Chatbase on a Webflow site: Apps marketplace or custom code, the paid-site-plan gate, CMS coverage, citations, handoff and pricing. Checked on the vendors' own pages.Read
- BuildingWhat to index first when your site is a messStart with the pages that already resolve real support questions. Noise, archives, and unfinished docs can wait — indexing them first makes answers worse.Read
Answer honestly. Capture the rest.
Point Matter Chat at your site and see what it can — and can't — answer. It's honest about both.
No credit card. 2 minute setup.
Every answer cites the source it came from. When there isn't one, it says so — and hands the visitor to you.
Installs on the tools you already run.


