Skip to main content

Installation

npm install @databuddy/sdk

Setup

Add the <Databuddy /> component to your app:
<!-- App.vue -->
<script setup lang="ts">
import { Databuddy } from '@databuddy/sdk/vue';
</script>

<template>
  <div id="app">
    <RouterView />
    <Databuddy
      :clientId="import.meta.env.VITE_DATABUDDY_CLIENT_ID"
      :trackWebVitals="true"
      :trackErrors="true"
    />
  </div>
</template>

Configuration Props

clientId
string
required
Website ID from dashboard
apiUrl
string
Tracking endpoint URL. Default: https://basket.databuddy.cc
trackWebVitals
boolean
Enable Core Web Vitals tracking
trackErrors
boolean
Automatically track JavaScript errors
trackScrollDepth
boolean
Track scroll depth events
Track external link clicks
disabled
boolean
Disable tracking
debug
boolean
Enable debug logging

Using Tracking Functions

Import and use tracking functions in any component:
<script setup lang="ts">
import { track } from '@databuddy/sdk';

const handleCheckout = () => {
  track('checkout_clicked', {
    cartSize: 3,
    cartValue: 149.97
  });
};
</script>

<template>
  <button @click="handleCheckout">
    Checkout
  </button>
</template>

Composition API Example

<script setup lang="ts">
import { onMounted, watch } from 'vue';
import { track } from '@databuddy/sdk';

interface Props {
  product: {
    id: string;
    name: string;
    price: number;
  };
}

const props = defineProps<Props>();

// Track on mount
onMounted(() => {
  track('product_viewed', {
    productId: props.product.id,
    productName: props.product.name,
    price: props.product.price
  });
});

// Track on prop changes
watch(() => props.product.id, (newId, oldId) => {
  if (newId !== oldId) {
    track('product_viewed', {
      productId: newId,
      productName: props.product.name,
      price: props.product.price
    });
  }
});

const addToCart = () => {
  track('add_to_cart', {
    productId: props.product.id,
    price: props.product.price
  });
};
</script>

<template>
  <div>
    <h1>{{ product.name }}</h1>
    <button @click="addToCart">
      Add to Cart
    </button>
  </div>
</template>

Vue Router Integration

Track route changes automatically:
// router/index.ts
import { createRouter, createWebHistory } from 'vue-router';
import { track } from '@databuddy/sdk';

const router = createRouter({
  history: createWebHistory(),
  routes: [...]
});

router.afterEach((to, from) => {
  // Track page view
  track('page_view', {
    path: to.path,
    name: to.name as string,
    fromPath: from.path
  });
});

export default router;

Environment Variables

Create a .env file:
VITE_DATABUDDY_CLIENT_ID=your_website_id

Nuxt 3 Setup

Create a plugin:
// plugins/databuddy.client.ts
import { defineNuxtPlugin } from '#app';
import { Databuddy } from '@databuddy/sdk/vue';

export default defineNuxtPlugin((nuxtApp) => {
  const config = useRuntimeConfig();
  
  nuxtApp.vueApp.component('Databuddy', Databuddy);
  
  // Optional: Add to app.vue
  // <Databuddy
  //   :clientId="config.public.databuddyClientId"
  //   :trackWebVitals="true"
  // />
});
Add to nuxt.config.ts:
export default defineNuxtConfig({
  runtimeConfig: {
    public: {
      databuddyClientId: process.env.NUXT_PUBLIC_DATABUDDY_CLIENT_ID
    }
  }
});

TypeScript Support

Full TypeScript support included:
import { track, getAnonymousId, flush } from '@databuddy/sdk';

interface CheckoutEvent {
  cartId: string;
  total: number;
  items: number;
}

function trackCheckout(data: CheckoutEvent) {
  track('checkout_started', data);
  flush();
}

Build docs developers (and LLMs) love