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 situationWhat 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.

[1] Nuxt docs — Plugins directory

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.

[4] Vue Router — Introduction

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.

[3] Nuxt Content — Documentation

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.

[2] Nuxt docs — Server directory (Nitro)

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.

[1] Nuxt docs — Plugins directory

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. [1]Nuxt docs — Plugins directory — https://nuxt.com/docs/guide/directory-structure/plugins · accessed 1 Sept 2026
  2. [2]Nuxt docs — Server directory (Nitro) — https://nuxt.com/docs/guide/directory-structure/server · accessed 1 Sept 2026
  3. [3]Nuxt Content — Documentation — https://content.nuxt.com/docs/getting-started · accessed 1 Sept 2026
  4. [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.