— Features

Four surfaces, one envelope.

Every event in Emit Vision — custom, error, exposure — flows through the same normalized envelope. That means the same filters, the same identity, the same release context, no matter which surface you're looking at.

Product analytics

Custom events with schemas you control.

Define event names that match how you actually talk about the product. Attach typed properties, tags, and user identity. Get instant aggregates, slice by environment or release, and share filtered views with a URL.

  • Zod-validated envelopes — bad payloads return useful 400s, not silent drops
  • ClickHouse-backed queries stay fast at millions of rows per project
  • Tabular-numeric tables for the readouts you actually share
  • Recursive sensitive-key scrubbing applied before storage
acme-web · events

Events

env: productionrelease: [email protected]
Volume · 7d, hourlyevents
EventVolumeUsersp95
checkout.completed14,8213,204198ms
paywall.viewed9,3105,841
signup.completed3,1083,108312ms
flag.exposure22,9106,512
Error tracking

Errors that group themselves and point at the release.

Deterministic fingerprinting collapses thousands of stack-similar errors into one issue. Each issue shows first seen, last seen, affected users, the environments and releases it appeared in, and the raw payload to debug from.

  • Handled vs unhandled distinction preserved end-to-end
  • Release correlation: see exactly which deploy introduced a regression
  • Per-issue tags inherited from the originating event
  • Per-project rate limits keep a noisy environment from blowing your quota
acme-web · errors

Grouped errors

UnhandledAllHandled
UnhandledTypeError: Cannot read property 'id' of undefined
app/checkout/CartSummary.tsx:84412 events · 38 users · last 12m ago
HandledFetchError: 429 — rate_limited (stripe)
packages/billing/retry.ts:3184 events · 11 users · last 1h ago
UnhandledQuotaExceededError: localStorage full
app/onboarding/persist.ts:1238 events · 22 users · last 4h ago
HandledAbortError: signal aborted (user cancelled)
app/search/RemoteSearch.tsx:51220 events · 198 users · last 2m ago
Feature flags

Flags that show up in every event they touch.

Define flags with variants and rollout rules. Evaluate them deterministically on the client or the server. The variant a user saw is automatically stamped into every subsequent event and error — so cohort reads come for free.

  • Percentage rollouts and environment scoping
  • Simple user-key targeting (allowlists, denylists, segments)
  • One exposure event per session, so counts stay honest
  • Slice any chart by variant without instrumenting twice
acme-web · flags / paywall-v2

paywall-v2

Live · production
Variant: control
50%
3,418 users
Variant: treatment
50%
+11.4% conv.
checkout.completed · by variantcontroltreatment
Session context

The timeline before the error, not after.

Every event carries a session ID and (when you provide it) a user identity. Open an issue and see the breadcrumb trail of what the user clicked, viewed, and triggered in the minutes leading up to the failure.

  • Auto-propagated session IDs across page loads
  • Identify users when they sign in — fully optional, never automatic
  • Privacy-aware: no PII unless your code explicitly sends it
  • Filter to a single session and replay the event stream as a timeline
acme-web · sessions / s_ab12c

Session timeline

s_ab12c · [email protected]
page.viewed−12m 04s
/dashboard
flag.exposure−11m 58s
paywall-v2 → treatment
paywall.viewed−9m 41s
plan=pro · trial_eligible=true
checkout.opened−4m 12s
source=paywall · plan=pro
error.unhandledjust now
TypeError · CartSummary.tsx:84
— Architecture

All four, on one pipeline.

No glue code. No vendor sprawl. One envelope, normalized at ingest, scrubbed before storage, and queryable by the same filters everywhere in the dashboard.

sdk
Browser SDK
Events, errors, identity, batching
ingest
Fastify API
Auth, validate, normalize, scrub
queue
Redis + BullMQ
Backpressure, retries, idempotency
store
ClickHouse
Events, errors, aggregates, TTL
dashboard
Next.js
Overview, events, errors, sessions