| Package | Environment | Install |
|---|---|---|
tell-node | Node.js servers | npm install tell-node |
@tell-rs/browser | Browsers | npm install @tell-rs/browser |
@tell-rs/react | React apps | npm install @tell-rs/react |
@tell-rs/nextjs | Next.js apps | npm install @tell-rs/nextjs |
@tell-rs/vue | Vue apps | npm install @tell-rs/vue |
tell-node) and client (@tell-rs/browser) are standalone — framework packages wrap the browser SDK with idiomatic bindings.
Node.js (server)
A server SDK — you create a client, pass a user ID on every call, and a background worker handles batching and delivery over HTTP.Quick start
Configuration
Tracking events
Every method takesuserId as its first parameter.
undefined when you don’t need properties:
Standard event names
Super properties
Structured logging
service parameter defaults to the machine hostname. Convenience methods are available for all nine RFC 5424 levels: logEmergency, logAlert, logCritical, logError, logWarning, logNotice, logInfo, logDebug, and logTrace.
beforeSend hooks
Transform or drop events before they’re queued:null to drop an item. Supports a single function or an array of functions applied in order.
Lifecycle
close() before your process exits to avoid losing buffered events.
Configuration reference
| Parameter | Default | Description |
|---|---|---|
endpoint | https://collect.tell.app | HTTP collector URL |
batchSize | 100 | Events per batch before auto-flush |
flushInterval | 10,000 ms | Time between auto-flushes |
maxRetries | 3 | Retry attempts on send failure |
closeTimeout | 5,000 ms | Max wait on close() |
networkTimeout | 30,000 ms | HTTP request timeout |
maxQueueSize | 1,000 | Max queued items before oldest drops |
gzip | false | Compress payloads with gzip |
source | os.hostname() | Log source identifier |
disabled | false | Drop all events locally |
Browser (client)
A client SDK — you configure a singleton once, and it handles device IDs, sessions, and delivery automatically. No user ID needed ontrack calls.
Quick start
configure() are queued and replayed once ready.
Configuration
Tracking events
No user ID parameter — the SDK tracks the current user automatically (anonymous until you callidentify).
Sessions
Sessions are managed automatically:- Generates a persistent device ID (stored in localStorage)
- Creates a new session on page load
- Tracks tab visibility changes
- Starts a new session after 30 minutes of inactivity (configurable via
sessionTimeout) - Captures UTM parameters from the URL as super properties
Privacy
respectDoNotTrack: true to honor the browser’s Do Not Track setting.
Browser-specific features
Bot detection — automatically disables tracking whennavigator.webdriver is set or the user agent contains “headless”. Controlled by botDetection (default: true).
Error auto-capture — set captureErrors: true to automatically log window.onerror and unhandledrejection events.
Page unload — the SDK flushes via navigator.sendBeacon on beforeunload and visibilitychange to minimize data loss.
Configuration reference
| Parameter | Default | Description |
|---|---|---|
endpoint | https://collect.tell.app | HTTP collector URL |
batchSize | 20 | Events per batch before auto-flush |
flushInterval | 5,000 ms | Time between auto-flushes |
maxRetries | 5 | Retry attempts on send failure |
networkTimeout | 10,000 ms | HTTP request timeout |
sessionTimeout | 1,800,000 ms | Inactivity time before new session |
persistence | localStorage | "localStorage" or "memory" |
respectDoNotTrack | false | Honor browser DNT setting |
botDetection | true | Auto-disable for bots/headless |
captureErrors | false | Auto-log uncaught errors |
maxQueueSize | 1,000 | Max queued items before oldest drops |
React
Wrap your app withTellProvider, then use hooks for tracking.
Setup
tell.configure() on mount and tell.close() on unmount.
Hooks
useTell() returns the full browser SDK instance. useTrack() and useIdentify() return stable callbacks safe for dependency arrays.
Direct access
Next.js
A drop-in component for the App Router with automatic page view tracking.Setup
Tell component watches usePathname() and useSearchParams() and fires a Page Viewed event on every route change. Disable with trackPageViews={false}.
Manual tracking
Vue
A plugin with a composable and global$tell property.
Setup
tell.configure() on install and tell.close() on app unmount.
Composable
Page view tracking with Vue Router
Validation rules
These apply to all packages:| Field | Rule |
|---|---|
| API key | 32-character hex string |
| User ID | Non-empty |
| Event name | 1–256 characters |
| Log message | 1–65,536 characters |
| Group ID | Non-empty |
| Revenue amount | Positive number |
| Currency | Non-empty |
| Order ID | Non-empty |