Skip to content

feat!: Require Node >=20.19.0 as minimum supported version#22558

Merged
andreiborza merged 4 commits into
developfrom
ab/js-920-require-node-20
Jul 24, 2026
Merged

feat!: Require Node >=20.19.0 as minimum supported version#22558
andreiborza merged 4 commits into
developfrom
ab/js-920-require-node-20

Conversation

@andreiborza

@andreiborza andreiborza commented Jul 23, 2026

Copy link
Copy Markdown
Member

What

Raise the minimum supported Node.js version to 20.19.0 for v11.

  • Bump engines.node to >=20.19.0 across all packages and dev-packages.
  • Remove now-dead runtime branches that guarded pre-20 Node: the ESM loader-hooks version warning, the ANR 16.17 throw, both node-fetch diagnostics_channel refcount fallbacks, and the redis !dc.tracingChannel fallback.
  • Drop the Node-18 skip logic in ci-unit-tests.ts and refresh stale Node-18 references (issue template, workflow comment, docs, pino/spotlight docstrings).

Why

v11 targets Node 20.19.0 so the SDK can rely on require(esm) and stable tracingChannel without polyfills or legacy code paths. CI matrices, the migration guide, and the volta pin were already moved to Node 20; this aligns the published engines fields and removes the dead code the old floor required.

Kept the >=22.12 gates and the cross-runtime !dc.tracingChannel guards in @sentry/server-utils, which are still reachable on Deno/Bun/Cloudflare. The react-router server-OTel path and its node-20-18 e2e apps are left to #22290, which removes them.

Ref #22056

Bumps the minimum supported Node.js version to 20.19.0 for v11 and
removes now-dead runtime branches that guarded pre-20 Node versions.

Ref #22056

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@linear-code

linear-code Bot commented Jul 23, 2026

Copy link
Copy Markdown

JS-920

@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

Path Size % Change Change
@sentry/browser 27.94 kB - -
@sentry/browser - with treeshaking flags 26.39 kB - -
@sentry/browser (incl. Tracing) 46.41 kB - -
@sentry/browser (incl. Tracing + Span Streaming) 48.18 kB - -
@sentry/browser (incl. Tracing, Profiling) 51.21 kB - -
@sentry/browser (incl. Tracing, Replay) 85.68 kB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 75.33 kB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 90.4 kB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 103.06 kB - -
@sentry/browser (incl. Feedback) 45.12 kB - -
@sentry/browser (incl. sendFeedback) 32.74 kB - -
@sentry/browser (incl. FeedbackAsync) 37.8 kB - -
@sentry/browser (incl. Metrics) 29.04 kB - -
@sentry/browser (incl. Logs) 29.26 kB - -
@sentry/browser (incl. Metrics & Logs) 29.96 kB - -
@sentry/react 29.74 kB - -
@sentry/react (incl. Tracing) 48.71 kB - -
@sentry/vue 33.38 kB - -
@sentry/vue (incl. Tracing) 48.39 kB - -
@sentry/svelte 27.96 kB - -
CDN Bundle 30.27 kB - -
CDN Bundle (incl. Tracing) 48.24 kB - -
CDN Bundle (incl. Logs, Metrics) 31.84 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) 49.56 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) 71.12 kB - -
CDN Bundle (incl. Tracing, Replay) 85.81 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 87.13 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) 91.59 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 92.87 kB - -
CDN Bundle - uncompressed 90.09 kB - -
CDN Bundle (incl. Tracing) - uncompressed 145.16 kB - -
CDN Bundle (incl. Logs, Metrics) - uncompressed 94.8 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 149.14 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 219.57 kB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 264.4 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 268.37 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 278.1 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 282.06 kB - -
@sentry/nextjs (client) 51.23 kB - -
@sentry/sveltekit (client) 46.84 kB - -
@sentry/core/server 80.04 kB - -
@sentry/core/browser 52 kB - -
@sentry/node 122.99 kB -1.2% -1.49 kB 🔽
@sentry/node (incl. diagnostics channel injection) 167 kB -0.89% -1.49 kB 🔽
@sentry/node/import (ESM hook with diagnostics-channel injection) 166 B - -
@sentry/node - without tracing 73.15 kB -2.13% -1.59 kB 🔽
@sentry/aws-serverless 82.63 kB -1.87% -1.57 kB 🔽
@sentry/cloudflare (withSentry) - minified 197.03 kB - -
@sentry/cloudflare (withSentry) 484.7 kB - -

View base workflow run

@andreiborza
andreiborza marked this pull request as ready for review July 24, 2026 07:22
@andreiborza
andreiborza requested review from a team as code owners July 24, 2026 07:22
@andreiborza
andreiborza requested review from JPeer264, chargome, isaacs, logaretm, msonnb, nicohrubec and timfish and removed request for a team July 24, 2026 07:22

@chargome chargome left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nice

@nicohrubec nicohrubec left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nice

* - Dropped the `@opentelemetry/instrumentation` base (undici reports via `diagnostics_channel`,
* so no module patching was needed) — exposed as a plain `instrumentUndici()` function that the
* integration wires up directly
* - Dropped the pre-18.19.0 `diagnostics_channel` ref-counting workaround, since the SDK

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

l: don't think this adds anything?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Removed in 77caf0d

@andreiborza

Copy link
Copy Markdown
Member Author

I updated the range to >=20.19.0 <22.0.0 || >=22.12.0 <23.0.0 || >=23.2.0 and dropped some guardrails, please check again @chargome @nicohrubec 🙏

@nicohrubec nicohrubec left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

we also have checks in our orchestrion integration to see if tracing channels are available, which seems to be only relevant for node 18 afaict? e.g. here

Shouldn't hurt to be safe but we could also think about removing these?

});
});

describe('createCallbackList', () => {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

q: why is this no longer relevant?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

createCallbackList was sync only and the code always chooses async by default given the node version so this is no longer needed.

@Lms24 Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nice!

q: Should this be feat(node)!: ... ?

@andreiborza

Copy link
Copy Markdown
Member Author

@nicohrubec that comment is kinda misleading because server-utils can also be used by bun, cf and deno where it's not as clear which versions need it. I opted to keep it for now, we can clean that up later if we are confident it doesn't break.

@andreiborza

Copy link
Copy Markdown
Member Author

@Lms24 it kinda touches every sdk package which is why it doesn't have a scope

@andreiborza
andreiborza merged commit 4f03438 into develop Jul 24, 2026
549 of 551 checks passed
@andreiborza
andreiborza deleted the ab/js-920-require-node-20 branch July 24, 2026 08:51
chargome added a commit that referenced this pull request Jul 24, 2026
…e app (#22593)

Removes the `react-router-7-framework-spa-node-20-18` e2e app. It
existed only to test on Node 20.18, which is now below the `>=20.19.0`
minimum supported version (#22558). It is otherwise a duplicate of
`react-router-7-framework-spa`, so it is removed rather than kept on an
unsupported Node version.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to 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.

4 participants