For your stack
IndieBob for Nuxt and Vue developers
IndieBob is a Nuxt 4 app, the SDK ships a first-party Vue plugin, and the whole platform is dogfooded on this site. This is the stack where the fit is least theoretical.
IndieBob is written in Nuxt 4 and Vue 3, and it tracks itself with its own SDK. When something is awkward in a Nuxt app, we hit it first.
That produces two concrete things a Nuxt developer can use today: a Vue plugin export in the tracker, and a content webhook that fires when you publish so a statically generated blog can rebuild itself.
| Topic | Your situation | What IndieBob actually does |
|---|---|---|
Installing the tracker IndieBob | Nuxt renders on the server first, so an analytics script that touches window or localStorage at import time breaks the SSR pass. | Ship it as a .client.ts plugin: the SDK exposes a Vue plugin entry point (@indiebob/tracker/vue) alongside the plain browser build, and all identity storage happens behind that boundary. packages/tracker/src/integrations/vue.tspackages/tracker/src/core/identity.ts |
Route changes IndieBob | Vue Router navigations do not reload the page, so a naive script records one pageview per session. | The page collector hooks history navigation, so client-side route changes are recorded as pageviews without you calling page() by hand. packages/tracker/src/collectors/page.ts |
Publishing to a Nuxt Content blog IndieBob | A statically generated Nuxt site needs a trigger to rebuild when content changes. | Publishing fires a signed content webhook with the rendered post, and a read API serves published posts — so your Nuxt site can rebuild or fetch on demand. apps/web/shared/utils/webhook-contract.tsapps/web/server/api/content/v1 |
Server-side events from Nitro Even | Nitro server routes are where signups, webhooks and payments actually land. | Import the server client in a Nitro route and send track / identify. There is no server-side revenue call — revenue comes from the Stripe connection instead. packages/tracker/src/integrations/server.ts |
Bundle cost IndieBob | Every third-party script is weight on a page you have been optimising. | Under 5KB gzipped, zero dependencies, and the queue batches events rather than firing one request per interaction. packages/tracker/README.mdpackages/tracker/src/core/queue.ts |
Competitor cells cite that company's own public page, with the date we read it. IndieBob cells name the file in our own codebase that implements the claim — if a feature is not in the repo, it is not on this page.
What this will not do for you
- There is no Nuxt module. You add a client plugin yourself; it is a few lines, but it is not `npx nuxi module add`.
- The React and Svelte stories are worse than this one. If your product is React, you are using the plain browser build, which works but has no framework wrapper.
- None of the Nuxt-specific fit changes the Stripe-only rule for revenue.
The strongest stack fit IndieBob has, mostly because it is the stack IndieBob is written in. If you are a Nuxt developer with a Stripe-billed product, there is very little integration work between signing up and having attribution.
Sources
- [1]Nuxt docs — Plugins directory — https://nuxt.com/docs/guide/directory-structure/plugins · accessed 1 Sept 2026
- [2]Nuxt docs — Server directory (Nitro) — https://nuxt.com/docs/guide/directory-structure/server · accessed 1 Sept 2026
- [3]Nuxt Content — Documentation — https://content.nuxt.com/docs/getting-started · accessed 1 Sept 2026
- [4]Vue Router — Introduction — https://router.vuejs.org/guide/ · accessed 1 Sept 2026
Products change. If something here is out of date or wrong, tell us and we will fix the page — the accessed dates are there so you can see how stale a claim might be.