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
Website ID from dashboard
Tracking endpoint URL. Default: https://basket.databuddy.cc
Enable Core Web Vitals tracking
Automatically track JavaScript errors
Track scroll depth events
Track external link clicks
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();
}