Last updated: March 13, 2026
Understand Web Event Types
The Dash0 Web SDK emits a defined set of event types. Each type has a fixed event.name, a specific set of attributes, and a body payload. Understanding what each type contains helps you write more precise filters and interpret query results correctly.
browser.page_view
Fired every time the user navigates to a URL — either via a full browser reload or a client-side route change in a single-page application.
Sub-types:
| Sub-type | Description |
|---|---|
| Page Load | Full browser reload. Always accompanied by a browser.navigation_timing event at the same timestamp. |
| Page Transition | SPA route change. No navigation timing data is recorded because the browser does not reload the DOM. |
Key attributes: url.path, url.full, page.load.id, page.url.domain
browser.navigation_timing
Recorded once per full page load. Contains a detailed breakdown of the browser's loading pipeline.
Key fields in the body:
| Field | Description |
|---|---|
domContentLoadedEventEnd | When the DOM was fully parsed |
loadEventEnd | When all page resources (images, scripts) finished loading |
responseEnd | When the last byte of the HTTP response was received |
encodedBodySize | Compressed size of the response body |
This event is the primary source of data for understanding server response time and DOM construction cost.
browser.web_vital
Records a Core Web Vital measurement. Web vitals can be emitted multiple times per session — values are updated as the user interacts with the page.
Measured vitals:
| Name | Full name | What it measures |
|---|---|---|
| LCP | Largest Contentful Paint | How long it takes for the largest visible element to render |
| CLS | Cumulative Layout Shift | How much the page layout shifts unexpectedly during load |
| INP | Interaction to Next Paint | How quickly the page responds to user input |
Body format: { delta: <change since last measurement>, name: "LCP" | "CLS" | "INP", value: <current value> }
Why values change: Each time the user interacts with the page — clicking a button, navigating to a new section, loading more data — the browser recalculates the web vital and emits an updated event. The delta field tells you how much the score changed from the previous measurement.
browser.request
Recorded for every asynchronous HTTP request made by the frontend. Captures timing from the browser's perspective (not the server's).
Key attributes: http.method, http.status_code, url.full, http.request_content_length, http.response_content_length
Trace correlation: If the backend is instrumented with OpenTelemetry, the request carries a traceparent header. Dash0 uses this to link the browser.request event to the corresponding backend trace, enabling end-to-end correlation from frontend click to database query.
browser.error
Recorded when an unhandled JavaScript exception or unhandled promise rejection occurs.
Key attributes: exception.type, exception.message, exception.stacktrace, url.path
Custom events
Any event emitted via trackEvent() in your application code. The event name, body, and attributes are entirely defined by you.
Naming convention: Use snake_case names that describe the action that occurred — for example, checkout_completed, feature_flag_evaluated, video_played. Avoid names that start with browser. as this prefix is reserved for SDK-emitted events.