@sentry/tanstackstart-react
11.9.0 · 23 Oct 2026MIT620.2k / weekRepositoryHomepagenpmAtom feed
In short
19 new33 fixed60 internal
Release note
Important Changes
Rename
diagnostic_channel, fetch and gRPC span originsSome span origins changed their names to match the other v11 origins:
auto.graphql.diagnostic_channelis nowauto.graphql.graphql.auto.db.redis.diagnostic_channel,auto.db.mysql2.diagnostic_channelandauto.db.mongoose.diagnostic_channelnow end in.native_channel.auto.http.wintercg_fetchis nowauto.http.fetch, as on Bun, Deno and Cloudflare.auto.grpc.serverlessis nowauto.grpc.google_cloud.
If you have
ignoreSpansrules, queries or alerts on the old origins, change them to use the new origins.deno: Add incoming request options to
denoServeIntegrationdenoServeIntegrationnow acceptsignoreRequestBody,ignoreIncomingRequests,ignoreStaticAssets,spans,onSpanCreatedandonSpanEnd, with the same meaning as indenoHttpIntegration. The callbacks receive the webRequest.ignoreStaticAssetsdefaults totrue, soDeno.serveno longer creates spans forGETrequests to common static assets such asfavicon.ico,robots.txtor*.jsfiles. To keep these spans, setdenoServeIntegration({ ignoreStaticAssets: false }).Deno.servespans 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.servedenoServeIntegrationnow records a request session for each incoming request, asdenoHttpIntegrationdoes fornode:http. This gives release health and crash-free rates forDeno.serveapps. Sessions are sent only when areleaseis set. To turn them off, setdenoServeIntegration({ sessions: false }).sessionFlushingDelayMSsets how long the SDK waits before it sends the session aggregate.deno: Register channel injection hooks from
init()Sentry.init()in@sentry/denonow registers the diagnostics-channel injection hooks, as@sentry/nodedoes. The channel integrations now record spans without--preload=npm:@sentry/deno/import, for modules that you import afterinit(). To also instrument modules that load beforeinit(), such as static imports in your entry module, keep the preload. Withdebug: true, the SDK logs a warning when no injection is active.On Node.js, tracing-hooks messages now show with
debug: trueinstead of withDEBUG=@apm-js-collab/*.nextjs: Add a tunnel route handler that sends only the event payload to Sentry
The
tunnelRouteoption 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 yourtunnelRouteoption:// 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
cacheComponentsenabled 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, registerNextSentryPropagatorinstead and pass your tracer provider tomarkPrerendersOnTracerProvider, so that your prerendered pages carry no trace information either.nextjs: Send tunnel route requests with
credentials: 'omit'With
tunnelRouteand no tunnel route handler,@sentry/nextjsnow sends events from the browser withcredentials: '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 browserSentry.initcall:// instrumentation-client.ts Sentry.init({ transportOptions: { fetchOptions: { credentials: 'same-origin' } }, });nitro: Report a single
http.serverspan per requestA Nitro request now creates only one
http.serverspan. The nestedhttp.serverspans with the originsauto.http.nitro.srvxandauto.http.nitro.h3are removed. h3 route handlers now get ahandlerspan, and middleware spans are direct children of thehttp.serverspan. If you have queries or alerts on the removed spans, change them to use thehttp.serverspan or thehandlerspan.Use
auto.http.http_serverorigin for allnode:httpserver spansOn Bun and Deno,
node:httpserver spans now have the originauto.http.http_serverinstead ofauto.http.server, as on Node.js. On Node.js, nothing changes.Bun.servespans keepauto.http.bun.serveandDeno.servespans keepauto.http.deno. If you haveignoreSpansorbeforeSendSpanrules, queries or alerts onauto.http.server, change them to useauto.http.http_server.
Other Changes
browser: Add
LoaderSentrytype exportcloudflare: Add
isStreamingResponseoption and detect streamed RSC responsescore: Add
dataCollection.mcpoptioncore: Limit the body size of tunnel requests
nextjs: Link
use cachehits to their fill across instancesnextjs: Wait for the resumed part of a document before starting the pageload
nitro: Merge the nitro integrations into a single
nitroIntegrationserver-utils: Emit
execute_toolspans for Anthropic'sbeta.messages.toolRunner()astro: Defer to
@sentry/cloudflare/viteon Cloudflare Workersaws-serverless: End the
function.awsspan when a callback-style handler calls backbrowser: Skip profiling for unsampled active root spans
bundler-plugins: Check
globalThisbeforeglobalin the injected snippetbundler-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_metricdata category for metrics rate limits and client reportsdeno: 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:httpserver instrumentationnode: 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.causeis not an Errorreact: 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
bunServerIntegrationbunServerIntegrationnow accepts the same options asdenoServeIntegration:ignoreRequestBody,ignoreIncomingRequests,ignoreStaticAssets,spans,onSpanCreated,onSpanEnd,sessionsandsessionFlushingDelayMS. The callbacks receive the webRequest.Bun.servenow records a request session for each incoming request. Sessions are sent only when areleaseis set. To turn them off, setbunServerIntegration({ sessions: false }).ignoreStaticAssetsdefaults totrue, soBun.serveno longer creates spans forGETrequests to common static assets such asfavicon.ico,robots.txtor*.jsfiles. To keep these spans, setbunServerIntegration({ ignoreStaticAssets: false }).Bun.servespans also follow the client's tracing configuration by default, so the integration does not start spans when tracing is disabled. Errors thrown forOPTIONSandHEADrequests are now captured.node: Add
onSpanEndtohttpIntegrationhttpIntegrationandhttpServerSpansIntegrationnow acceptonSpanEnd, 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
sentryBunPluginsentryBunPluginfrom@sentry/bun/pluginnow accepts the same options assentryEsbuildPlugin(org,project,authToken,release,sourcemaps, ...). WhenBun.buildwrites source maps tooutdir, 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 runsentry sourcemap injectandsentry sourcemap uploadafter the build.Like the other bundler plugins,
sentryBunPluginnow sends build telemetry and injects the release it detects (for example, from git). To turn off telemetry, settelemetry: false.