Important Changes
- feat(node-core): Add OTLP integration for node-core/light (#19729)
Added otlpIntegration at @sentry/node-core/light/otlp for users who manage
their own OpenTelemetry setup and want to send trace data to Sentry without
adopting the full @sentry/node SDK.
```js import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'; import * as Sentry from '@sentry/node-core/light'; import { otlpIntegration } from '@sentry/node-core/light/otlp';
const provider = new NodeTracerProvider(); provider.register();
Sentry.init({ dsn: 'DSN', integrations: [ otlpIntegration({ // Export OTel spans to Sentry via OTLP (default: true) setupOtlpTracesExporter: true, }), ], }); ```
The integration links Sentry errors to OTel traces and exports spans to Sentry via OTLP.
New nodeRuntimeMetricsIntegration and bunRuntimeMetricsIntegration automatically collect runtime health metrics and send them to Sentry on a configurable interval (default: 30s). Collected metrics include memory (RSS, heap used/total), CPU utilization, event loop utilization, and process uptime. Node additionally collects event loop delay percentiles (p50, p99). Extra metrics like CPU time and external memory are available as opt-in.
```ts // Node.js import * as Sentry from '@sentry/node';
Sentry.init({ dsn: '...', integrations: [Sentry.nodeRuntimeMetricsIntegration()], });
// Bun import * as Sentry from '@sentry/bun';
Sentry.init({ dsn: '...', integrations: [Sentry.bunRuntimeMetricsIntegration()], }); ```
- feat(core): Support embedding APIs in google-genai (#19797)
Adds instrumentation for the Google GenAI embedContent API, creating gen_ai.embeddings spans.
- feat(browser): Add
elementTimingIntegrationfor tracking element render and load times (#19869)
The new elementTimingIntegration captures Element Timing API data as Sentry metrics. It emits element_timing.render_time and element_timing.load_time distribution metrics for elements annotated with the elementtiming HTML attribute.
```ts import * as Sentry from '@sentry/browser';
Sentry.init({ dsn: 'DSN', integrations: [Sentry.browserTracingIntegration(), Sentry.elementTimingIntegration()], }); ```
html
<img src="hero.jpg" elementtiming="hero-image" />
Other Changes
- feat(nuxt): Add middleware instrumentation compatibility for Nuxt 5 (#19968)
- feat(nuxt): Support parametrized SSR routes in Nuxt 5 (#19977)
- feat(solid): Add route parametrization for Solid Router (#20031)
- fix(core): Guard nullish response in supabase PostgREST handler (#20033)
- fix(node): Deduplicate
sentry-traceandbaggageheaders on outgoing requests (#19960) - fix(node): Ensure startNewTrace propagates traceId in OTel environments (#19963)
- fix(nuxt): Use virtual module for Nuxt pages data (SSR route parametrization) (#20020)
- fix(opentelemetry): Convert seconds timestamps in span.end() to milliseconds (#19958)
- fix(profiling): Disable profiling in worker threads (#20040)
- fix(react-router): Disable debug ID injection in Vite plugin to prevent double injection (#19890)
- refactor(browser): Reduce browser package bundle size (#19856)
- feat(deps): Bump OpenTelemetry dependencies (#20046)
Internal Changes
- chore: Add shared validate-pr composite action ([#20025](https://github.com/getsentry/sentry-javascript/pull/20025)) - chore: Update validate-pr action to latest version ([#20027](https://github.com/getsentry/sentry-javascript/pull/20027)) - chore(deps): Bump @apollo/server from 5.4.0 to 5.5.0 ([#20007](https://github.com/getsentry/sentry-javascript/pull/20007)) - chore(deps): Bump amqplib from 0.10.7 to 0.10.9 ([#20000](https://github.com/getsentry/sentry-javascript/pull/20000)) - chore(deps): Bump srvx from 0.11.12 to 0.11.13 ([#20001](https://github.com/getsentry/sentry-javascript/pull/20001)) - chore(deps-dev): Bump node-forge from 1.3.2 to 1.4.0 ([#20012](https://github.com/getsentry/sentry-javascript/pull/20012)) - chore(deps-dev): Bump yaml from 2.8.2 to 2.8.3 ([#19985](https://github.com/getsentry/sentry-javascript/pull/19985)) - ci(deps): Bump actions/upload-artifact from 6 to 7 ([#19569](https://github.com/getsentry/sentry-javascript/pull/19569)) - docs(release): Update publishing-a-release.md ([#19982](https://github.com/getsentry/sentry-javascript/pull/19982)) - feat(deps): Bump babel-loader from 10.0.0 to 10.1.1 ([#19997](https://github.com/getsentry/sentry-javascript/pull/19997)) - feat(deps): Bump handlebars from 4.7.7 to 4.7.9 ([#20008](https://github.com/getsentry/sentry-javascript/pull/20008)) - fix(browser-tests): Pin axios to 1.13.5 to avoid compromised 1.14.1 ([#20047](https://github.com/getsentry/sentry-javascript/pull/20047)) - fix(ci): Update validate-pr action to remove draft enforcement ([#20035](https://github.com/getsentry/sentry-javascript/pull/20035)) - fix(ci): Update validate-pr action to remove draft enforcement ([#20037](https://github.com/getsentry/sentry-javascript/pull/20037)) - fix(e2e): Pin @opentelemetry/api to 1.9.0 in ts3.8 test app ([#19992](https://github.com/getsentry/sentry-javascript/pull/19992)) - ref(browser-tests): Add waitForMetricRequest helper ([#20002](https://github.com/getsentry/sentry-javascript/pull/20002)) - ref(core): Consolidate getOperationName into one shared utility ([#19971](https://github.com/getsentry/sentry-javascript/pull/19971)) - ref(core): Introduce instrumented method registry for AI integrations ([#19981](https://github.com/getsentry/sentry-javascript/pull/19981)) - test(deno): Expand Deno E2E test coverage ([#19957](https://github.com/getsentry/sentry-javascript/pull/19957)) - test(e2e): Add e2e tests for `nodeRuntimeMetricsIntegration` ([#19989](https://github.com/getsentry/sentry-javascript/pull/19989))Bundle size 📦
| Path | Size |
|---|---|
| @sentry/browser | 25.04 KB |
| @sentry/browser - with treeshaking flags | 23.57 KB |
| @sentry/browser (incl. Tracing) | 41.16 KB |
| @sentry/browser (incl. Tracing, Profiling) | 45.67 KB |
| @sentry/browser (incl. Tracing, Replay) | 79.04 KB |
| @sentry/browser (incl. Tracing, Replay) - with treeshaking flags | 68.91 KB |
| @sentry/browser (incl. Tracing, Replay with Canvas) | 83.64 KB |
| @sentry/browser (incl. Tracing, Replay, Feedback) | 95.62 KB |
| @sentry/browser (incl. Feedback) | 41.42 KB |
| @sentry/browser (incl. sendFeedback) | 29.59 KB |
| @sentry/browser (incl. FeedbackAsync) | 34.46 KB |
| @sentry/browser (incl. Metrics) | 26.32 KB |
| @sentry/browser (incl. Logs) | 26.46 KB |
| @sentry/browser (incl. Metrics & Logs) | 27.12 KB |
| @sentry/react | 26.76 KB |
| @sentry/react (incl. Tracing) | 43.44 KB |
| @sentry/vue | 29.37 KB |
| @sentry/vue (incl. Tracing) | 43.02 KB |
| @sentry/svelte | 25.06 KB |
| CDN Bundle | 27.65 KB |
| CDN Bundle (incl. Tracing) | 42.09 KB |
| CDN Bundle (incl. Logs, Metrics) | 28.99 KB |
| CDN Bundle (incl. Tracing, Logs, Metrics) | 43.12 KB |
| CDN Bundle (incl. Replay, Logs, Metrics) | 66.87 KB |
| CDN Bundle (incl. Tracing, Replay) | 78.13 KB |
| CDN Bundle (incl. Tracing, Replay, Logs, Metrics) | 79.14 KB |
| CDN Bundle (incl. Tracing, Replay, Feedback) | 83.54 KB |
| CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) | 84.55 KB |
| CDN Bundle - uncompressed | 80.72 KB |
| CDN Bundle (incl. Tracing) - uncompressed | 124.81 KB |
| CDN Bundle (incl. Logs, Metrics) - uncompressed | 84.77 KB |
| CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed | 128.14 KB |
| CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed | 204.87 KB |
| CDN Bundle (incl. Tracing, Replay) - uncompressed | 238.95 KB |
| CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed | 242.26 KB |
| CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed | 251.56 KB |
| CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed | 254.86 KB |
| @sentry/nextjs (client) | 45.79 KB |
| @sentry/sveltekit (client) | 41.62 KB |
| @sentry/node-core | 54.45 KB |
| @sentry/node | 168.93 KB |
| @sentry/node - without tracing | 93.76 KB |
| @sentry/aws-serverless | 110.13 KB |