Skip to content

feat(v10/nextjs): Add @sentry/nextjs/config entry point - #23766

Merged
chargome merged 2 commits into
v10from
cg-v10-nextjs-config-entry
Aug 31, 2026
Merged

feat(v10/nextjs): Add @sentry/nextjs/config entry point#23766
chargome merged 2 commits into
v10from
cg-v10-nextjs-config-entry

Conversation

@chargome

@chargomechargome commented Aug 31, 2026

Copy link
Copy Markdown
Member

Exposes @sentry/nextjs/config on v10 (additively) and warns once when withSentryConfig is still imported from @sentry/nextjs, so users can make the change on their current major and upgrade to v11 without touching their config.

// next.config.mjs-import{ withSentryConfig }from'@sentry/nextjs';+import{ withSentryConfig }from'@sentry/nextjs/config';
  • No build changes needed — src/config/index.ts was already a rollup entrypoint, only the export map was missing. Resolves to CJS under every condition, matching v11.
  • The main entry routes through a shim so @sentry/nextjs/config stays silent; preserveModules keeps both paths on one implementation.
  • Runtime warning rather than JSDoc alone, because most next.config.js files are plain JS with no TS server attached.
  • @deprecated sits on the export site in index.types.ts — that's what the types condition resolves to, and tagging the shim made no-deprecated fire on our own re-export.
  • nextjs-16-trailing-slash moves to a .mjs config on the new path — the only format Next loads through Node's own ESM loader. The other apps stay on the old import so the back-compat path keeps CI coverage.

Refs #23628

v11 moved `withSentryConfig` and `SentryBuildOptions` to `@sentry/nextjs/config` (#23628), which breaks
every existing `next.config`. Expose the same entry point on v10 so users can move before upgrading,
and warn once when `withSentryConfig` is still imported from `@sentry/nextjs`.
The main entry routes through a shim rather than re-exporting `./config` directly, so importing from
`@sentry/nextjs/config` stays silent. `preserveModules` keeps both paths on one implementation.
The `@deprecated` tag lives on the export site in `index.types.ts`, which is what the `types`
condition resolves to and therefore the only JSDoc users see.
Refs #23628
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@chargomechargome self-assigned this Aug 31, 2026
@github-actions

github-actionsBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.75 kBaddedadded
@sentry/browser - with treeshaking flags26.19 kBaddedadded
@sentry/browser (incl. Tracing)46.63 kBaddedadded
@sentry/browser (incl. Tracing + Span Streaming)48.41 kBaddedadded
@sentry/browser (incl. Tracing, Profiling)51.38 kBaddedadded
@sentry/browser (incl. Tracing, Replay)85.88 kBaddedadded
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.51 kBaddedadded
@sentry/browser (incl. Tracing, Replay with Canvas)90.61 kBaddedadded
@sentry/browser (incl. Tracing, Replay, Feedback)103.25 kBaddedadded
@sentry/browser (incl. Feedback)44.92 kBaddedadded
@sentry/browser (incl. sendFeedback)32.54 kBaddedadded
@sentry/browser (incl. FeedbackAsync)37.68 kBaddedadded
@sentry/browser (incl. Metrics)28.83 kBaddedadded
@sentry/browser (incl. Logs)29.06 kBaddedadded
@sentry/browser (incl. Metrics & Logs)29.75 kBaddedadded
@sentry/react29.56 kBaddedadded
@sentry/react (incl. Tracing)48.89 kBaddedadded
@sentry/vue33.18 kBaddedadded
@sentry/vue (incl. Tracing)48.59 kBaddedadded
@sentry/svelte27.77 kBaddedadded
CDN Bundle30.14 kBaddedadded
CDN Bundle (incl. Tracing)48.59 kBaddedadded
CDN Bundle (incl. Logs, Metrics)31.72 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics)49.89 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics)71.01 kBaddedadded
CDN Bundle (incl. Tracing, Replay)86.11 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.42 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback)91.91 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)93.19 kBaddedadded
CDN Bundle - uncompressed89.87 kBaddedadded
CDN Bundle (incl. Tracing) - uncompressed146.84 kBaddedadded
CDN Bundle (incl. Logs, Metrics) - uncompressed94.58 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed150.82 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed219.41 kBaddedadded
CDN Bundle (incl. Tracing, Replay) - uncompressed266.15 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed270.12 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed279.85 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed283.81 kBaddedadded
@sentry/nextjs (client)51.43 kBaddedadded
@sentry/sveltekit (client)47.04 kBaddedadded
@sentry/core/server80.53 kBaddedadded
@sentry/core/browser66.74 kBaddedadded
@sentry/node-core63.27 kBaddedadded
@sentry/node125.76 kBaddedadded
@sentry/node (incl. diagnostics channel injection)169.82 kBaddedadded
@sentry/node/import (ESM hook with diagnostics-channel injection)166 Baddedadded
@sentry/node/light51.44 kBaddedadded
@sentry/node - without tracing74.95 kBaddedadded
@sentry/aws-serverless84.22 kBaddedadded
@sentry/cloudflare (withSentry) - minified202.59 kBaddedadded
@sentry/cloudflare (withSentry)498.65 kBaddedadded

