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 / Global properties & opt-out
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

  • Global (super) properties
  • Person properties
  • before_send
  • Opt-out (GDPR)
  • Lifecycle listeners
DocsAPI ReferenceNode SDKGlobal properties & opt-out

Global properties & opt-out

Last updated July 22, 2026

Register super properties merged into every event, mutate or drop events with before_send, and honor consent with opt-in/opt-out.

Attach properties to every event, transform events before they're sent, and respect user consent — all server-side.

#Global (super) properties

register() adds properties merged into every subsequent event at the lowest precedence (per-event properties win on a key collision). unregister() removes one.

vtilt.register({ app_version: '2.1.0', environment: 'production' })
vtilt.unregister('app_version')
typescript

You can also set them once at construction:

const vtilt = new VTiltNode(token, {
  globalProperties: { service: 'checkout-api' },
})
typescript

#Person properties

Set properties on the person record without sending a custom event:

vtilt.setPersonProperties('user_123', { plan: 'pro' }) // $set on every event
vtilt.setPersonPropertiesOnce('user_123', { signup_source: 'docs' }) // $set_once
typescript

#before_send

Pass a hook (or array of hooks) to mutate events or drop them. Return the event to keep it, or null to drop it. Multiple hooks run in order; the first null drops the event.

const vtilt = new VTiltNode(token, {
  before_send: event => {
    if (event.event === 'debug_event') return null // drop
    event.payload.region = process.env.REGION
    return event
  },
})
typescript

#Opt-out (GDPR)

vtilt.optOut() // drop all events until opted back in
vtilt.optIn()
vtilt.isOptedOut() // boolean
typescript

disable() / enable() are a separate kill switch (e.g. to turn the SDK off entirely in a given environment).

#Lifecycle listeners

Subscribe to delivery events. on() returns an unsubscribe function.

const off = vtilt.on('error', err => logger.error('vtilt flush failed', err))
vtilt.on('flush', batch => metrics.increment('vtilt.events.sent', batch.length))
typescript
EventPayloadFires when
capturethe eventan event is accepted (queued or sent)
flushthe batch (array)a batch is sent successfully
erroran Errora flush ultimately fails after retries
PreviousContext & shutdownNode SDKNextError trackingNode SDK