vTilt
By roleFoundersKnow what to fix firstMarketersSee what happens after the clickCMOsSee what your budget really buys
By businessSaaSTurn signups into active usersEcommerceSee why shoppers abandon cartsAgenciesProve your work to clientsEnterpriseOne customer record for every team
MeasureWeb AnalyticsFind where buyers leaveSession ReplaySee why they left, not just that they didAdsKnow what paid visitors do nextIntegrationsOne snippet feeds your stack
ThinkPeopleOne profile per customerCustomer MemoryvTilt remembers every visitorSite KnowledgeAnswers and audits from your own pages
ActAsk AIAnswers from real behaviorAI ChatChat that knows the visitorEmail CampaignsEmail from real visits
PricingWhy vTiltDocs
Docs / Install & setup
Getting Started
OverviewInstallInitializeIdentify usersTrack eventsLogout & resetVerify eventsCommon mistakes
Guides
Event forwardingReverse proxyRealtime dashboardSite knowledge
Frontend frameworks
Next.jsNuxt.jsVue.jsReactReact RouterRemixGatsbySvelte / SvelteKitAstroAngularTanStack StartDocusaurus
Backend frameworks
NestJSHonoCloudflare WorkersDjangoFlaskLaravelPhoenixRuby on Rails
Backend languages
PythonPHPRubyElixirGoJava.NET / C#Rust
Stack guides
Vue + PHP
API Reference
Browser SDK
Script bundlesAutocaptureWeb VitalsSession recordingChat widgetFeature readinessRemote configurationDebug logging
Node SDK
Install & setupCapture, identify & aliasContext & shutdownGlobal properties & opt-outError tracking
MCP server
Guides
OverviewAuthenticationOAuthAgent skills (prompts)AI intelligenceSite knowledgeGoogle AdsMeta Ads
Client setup
CursorClaude DesktopVS CodeCodex

Getting Started

OverviewInstallInitializeIdentify usersTrack eventsLogout & resetVerify eventsCommon mistakes

Guides

Event forwardingReverse proxyRealtime dashboardSite knowledge

API Reference

Install & setupCapture, identify & aliasContext & shutdownGlobal properties & opt-outError tracking

MCP server

On this page

On this page

  • Install
  • Initialise
  • Recommended setup
DocsAPI ReferenceNode SDKInstall & setup

Install & setup

Last updated July 22, 2026

Add @v-tilt/node for server-side tracking. Same event shape as the browser, with explicit identity per call.

Add @v-tilt/node for server-side tracking. The wire format is identical to the browser SDK (distinct_id, anonymous_id), so events from server and browser converge on the same person record automatically.

#Install

npm install @v-tilt/node
bash

#Initialise

Create a single client at process boot, reuse it everywhere, and call shutdown() before the process exits to flush any buffered events.

import { VTiltNode } from '@v-tilt/node'

const vtilt = new VTiltNode(process.env.VTILT_TRACKER_TOKEN!, {
  host: process.env.VTILT_API_ENDPOINT || 'https://your-vtilt-instance.com',
})

vtilt.setContext({
  distinctId: 'user_123',
  anonymousId: req.cookies?.vt_anon,
})

vtilt.capture({
  event: 'purchase',
  properties: { amount: 99.99 },
})

vtilt.identify({
  distinctId: 'user_123',
  properties: { name: 'Alice', plan: 'pro' },
})

await vtilt.shutdown()
typescript

#Recommended setup

  • Construct one VTiltNode per process. The client batches events internally; multiple clients waste connections.
  • Read VTILT_TRACKER_TOKEN from environment variables, not hard-coded constants. The token is the same as the browser project token.
  • Always await vtilt.shutdown() in your shutdown signal handler (SIGINT / SIGTERM / Lambda terminate hook). Without it, the last batch of events may not flush.
  • For request-scoped frameworks (Express, Fastify, Next.js route handlers), prefer setContext() per request over passing distinctId to every capture.
PreviousDebug loggingBrowser SDKNextCapture, identify & aliasNode SDK