Packages

@sentry/effect

11.9.0 · 23 Oct 2026MIT35.7k / weekRepositoryHomepagenpmAtom feed

Your version

11.9.0

latest23 Oct 2026Where it was published

In short

19 new33 fixed60 internal

Release note

Important Changes

  • Rename diagnostic_channel, fetch and gRPC span origins

    Some span origins changed their names to match the other v11 origins:

    • auto.graphql.diagnostic_channel is now auto.graphql.graphql.

    • auto.db.redis.diagnostic_channel, auto.db.mysql2.diagnostic_channel and auto.db.mongoose.diagnostic_channel now end in .native_channel.

    • auto.http.wintercg_fetch is now auto.http.fetch, as on Bun, Deno and Cloudflare.

    • auto.grpc.serverless is now auto.grpc.google_cloud.

    If you have ignoreSpans rules, queries or alerts on the old origins, change them to use the new origins.

  • deno: Add incoming request options to denoServeIntegration

    denoServeIntegration now accepts ignoreRequestBody, ignoreIncomingRequests, ignoreStaticAssets, spans, onSpanCreated and onSpanEnd, with the same meaning as in denoHttpIntegration. The callbacks receive the web Request.

    ignoreStaticAssets defaults to true, so Deno.serve no longer creates spans for GET requests to common static assets such as favicon.ico, robots.txt or *.js files. To keep these spans, set denoServeIntegration({ ignoreStaticAssets: false }). Deno.serve spans also follow the client's tracing configuration by default, so the integration does not start spans when tracing is disabled.

  • deno: Record request sessions for Deno.serve

    denoServeIntegration now records a request session for each incoming request, as denoHttpIntegration does for node:http. This gives release health and crash-free rates for Deno.serve apps. Sessions are sent only when a release is set. To turn them off, set denoServeIntegration({ sessions: false }). sessionFlushingDelayMS sets how long the SDK waits before it sends the session aggregate.

  • deno: Register channel injection hooks from init()

    Sentry.init() in @sentry/deno now registers the diagnostics-channel injection hooks, as @sentry/node does. The channel integrations now record spans without --preload=npm:@sentry/deno/import, for modules that you import after init(). To also instrument modules that load before init(), such as static imports in your entry module, keep the preload. With debug: true, the SDK logs a warning when no injection is active.

    On Node.js, tracing-hooks messages now show with debug: true instead of with DEBUG=@apm-js-collab/*.

  • nextjs: Add a tunnel route handler that sends only the event payload to Sentry

    The tunnelRoute option can now send events through a route handler in your app. The handler forwards only the event payload to Sentry, and no request headers. To use it, add this file next to your tunnelRoute option:

    // app/sentry-tunnel/route.ts (or src/app/sentry-tunnel/route.ts)
    export { POST } from '@sentry/nextjs/tunnel';

    The handler accepts events for the DSN of your server SDK. To accept other DSNs, use createSentryTunnelRoute({ allowedDsns }) from the same import. Without the file, the tunnel route works as before.

    Also, the server no longer sends spans of tunnel requests when span streaming is on, because these spans only show the SDK's own traffic.

  • nextjs: Never emit trace meta tags from a prerender

    Pageloads of apps with cacheComponents enabled are connected to their server request again. Pages that Next.js prerenders no longer carry trace information, so a cached page can no longer connect visitors to a request that was not theirs. This also applies to ISR pages. The pageload waits for the trace information when it arrives with the part of the page that streams in after a cached shell.

    If you set up OpenTelemetry yourself and register SentryPropagator, register NextSentryPropagator instead and pass your tracer provider to markPrerendersOnTracerProvider, so that your prerendered pages carry no trace information either.

  • nextjs: Send tunnel route requests with credentials: 'omit'

    With tunnelRoute and no tunnel route handler, @sentry/nextjs now sends events from the browser with credentials: 'omit', because the tunnel route does not need cookies.
    If a layer in front of your app checks cookies before it lets requests through (for example Vercel Deployment Protection), you can send them again in your browser Sentry.init call:

    // instrumentation-client.ts
    Sentry.init({
      transportOptions: { fetchOptions: { credentials: 'same-origin' } },
    });
  • nitro: Report a single http.server span per request

    A Nitro request now creates only one http.server span. The nested http.server spans with the origins auto.http.nitro.srvx and auto.http.nitro.h3 are removed. h3 route handlers now get a handler span, and middleware spans are direct children of the http.server span. If you have queries or alerts on the removed spans, change them to use the http.server span or the handler span.

  • Use auto.http.http_server origin for all node:http server spans

    On Bun and Deno, node:http server spans now have the origin auto.http.http_server instead of auto.http.server, as on Node.js. On Node.js, nothing changes. Bun.serve spans keep auto.http.bun.serve and Deno.serve spans keep auto.http.deno. If you have ignoreSpans or beforeSendSpan rules, queries or alerts on auto.http.server, change them to use auto.http.http_server.

Other Changes

  • browser: Add LoaderSentry type export

  • cloudflare: Add isStreamingResponse option and detect streamed RSC responses

  • core: Add dataCollection.mcp option

  • core: Limit the body size of tunnel requests

  • nextjs: Link use cache hits to their fill across instances

  • nextjs: Wait for the resumed part of a document before starting the pageload

  • nitro: Merge the nitro integrations into a single nitroIntegration

  • server-utils: Emit execute_tool spans for Anthropic's beta.messages.toolRunner()

  • astro: Defer to @sentry/cloudflare/vite on Cloudflare Workers

  • aws-serverless: End the function.aws span when a callback-style handler calls back

  • browser: Skip profiling for unsampled active root spans

  • bundler-plugins: Check globalThis before global in the injected snippet

  • bundler-plugins: Inject the release only into chunks that load at startup

  • cloudflare: auto-instrument a re-exported default export

  • cloudflare: Deliver check-ins and events from forked isolation scopes

  • cloudflare: Don't hold Durable Object invocations open with the segment-end flush timer

  • cloudflare: Keep default exports intact when auto-instrumenting

  • core: Use trace_metric data category for metrics rate limits and client reports

  • deno: Re-export portable helpers that Cloudflare exposes

  • elysia: Set SDK metadata on the options passed to init

  • elysia: Use Node transport on Node runtimes

  • hono: Read connection info from the runtime instead of Hono helpers

  • nextjs: Only inject applicationKey metadata into browser bundles

  • nitro: Use forward slashes for resolved plugin paths on Windows

  • node,vercel-edge,bundler-plugins: Ignore commit env vars set to their own name

  • node: Guard user callbacks in the node:http server instrumentation

  • node: Only read JavaScript and TypeScript source files in ContextLines

  • node: Restore tsx runtime instrumentation

  • nuxt: Delete Sentry-enabled source maps from Nitro output directories

  • nuxt: Keep sourcesContent in Nuxt 5 server source maps

  • react: Don't crash ErrorBoundary when error.cause is not an Error

  • react: Match React Router navigations against root routes only

  • server-runtime-injection: Load ESM hook without the build/esm package.json marker

  • server-utils: Bundle the CommonJS dependencies of instrumented packages on Vite 8

  • server-utils: Keep OpenAI decision confidence on Vercel AI decide spans

  • server-utils: Nest LangChain run spans under their parent run

  • server-utils: Stop the orchestrion Vite plugin from bundling the CJS build of @sentry/server-utils

  • solidstart: Read server action route from the request's root span

  • tanstackstart-react: Delete only the source maps that Sentry enabled

  • vercel-edge: Expose portable tracing and feature flag helpers

Internal Changes

Work in this release was contributed by @4ktLuffy, @adityareddy-dev, @dasilvaluis, @faizansaiyed123, @jpdefo, @Jxxunnn, @mikamikasuki, @philipatkinson, @rubas, and @Shubham-Padkonde. Thank you for your contributions!

  • bun: Add incoming request options and request sessions to bunServerIntegration

    bunServerIntegration now accepts the same options as denoServeIntegration: ignoreRequestBody, ignoreIncomingRequests, ignoreStaticAssets, spans, onSpanCreated, onSpanEnd, sessions and sessionFlushingDelayMS. The callbacks receive the web Request.

    Bun.serve now records a request session for each incoming request. Sessions are sent only when a release is set. To turn them off, set bunServerIntegration({ sessions: false }).

    ignoreStaticAssets defaults to true, so Bun.serve no longer creates spans for GET requests to common static assets such as favicon.ico, robots.txt or *.js files. To keep these spans, set bunServerIntegration({ ignoreStaticAssets: false }). Bun.serve spans also follow the client's tracing configuration by default, so the integration does not start spans when tracing is disabled. Errors thrown for OPTIONS and HEAD requests are now captured.

  • node: Add onSpanEnd to httpIntegration

    httpIntegration and httpServerSpansIntegration now accept onSpanEnd, a hook that runs when the response for an incoming request finishes, before its span ends. Use it to change the span based on the response. Deno and Bun already have this option.

  • bun: Inject debug IDs and upload source maps in sentryBunPlugin

    sentryBunPlugin from @sentry/bun/plugin now accepts the same options as sentryEsbuildPlugin (org, project, authToken, release, sourcemaps, ...). When Bun.build writes source maps to outdir, the plugin injects the debug ID that Bun writes into each bundle, injects the release, and uploads the source maps at the end of the build. You no longer need to run sentry sourcemap inject and sentry sourcemap upload after the build.

    Like the other bundler plugins, sentryBunPlugin now sends build telemetry and injects the release it detects (for example, from git). To turn off telemetry, set telemetry: false.