Converts the nextjs-16-trailing-slash config to `.mjs` and points it at the new entry point. Next
loads `.mjs` through Node's own ESM loader instead of compiling it, so it is the only config format
that exercises `@sentry/nextjs/config` as a plain-Node ESM consumer — where `__dirname` would throw
and where `cjs-module-lexer` has to see the named export statically.
Only this one app moves. The rest keep importing from `@sentry/nextjs` so the back-compat path and
the deprecation shim stay under CI coverage.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit e5ca17a. Configure here.

@chargome
chargome marked this pull request as ready for review August 31, 2026 15:27
@chargome
chargome requested a review from a team as a code ownerAugust 31, 2026 15:27
@chargome
chargome requested review from JPeer264, andreiborza, logaretm, nicohrubec and s1gr1d and removed request for a teamAugust 31, 2026 15:27
@chargome

Copy link
Copy Markdown
MemberAuthor

The failing test is unrelated

@chargome
chargome merged commit 605caaf into v10Aug 31, 2026
253 of 255 checks passed
@chargome
chargome deleted the cg-v10-nextjs-config-entry branch August 31, 2026 15:35
brandhaug added a commit to brandhaug/b2b-saas-starter that referenced this pull request Sep 5, 2026
## Dependency Updates
| Package | From | To | Type |
| --- | --- | --- | --- |
| `@sentry/react` | 10.71.0 | 10.73.0 | minor |
## Release Notes
<details>
<summary><b>@sentry/react</b> (10.71.0 → 10.73.0) — 2 releases</summary>
<details>
<summary><b>10.73.0</b></summary>
### Important Changes
- **feat(v10/nextjs): Add `@sentry/nextjs/config` entry point
([#23766](getsentry/sentry-javascript#23766
`withSentryConfig` is now available from `@sentry/nextjs/config`, the
path it moves to in v11. Importing it from `@sentry/nextjs` still works
on v10 but logs a warning once, so you can change your `next.config`
file today and upgrade to v11 without touching it again.
```js
// next.config.mjs
- import { withSentryConfig } from '@sentry/nextjs';
+ import { withSentryConfig } from '@sentry/nextjs/config';
```
### Other Changes
- feat(v10/node): Deprecate `shouldHandleError` on
`setupExpressErrorHandler` and `setupFasitfyErrorHandler`
([#23734](getsentry/sentry-javascript#23734))
- fix(v10/cloudflare): Instrument Durable Object handlers installed as
read-only properties
([#23769](getsentry/sentry-javascript#23769))
<details>
<summary><strong>Internal Changes</strong></summary>
- test(v10/nextjs): Drop nextjs-16-cf-workers canary variant
([#23775](getsentry/sentry-javascript#23775))
</details>
## Bundle size 📦 | Path | Size |
|
--------------------------------------------------------------------------
| ----------------- |
| @sentry/browser | 27.1 KB |
| @sentry/browser - with treeshaking flags | 25.58 KB |
| @sentry/browser (incl. Tracing) | 45.54 KB |
| @sentry/browser (incl. Tracing + Span Streaming) | 47.28 KB |
| @sentry/browser (incl. Tracing, Profiling) | 50.17 KB |
| @sentry/browser (incl. Tracing, Replay) | 83.87 KB |
| @sentry/browser (incl. Tracing, Replay) - with treeshaking flags |
…[full
notes](https://github.com/getsentry/sentry-javascript/releases/tag/10.73.0)
</details>
<details>
<summary><b>10.72.0</b></summary>
### Important Changes
- **AI integrations no longer report errors that propagate to the caller
([#23638](getsentry/sentry-javascript#23638),
[#23639](getsentry/sentry-javascript#23639),
[#23640](getsentry/sentry-javascript#23640
Across all AI integrations (OpenAI, Anthropic, Google GenAI, LangChain,
and LangGraph), the SDK no longer sends an event to Sentry for errors
that the AI framework propagates to your code. Previously the
instrumentation reported these as unhandled (`handled: false`) before
your own error handling ran, so an error your code caught still showed
up in Sentry as an unhandled crash. The span is still marked as errored
and the error still propagates, so reporting is left to your
application: if your code does not handle the error, it reaches Sentry's
global error handlers and is captured as unhandled, just like any other
uncaught error. Errors that a provider surfaces as data on an otherwise
successful response (such as Anthropic error-shaped responses or Google
GenAI blocked content) are still captured, since your code never sees
them propagate.
- **feat(v10/cloudflare): Add `rpcTracePropagationBindings`
([#23737](getsentry/sentry-javascript#23737),
[#23738](getsentry/sentry-javascript#23738
The new `rpcTracePropagationBindings` option names the `env` bindings
that outgoing RPC calls propagate trace context to. Strings match a
binding name exactly, regular expressions match by pattern, and the
default empty array propagates to nothing. RPC has no headers to carry
trace context, so the SDK appends it as a trailing argument that only a
Sentry-instrumented receiver removes again. List only the bindings whose
receiver you know runs Sentry. Setting the option takes precedence over
`enableRpcTracePropagation`, which is now deprecated. When you build
with the Sentry Cloudflare Vite plugin, the bindings that resolve to t
…[full
notes](https://github.com/getsentry/sentry-javascript/releases/tag/10.72.0)
</details>
</details>
---
*This PR was auto-generated by
[catalog-update-action](https://github.com/brandhaug/catalog-update-action).*
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@chargome@andreiborza