Skip to content

feat(rybbit): add new tracking configuration options #471

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jul 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion docs/content/scripts/analytics/rybbit-analytics.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,22 +141,34 @@ You must provide the options when setting up the script for the first time.
```ts
export const RybbitAnalyticsOptions = object({
siteId: union([string(), number()]), // required
autoTrackPageview: optional(boolean()),
trackSpa: optional(boolean()),
trackQuery: optional(boolean()),
trackOutbound: optional(boolean()),
trackErrors: optional(boolean()),
sessionReplay: optional(boolean()),
webVitals: optional(boolean()),
skipPatterns: optional(array(string())),
maskPatterns: optional(array(string())),
debounce: optional(number())
debounce: optional(number()),
apiKey: optional(string()),
})
```

#### Configuration Options

- `siteId` (required): Your Rybbit Analytics site ID
`autoTrackPageview`: Set to `false` to disable automatic tracking of the initial pageview when the script loads. You will need to manually call the pageview function to track pageviews. Default: `true`
- `trackSpa`: Set to `false` to disable automatic pageview tracking for single page applications
- `trackQuery`: Set to `false` to disable tracking of URL query strings
- `trackOutbound`: Set to `false` to disable automatic tracking of outbound link clicks. Default: `true`
- `trackErrors`: Set to `true` to enable automatic tracking of JavaScript errors and unhandled promise rejections. Only tracks errors from the same origin to avoid noise from third-party scripts. Default: `false`
- `sessionReplay`: Set to `true` to enable session replay recording. Captures user interactions, mouse movements, and DOM changes for debugging and user experience analysis. Default: `false`
- `webVitals`: Set to `true` to enable Web Vitals performance metrics collection (LCP, CLS, INP, FCP, TTFB). Web Vitals are disabled by default to reduce script size and network requests. Default: `false`
- `skipPatterns`: Array of URL path patterns to ignore
- `maskPatterns`: Array of URL path patterns to mask for privacy
- `debounce`: Delay in milliseconds before tracking a pageview after URL changes
- `apiKey`: API key for tracking from localhost during development. Bypasses origin validation for self-hosted Rybbit Analytics instances

## Example

Expand Down
12 changes: 12 additions & 0 deletions src/runtime/registry/rybbit-analytics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,17 @@ import type { RegistryScriptInput } from '#nuxt-scripts/types'

export const RybbitAnalyticsOptions = object({
siteId: union([string(), number()]), // required
autoTrackPageview: optional(boolean()),
trackSpa: optional(boolean()),
trackQuery: optional(boolean()),
trackOutbound: optional(boolean()),
trackErrors: optional(boolean()),
sessionReplay: optional(boolean()),
webVitals: optional(boolean()),
skipPatterns: optional(array(string())),
maskPatterns: optional(array(string())),
debounce: optional(number()),
apiKey: optional(string()),
})

export type RybbitAnalyticsInput = RegistryScriptInput<typeof RybbitAnalyticsOptions, false>
Expand Down Expand Up @@ -60,11 +66,17 @@ export function useScriptRybbitAnalytics<T extends RybbitAnalyticsApi>(_options?
scriptInput: {
'src': 'https://app.rybbit.io/api/script.js',
'data-site-id': String(options?.siteId),
'data-auto-track-pageview': options?.autoTrackPageview,
'data-track-spa': options?.trackSpa,
'data-track-query': options?.trackQuery,
'data-track-outbound': options?.trackOutbound,
'data-track-errors': options?.trackErrors,
'data-session-replay': options?.sessionReplay,
'data-web-vitals': options?.webVitals,
'data-skip-patterns': options?.skipPatterns ? JSON.stringify(options.skipPatterns) : undefined,
'data-mask-patterns': options?.maskPatterns ? JSON.stringify(options.maskPatterns) : undefined,
'data-debounce': options?.debounce ? options.debounce.toString() : undefined,
'data-api-key': options?.apiKey,
},
schema: import.meta.dev ? RybbitAnalyticsOptions : undefined,
scriptOptions: {
Expand Down