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 / Debug logging
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

Script bundlesAutocaptureWeb VitalsSession recordingChat widgetFeature readinessRemote configurationDebug logging

MCP server

On this page

On this page

  • Two ways to set the level
  • 1. In the snippet (build-time)
  • 2. In the dashboard (runtime, all visitors)
  • Log levels
  • Filtering in DevTools
  • Going completely silent
DocsAPI ReferenceBrowser SDKDebug logging

Debug logging

Last updated July 22, 2026

Configurable console log levels prefixed with [vTilt] for filtering. The default is warn — errors and warnings always reach you. Two ways to set the level.

When troubleshooting initialisation, identity, or event delivery, the browser SDK emits level-gated messages prefixed with [vTilt] so you can filter them in the browser DevTools console.

The default level is warn — the SDK will surface errors and warnings out of the box, with no opt-in required. Production consoles stay quiet because the level taxonomy reserves info and debug for things you only want while wiring up or live-debugging.

Note

Console debug logging (this page) is different from the $debug event property used by the Debug View on the dashboard. Console debug controls what the SDK prints to console.* in the browser. $debug is a flag attached to events on the wire so they show up in the realtime Debug View — set it with ?vtilt_debug=1 in the URL or debug: true in vt.init().

#Two ways to set the level

You can control the SDK's console verbosity from two independent places. Init-time configuration always wins when both are set.

#1. In the snippet (build-time)

Pass log_level (or debug: true) to vt.init(). This locks the level for that page load and ignores the dashboard setting.

vt.init('YOUR_PROJECT_TOKEN', {
  api_host: 'https://www.vtilt.com',
  log_level: 'debug', // or `debug: true` for the same effect
})
typescript

You can also generate a snippet with the level baked in from Project Settings → Integration Script in the dashboard — pick a level in the Console log level dropdown and copy the generated snippet.

#2. In the dashboard (runtime, all visitors)

Open Project Settings → Default Configuration → Diagnostics and pick a level. The SDK fetches this on boot via /api/decide (cached for 60 seconds) and applies it to every visitor whose snippet did not hard-code log_level / debug.

Typical use case: support is helping a customer reproduce a bug. Flip Diagnostics to debug for a few minutes, ask the customer to reload the page, then revert it.

Warning

When set to info or debug in Default Configuration, every visitor with the SDK loaded will see verbose console output. Revert when debugging is complete.

#Log levels

Each level includes the levels above it (e.g. info shows info, warn, and error). Scopes after the colon (e.g. :autocapture) name the SDK module that emitted the message — useful for filtering in DevTools.

LevelWhat it surfacesExample output
noneNothing. Hard mute for shared kiosk consoles or when third-party tooling is noisy already.(no output)
errorThe SDK or your input is broken in a way that prevents work.[vTilt]:request transport unavailable<br />[vTilt]:identify invalid input
warnDegraded but recovering — fallback paths, retries, deprecated APIs, missing browser features.[vTilt]:storage localStorage disabled, falling back to memory
infoOne-time lifecycle events you want while wiring the SDK up.[vTilt]:autocapture started<br />[vTilt]:replay session started
debugPer-event trace useful when filing a bug — every captured event, every autocapture skip, queue flushes, request URLs.[vTilt]:capture $autocapture { distinct_id, $current_url, ... }<br />[vTilt]:autocapture skip class_blocked

#Filtering in DevTools

All output starts with [vTilt], so you can filter to just the SDK:

[vTilt]
text

Or narrow to a single module by including the scope:

[vTilt]:autocapture
text

#Going completely silent

For environments where any console output is unacceptable (shared kiosk consoles, embedded webviews you don't own), set:

vt.init('YOUR_PROJECT_TOKEN', {
  api_host: 'https://www.vtilt.com',
  log_level: 'none',
})
typescript

This is the only way to suppress errors as well — the default warn floor will still let error and warn through.

PreviousRemote configurationBrowser SDKNextInstall & setupNode SDK