perf(build): Optimize terser minifier config for CDN bundles - #19852

Closed
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config
Closed

perf(build): Optimize terser minifier config for CDN bundles#19852
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config

Conversation

@HazAT

Copy link
Copy Markdown
Member

Summary

Enable additional terser compress and mangle options that safely reduce CDN .min.js bundle sizes. Saves ~300 bytes gzipped on the base browser bundle.

Changes

OptionEffect
compress.passes: 5Multi-pass optimization finds more dead code
compress.ecma: 2020Allows modern syntax in output (nullish coalescing, optional chaining)
compress.toplevel: trueBetter variable inlining within the IIFE wrapper
compress.unsafe_arrows: trueConverts function to => where this is unused (~1.3KB raw)
compress.unsafe_methods: trueShorthand method syntax { m(){} }
compress.unsafe_comps / unsafe_math / pure_gettersSafe algebraic optimizations
mangle.toplevel: trueMangle top-level variable names inside IIFE scope

These options only affect CDN .min.js bundles, not npm ESM/CJS output. The unsafe_* options are safe for our codebase because the CDN bundles run in browser contexts where the assumptions hold.

Also pre-reserves sW in the mangle list for a follow-up change.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.64 kBaddedadded
@sentry/browser - with treeshaking flags24.14 kBaddedadded
@sentry/browser (incl. Tracing)42.62 kBaddedadded
@sentry/browser (incl. Tracing, Profiling)47.28 kBaddedadded
@sentry/browser (incl. Tracing, Replay)81.42 kBaddedadded
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags71 kBaddedadded
@sentry/browser (incl. Tracing, Replay with Canvas)86.12 kBaddedadded
@sentry/browser (incl. Tracing, Replay, Feedback)98.37 kBaddedadded
@sentry/browser (incl. Feedback)42.45 kBaddedadded
@sentry/browser (incl. sendFeedback)30.31 kBaddedadded
@sentry/browser (incl. FeedbackAsync)35.36 kBaddedadded
@sentry/browser (incl. Metrics)26.92 kBaddedadded
@sentry/browser (incl. Logs)27.07 kBaddedadded
@sentry/browser (incl. Metrics & Logs)27.74 kBaddedadded
@sentry/react27.39 kBaddedadded
@sentry/react (incl. Tracing)44.95 kBaddedadded
@sentry/vue30.08 kBaddedadded
@sentry/vue (incl. Tracing)44.48 kBaddedadded
@sentry/svelte25.66 kBaddedadded
CDN Bundle28.1 kBaddedadded
CDN Bundle (incl. Tracing)43.18 kBaddedadded
CDN Bundle (incl. Logs, Metrics)28.95 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics)44.06 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics)67.88 kBaddedadded
CDN Bundle (incl. Tracing, Replay)79.92 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.83 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback)85.46 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.39 kBaddedadded
CDN Bundle - uncompressed81.02 kBaddedadded
CDN Bundle (incl. Tracing) - uncompressed126.58 kBaddedadded
CDN Bundle (incl. Logs, Metrics) - uncompressed83.84 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed129.4 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed206.15 kBaddedadded
CDN Bundle (incl. Tracing, Replay) - uncompressed242.17 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed244.99 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed254.94 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed257.76 kBaddedadded
@sentry/nextjs (client)47.37 kBaddedadded
@sentry/sveltekit (client)43.07 kBaddedadded
@sentry/node-core56.24 kBaddedadded
@sentry/node173.06 kBaddedadded
@sentry/node - without tracing96.25 kBaddedadded
@sentry/aws-serverless113.25 kBaddedadded

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,205--added
GET With Sentry1,66418%-added
GET With Sentry (error only)5,86264%-added
POST Baseline1,202--added
POST With Sentry59650%-added
POST With Sentry (error only)1,05488%-added
MYSQL Baseline3,254--added
MYSQL With Sentry49315%-added
MYSQL With Sentry (error only)2,67482%-added

@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 56e885a to 3bc0473CompareMarch 19, 2026 14:31
@isaacs
isaacs requested review from a team as code ownersMarch 19, 2026 14:31
@github-actions

github-actionsBot commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump yauzl from 3.2.0 to 3.2.1 by dependabot in #19809
  • Bump mysql2 from 3.14.4 to 3.19.1 by dependabot in #19787
  • Bump OpenTelemetry dependencies by andreiborza in #19682
  • Bump hono from 4.12.5 to 4.12.7 by dependabot in #19747
  • Bump simple-git from 3.30.0 to 3.33.0 by dependabot in #19744

Nestjs

  • Instrument @nestjs/bullmq by nicohrubec in #19759
  • Use more specific span origins for NestJS guards, pipes, interceptors, and exception filters by nicohrubec in #19751
  • Instrument @nestjs/schedule decorators by nicohrubec in #19735

Node

  • Avoid OTEL instrumentation for outgoing requests on Node 22+ by mydea in #17355
  • Expose headersToSpanAttributes option on nativeNodeFetchIntegration by andreiborza in #19770

Other

  • (astro) Add Astro 6 support by Lms24 in #19745
  • (browser/cloudflare) Export conversation id from browser and cloudflare runtimes by nicohrubec in #19820
  • (core) Add sentry.timestamp.sequence attribute for timestamp tie-breaking by logaretm in #19421
  • (nextjs) Vercel queue instrumentation by chargome in #19799

Bug Fixes 🐛

Core

  • Fallback to sendDefaultPii setting in langchain and langgraph in non-node environments by nicohrubec in #19813
  • Align Vercel embedding spans with semantic conventions by nicohrubec in #19795
  • Improve Vercel AI SDK instrumentation attributes by RulaKhaled in #19717

Nextjs

  • Strip sourceMappingURL comments after deleting source maps in turbopack builds by chargome in #19814
  • Log correct lastEventId when error is thrown in component render by s1gr1d in #19764

Other

  • (browser) Skip browserTracingIntegration setup for bot user agents by chargome in #19708
  • (cloudflare) Recreate client when previous one was disposed by JPeer264 in #19727
  • (hono) Allow passing env and fix type issues by s1gr1d in #19825
  • (nestjs) Fork isolation scope in @nestjs/event-emitter instrumentation by nicohrubec in #19725
  • (nuxt) Upload client source maps by s1gr1d in #19805
  • (profiling-node) Fix NODE_VERSION rendered as [object Object] in warning by logaretm in #19788

Documentation 📚

New Release

  • Document sdkName for craft by s1gr1d in #19736
  • Update docs based on new Craft flow by s1gr1d in #19731

Other

  • (hono) Document usage without "*" by s1gr1d in #19756

Internal Changes 🔧

  • (agents) Be more explicit on linting and formatting by chargome in #19803
  • (astro,cloudflare) Add an E2E test for Astro 6 on Cloudflare by JPeer264 in #19781
  • (browser) Add simulated mfe integration test by chargome in #19768
  • (build) Optimize terser minifier config for CDN bundles by HazAT in #19852
  • (cloudflare) Prepare for WorkerEntrypoint by JPeer264 in #19742
  • (core) Fix flaky metric sequence number test by nicohrubec in #19754
  • (deps) Bump tedious from 18.6.1 to 19.2.1 by dependabot in #19786
  • (deps-dev) Bump file-type from 20.5.0 to 21.3.1 by dependabot in #19748
  • (e2e) Add MFE e2e test using vite-plugin-federation by chargome in #19778
  • (lint) Rule adjustments and fix warnings by logaretm in #19612
  • (nestjs) Move event instrumentation unit tests to separate file by nicohrubec in #19738
  • (nextjs) Add vercel queue tests to next-16 by chargome in #19798
  • (skills) Add skill-creator and update managed agent skills by chargome in #19713
  • Add oxlint migration commits to blame ignore by logaretm in #19784
  • Bump oxlint and oxfmt by logaretm in #19771
  • Clean up lint and format script names by logaretm in #19719
  • Add oxlint typescript program suppression to workspace settings by logaretm in #19692
  • Auto changes made from "yarn fix" by JPeer264 in #19710

🤖 This preview updates automatically when you update the PR.

@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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment thread.craft.yml Outdated
Enable additional terser compress and mangle options that safely reduce
the size of CDN bundle .min.js files:
- compress.passes: 5 (multi-pass finds more dead code)
- compress.ecma: 2020 (allows modern syntax: nullish coalescing, optional chaining)
- compress.toplevel: true (better variable inlining within the IIFE)
- compress.unsafe_arrows: true (function → arrow where this is unused, ~1.3KB raw)
- compress.unsafe_methods: true ({ m: function(){} } → { m(){} })
- compress.unsafe_comps/unsafe_math/pure_getters: safe algebraic opts
- mangle.toplevel: true (mangle top-level names inside IIFE scope)
Also adds 'sW' to the mangle reserved list (used by a follow-up change that
shortens the sentryWrapped function name for frame stripping).
These options only affect CDN .min.js bundles, not npm ESM/CJS output.
Saves ~300 bytes gzipped on the base browser bundle.
Co-Authored-By: Claude claude@anthropic.com
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 3bc0473 to 05a894eCompareMarch 19, 2026 14:37
This prevents the terser mangle option from mangling the 'Sentry' name,
and avoids a terser bug where our top-level 'var Sentry=' gets stripped.
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 05a894e to 9ae982fCompareMarch 19, 2026 16:20
@billyvg
billyvg removed request for a teamMarch 24, 2026 20:03
@Lms24

Lms24 commented Apr 9, 2026

Copy link
Copy Markdown
Member

Going to close this as the breakage with terser settings is too high

@Lms24Lms24 closed this Apr 9, 2026
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.

3 participants

@HazAT@Lms24@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

perf(build): Optimize terser minifier config for CDN bundles - #19852

Closed
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config
Closed

perf(build): Optimize terser minifier config for CDN bundles#19852
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config

Conversation

@HazAT

Copy link
Copy Markdown
Member

Summary

Enable additional terser compress and mangle options that safely reduce CDN .min.js bundle sizes. Saves ~300 bytes gzipped on the base browser bundle.

Changes

OptionEffect
compress.passes: 5Multi-pass optimization finds more dead code
compress.ecma: 2020Allows modern syntax in output (nullish coalescing, optional chaining)
compress.toplevel: trueBetter variable inlining within the IIFE wrapper
compress.unsafe_arrows: trueConverts function to => where this is unused (~1.3KB raw)
compress.unsafe_methods: trueShorthand method syntax { m(){} }
compress.unsafe_comps / unsafe_math / pure_gettersSafe algebraic optimizations
mangle.toplevel: trueMangle top-level variable names inside IIFE scope

These options only affect CDN .min.js bundles, not npm ESM/CJS output. The unsafe_* options are safe for our codebase because the CDN bundles run in browser contexts where the assumptions hold.

Also pre-reserves sW in the mangle list for a follow-up change.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.64 kBaddedadded
@sentry/browser - with treeshaking flags24.14 kBaddedadded
@sentry/browser (incl. Tracing)42.62 kBaddedadded
@sentry/browser (incl. Tracing, Profiling)47.28 kBaddedadded
@sentry/browser (incl. Tracing, Replay)81.42 kBaddedadded
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags71 kBaddedadded
@sentry/browser (incl. Tracing, Replay with Canvas)86.12 kBaddedadded
@sentry/browser (incl. Tracing, Replay, Feedback)98.37 kBaddedadded
@sentry/browser (incl. Feedback)42.45 kBaddedadded
@sentry/browser (incl. sendFeedback)30.31 kBaddedadded
@sentry/browser (incl. FeedbackAsync)35.36 kBaddedadded
@sentry/browser (incl. Metrics)26.92 kBaddedadded
@sentry/browser (incl. Logs)27.07 kBaddedadded
@sentry/browser (incl. Metrics & Logs)27.74 kBaddedadded
@sentry/react27.39 kBaddedadded
@sentry/react (incl. Tracing)44.95 kBaddedadded
@sentry/vue30.08 kBaddedadded
@sentry/vue (incl. Tracing)44.48 kBaddedadded
@sentry/svelte25.66 kBaddedadded
CDN Bundle28.1 kBaddedadded
CDN Bundle (incl. Tracing)43.18 kBaddedadded
CDN Bundle (incl. Logs, Metrics)28.95 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics)44.06 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics)67.88 kBaddedadded
CDN Bundle (incl. Tracing, Replay)79.92 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.83 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback)85.46 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.39 kBaddedadded
CDN Bundle - uncompressed81.02 kBaddedadded
CDN Bundle (incl. Tracing) - uncompressed126.58 kBaddedadded
CDN Bundle (incl. Logs, Metrics) - uncompressed83.84 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed129.4 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed206.15 kBaddedadded
CDN Bundle (incl. Tracing, Replay) - uncompressed242.17 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed244.99 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed254.94 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed257.76 kBaddedadded
@sentry/nextjs (client)47.37 kBaddedadded
@sentry/sveltekit (client)43.07 kBaddedadded
@sentry/node-core56.24 kBaddedadded
@sentry/node173.06 kBaddedadded
@sentry/node - without tracing96.25 kBaddedadded
@sentry/aws-serverless113.25 kBaddedadded

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,205--added
GET With Sentry1,66418%-added
GET With Sentry (error only)5,86264%-added
POST Baseline1,202--added
POST With Sentry59650%-added
POST With Sentry (error only)1,05488%-added
MYSQL Baseline3,254--added
MYSQL With Sentry49315%-added
MYSQL With Sentry (error only)2,67482%-added

@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 56e885a to 3bc0473CompareMarch 19, 2026 14:31
@isaacs
isaacs requested review from a team as code ownersMarch 19, 2026 14:31
@github-actions

github-actionsBot commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump yauzl from 3.2.0 to 3.2.1 by dependabot in #19809
  • Bump mysql2 from 3.14.4 to 3.19.1 by dependabot in #19787
  • Bump OpenTelemetry dependencies by andreiborza in #19682
  • Bump hono from 4.12.5 to 4.12.7 by dependabot in #19747
  • Bump simple-git from 3.30.0 to 3.33.0 by dependabot in #19744

Nestjs

  • Instrument @nestjs/bullmq by nicohrubec in #19759
  • Use more specific span origins for NestJS guards, pipes, interceptors, and exception filters by nicohrubec in #19751
  • Instrument @nestjs/schedule decorators by nicohrubec in #19735

Node

  • Avoid OTEL instrumentation for outgoing requests on Node 22+ by mydea in #17355
  • Expose headersToSpanAttributes option on nativeNodeFetchIntegration by andreiborza in #19770

Other

  • (astro) Add Astro 6 support by Lms24 in #19745
  • (browser/cloudflare) Export conversation id from browser and cloudflare runtimes by nicohrubec in #19820
  • (core) Add sentry.timestamp.sequence attribute for timestamp tie-breaking by logaretm in #19421
  • (nextjs) Vercel queue instrumentation by chargome in #19799

Bug Fixes 🐛

Core

  • Fallback to sendDefaultPii setting in langchain and langgraph in non-node environments by nicohrubec in #19813
  • Align Vercel embedding spans with semantic conventions by nicohrubec in #19795
  • Improve Vercel AI SDK instrumentation attributes by RulaKhaled in #19717

Nextjs

  • Strip sourceMappingURL comments after deleting source maps in turbopack builds by chargome in #19814
  • Log correct lastEventId when error is thrown in component render by s1gr1d in #19764

Other

  • (browser) Skip browserTracingIntegration setup for bot user agents by chargome in #19708
  • (cloudflare) Recreate client when previous one was disposed by JPeer264 in #19727
  • (hono) Allow passing env and fix type issues by s1gr1d in #19825
  • (nestjs) Fork isolation scope in @nestjs/event-emitter instrumentation by nicohrubec in #19725
  • (nuxt) Upload client source maps by s1gr1d in #19805
  • (profiling-node) Fix NODE_VERSION rendered as [object Object] in warning by logaretm in #19788

Documentation 📚

New Release

  • Document sdkName for craft by s1gr1d in #19736
  • Update docs based on new Craft flow by s1gr1d in #19731

Other

  • (hono) Document usage without "*" by s1gr1d in #19756

Internal Changes 🔧

  • (agents) Be more explicit on linting and formatting by chargome in #19803
  • (astro,cloudflare) Add an E2E test for Astro 6 on Cloudflare by JPeer264 in #19781
  • (browser) Add simulated mfe integration test by chargome in #19768
  • (build) Optimize terser minifier config for CDN bundles by HazAT in #19852
  • (cloudflare) Prepare for WorkerEntrypoint by JPeer264 in #19742
  • (core) Fix flaky metric sequence number test by nicohrubec in #19754
  • (deps) Bump tedious from 18.6.1 to 19.2.1 by dependabot in #19786
  • (deps-dev) Bump file-type from 20.5.0 to 21.3.1 by dependabot in #19748
  • (e2e) Add MFE e2e test using vite-plugin-federation by chargome in #19778
  • (lint) Rule adjustments and fix warnings by logaretm in #19612
  • (nestjs) Move event instrumentation unit tests to separate file by nicohrubec in #19738
  • (nextjs) Add vercel queue tests to next-16 by chargome in #19798
  • (skills) Add skill-creator and update managed agent skills by chargome in #19713
  • Add oxlint migration commits to blame ignore by logaretm in #19784
  • Bump oxlint and oxfmt by logaretm in #19771
  • Clean up lint and format script names by logaretm in #19719
  • Add oxlint typescript program suppression to workspace settings by logaretm in #19692
  • Auto changes made from "yarn fix" by JPeer264 in #19710

🤖 This preview updates automatically when you update the PR.

@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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment thread.craft.yml Outdated
Enable additional terser compress and mangle options that safely reduce
the size of CDN bundle .min.js files:
- compress.passes: 5 (multi-pass finds more dead code)
- compress.ecma: 2020 (allows modern syntax: nullish coalescing, optional chaining)
- compress.toplevel: true (better variable inlining within the IIFE)
- compress.unsafe_arrows: true (function → arrow where this is unused, ~1.3KB raw)
- compress.unsafe_methods: true ({ m: function(){} } → { m(){} })
- compress.unsafe_comps/unsafe_math/pure_getters: safe algebraic opts
- mangle.toplevel: true (mangle top-level names inside IIFE scope)
Also adds 'sW' to the mangle reserved list (used by a follow-up change that
shortens the sentryWrapped function name for frame stripping).
These options only affect CDN .min.js bundles, not npm ESM/CJS output.
Saves ~300 bytes gzipped on the base browser bundle.
Co-Authored-By: Claude claude@anthropic.com
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 3bc0473 to 05a894eCompareMarch 19, 2026 14:37
This prevents the terser mangle option from mangling the 'Sentry' name,
and avoids a terser bug where our top-level 'var Sentry=' gets stripped.
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 05a894e to 9ae982fCompareMarch 19, 2026 16:20
@billyvg
billyvg removed request for a teamMarch 24, 2026 20:03
@Lms24

Lms24 commented Apr 9, 2026

Copy link
Copy Markdown
Member

Going to close this as the breakage with terser settings is too high

@Lms24Lms24 closed this Apr 9, 2026
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.

3 participants

@HazAT@Lms24@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

perf(build): Optimize terser minifier config for CDN bundles - #19852

Closed
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config
Closed

perf(build): Optimize terser minifier config for CDN bundles#19852
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config

Conversation

@HazAT

Copy link
Copy Markdown
Member

Summary

Enable additional terser compress and mangle options that safely reduce CDN .min.js bundle sizes. Saves ~300 bytes gzipped on the base browser bundle.

Changes

OptionEffect
compress.passes: 5Multi-pass optimization finds more dead code
compress.ecma: 2020Allows modern syntax in output (nullish coalescing, optional chaining)
compress.toplevel: trueBetter variable inlining within the IIFE wrapper
compress.unsafe_arrows: trueConverts function to => where this is unused (~1.3KB raw)
compress.unsafe_methods: trueShorthand method syntax { m(){} }
compress.unsafe_comps / unsafe_math / pure_gettersSafe algebraic optimizations
mangle.toplevel: trueMangle top-level variable names inside IIFE scope

These options only affect CDN .min.js bundles, not npm ESM/CJS output. The unsafe_* options are safe for our codebase because the CDN bundles run in browser contexts where the assumptions hold.

Also pre-reserves sW in the mangle list for a follow-up change.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.64 kBaddedadded
@sentry/browser - with treeshaking flags24.14 kBaddedadded
@sentry/browser (incl. Tracing)42.62 kBaddedadded
@sentry/browser (incl. Tracing, Profiling)47.28 kBaddedadded
@sentry/browser (incl. Tracing, Replay)81.42 kBaddedadded
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags71 kBaddedadded
@sentry/browser (incl. Tracing, Replay with Canvas)86.12 kBaddedadded
@sentry/browser (incl. Tracing, Replay, Feedback)98.37 kBaddedadded
@sentry/browser (incl. Feedback)42.45 kBaddedadded
@sentry/browser (incl. sendFeedback)30.31 kBaddedadded
@sentry/browser (incl. FeedbackAsync)35.36 kBaddedadded
@sentry/browser (incl. Metrics)26.92 kBaddedadded
@sentry/browser (incl. Logs)27.07 kBaddedadded
@sentry/browser (incl. Metrics & Logs)27.74 kBaddedadded
@sentry/react27.39 kBaddedadded
@sentry/react (incl. Tracing)44.95 kBaddedadded
@sentry/vue30.08 kBaddedadded
@sentry/vue (incl. Tracing)44.48 kBaddedadded
@sentry/svelte25.66 kBaddedadded
CDN Bundle28.1 kBaddedadded
CDN Bundle (incl. Tracing)43.18 kBaddedadded
CDN Bundle (incl. Logs, Metrics)28.95 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics)44.06 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics)67.88 kBaddedadded
CDN Bundle (incl. Tracing, Replay)79.92 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.83 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback)85.46 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.39 kBaddedadded
CDN Bundle - uncompressed81.02 kBaddedadded
CDN Bundle (incl. Tracing) - uncompressed126.58 kBaddedadded
CDN Bundle (incl. Logs, Metrics) - uncompressed83.84 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed129.4 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed206.15 kBaddedadded
CDN Bundle (incl. Tracing, Replay) - uncompressed242.17 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed244.99 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed254.94 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed257.76 kBaddedadded
@sentry/nextjs (client)47.37 kBaddedadded
@sentry/sveltekit (client)43.07 kBaddedadded
@sentry/node-core56.24 kBaddedadded
@sentry/node173.06 kBaddedadded
@sentry/node - without tracing96.25 kBaddedadded
@sentry/aws-serverless113.25 kBaddedadded

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,205--added
GET With Sentry1,66418%-added
GET With Sentry (error only)5,86264%-added
POST Baseline1,202--added
POST With Sentry59650%-added
POST With Sentry (error only)1,05488%-added
MYSQL Baseline3,254--added
MYSQL With Sentry49315%-added
MYSQL With Sentry (error only)2,67482%-added

@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 56e885a to 3bc0473CompareMarch 19, 2026 14:31
@isaacs
isaacs requested review from a team as code ownersMarch 19, 2026 14:31
@github-actions

github-actionsBot commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump yauzl from 3.2.0 to 3.2.1 by dependabot in #19809
  • Bump mysql2 from 3.14.4 to 3.19.1 by dependabot in #19787
  • Bump OpenTelemetry dependencies by andreiborza in #19682
  • Bump hono from 4.12.5 to 4.12.7 by dependabot in #19747
  • Bump simple-git from 3.30.0 to 3.33.0 by dependabot in #19744

Nestjs

  • Instrument @nestjs/bullmq by nicohrubec in #19759
  • Use more specific span origins for NestJS guards, pipes, interceptors, and exception filters by nicohrubec in #19751
  • Instrument @nestjs/schedule decorators by nicohrubec in #19735

Node

  • Avoid OTEL instrumentation for outgoing requests on Node 22+ by mydea in #17355
  • Expose headersToSpanAttributes option on nativeNodeFetchIntegration by andreiborza in #19770

Other

  • (astro) Add Astro 6 support by Lms24 in #19745
  • (browser/cloudflare) Export conversation id from browser and cloudflare runtimes by nicohrubec in #19820
  • (core) Add sentry.timestamp.sequence attribute for timestamp tie-breaking by logaretm in #19421
  • (nextjs) Vercel queue instrumentation by chargome in #19799

Bug Fixes 🐛

Core

  • Fallback to sendDefaultPii setting in langchain and langgraph in non-node environments by nicohrubec in #19813
  • Align Vercel embedding spans with semantic conventions by nicohrubec in #19795
  • Improve Vercel AI SDK instrumentation attributes by RulaKhaled in #19717

Nextjs

  • Strip sourceMappingURL comments after deleting source maps in turbopack builds by chargome in #19814
  • Log correct lastEventId when error is thrown in component render by s1gr1d in #19764

Other

  • (browser) Skip browserTracingIntegration setup for bot user agents by chargome in #19708
  • (cloudflare) Recreate client when previous one was disposed by JPeer264 in #19727
  • (hono) Allow passing env and fix type issues by s1gr1d in #19825
  • (nestjs) Fork isolation scope in @nestjs/event-emitter instrumentation by nicohrubec in #19725
  • (nuxt) Upload client source maps by s1gr1d in #19805
  • (profiling-node) Fix NODE_VERSION rendered as [object Object] in warning by logaretm in #19788

Documentation 📚

New Release

  • Document sdkName for craft by s1gr1d in #19736
  • Update docs based on new Craft flow by s1gr1d in #19731

Other

  • (hono) Document usage without "*" by s1gr1d in #19756

Internal Changes 🔧

  • (agents) Be more explicit on linting and formatting by chargome in #19803
  • (astro,cloudflare) Add an E2E test for Astro 6 on Cloudflare by JPeer264 in #19781
  • (browser) Add simulated mfe integration test by chargome in #19768
  • (build) Optimize terser minifier config for CDN bundles by HazAT in #19852
  • (cloudflare) Prepare for WorkerEntrypoint by JPeer264 in #19742
  • (core) Fix flaky metric sequence number test by nicohrubec in #19754
  • (deps) Bump tedious from 18.6.1 to 19.2.1 by dependabot in #19786
  • (deps-dev) Bump file-type from 20.5.0 to 21.3.1 by dependabot in #19748
  • (e2e) Add MFE e2e test using vite-plugin-federation by chargome in #19778
  • (lint) Rule adjustments and fix warnings by logaretm in #19612
  • (nestjs) Move event instrumentation unit tests to separate file by nicohrubec in #19738
  • (nextjs) Add vercel queue tests to next-16 by chargome in #19798
  • (skills) Add skill-creator and update managed agent skills by chargome in #19713
  • Add oxlint migration commits to blame ignore by logaretm in #19784
  • Bump oxlint and oxfmt by logaretm in #19771
  • Clean up lint and format script names by logaretm in #19719
  • Add oxlint typescript program suppression to workspace settings by logaretm in #19692
  • Auto changes made from "yarn fix" by JPeer264 in #19710

🤖 This preview updates automatically when you update the PR.

@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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment thread.craft.yml Outdated
Enable additional terser compress and mangle options that safely reduce
the size of CDN bundle .min.js files:
- compress.passes: 5 (multi-pass finds more dead code)
- compress.ecma: 2020 (allows modern syntax: nullish coalescing, optional chaining)
- compress.toplevel: true (better variable inlining within the IIFE)
- compress.unsafe_arrows: true (function → arrow where this is unused, ~1.3KB raw)
- compress.unsafe_methods: true ({ m: function(){} } → { m(){} })
- compress.unsafe_comps/unsafe_math/pure_getters: safe algebraic opts
- mangle.toplevel: true (mangle top-level names inside IIFE scope)
Also adds 'sW' to the mangle reserved list (used by a follow-up change that
shortens the sentryWrapped function name for frame stripping).
These options only affect CDN .min.js bundles, not npm ESM/CJS output.
Saves ~300 bytes gzipped on the base browser bundle.
Co-Authored-By: Claude claude@anthropic.com
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 3bc0473 to 05a894eCompareMarch 19, 2026 14:37
This prevents the terser mangle option from mangling the 'Sentry' name,
and avoids a terser bug where our top-level 'var Sentry=' gets stripped.
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 05a894e to 9ae982fCompareMarch 19, 2026 16:20
@billyvg
billyvg removed request for a teamMarch 24, 2026 20:03
@Lms24

Lms24 commented Apr 9, 2026

Copy link
Copy Markdown
Member

Going to close this as the breakage with terser settings is too high

@Lms24Lms24 closed this Apr 9, 2026
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.

3 participants

@HazAT@Lms24@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

perf(build): Optimize terser minifier config for CDN bundles - #19852

Closed
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config
Closed

perf(build): Optimize terser minifier config for CDN bundles#19852
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config

Conversation

@HazAT

Copy link
Copy Markdown
Member

Summary

Enable additional terser compress and mangle options that safely reduce CDN .min.js bundle sizes. Saves ~300 bytes gzipped on the base browser bundle.

Changes

OptionEffect
compress.passes: 5Multi-pass optimization finds more dead code
compress.ecma: 2020Allows modern syntax in output (nullish coalescing, optional chaining)
compress.toplevel: trueBetter variable inlining within the IIFE wrapper
compress.unsafe_arrows: trueConverts function to => where this is unused (~1.3KB raw)
compress.unsafe_methods: trueShorthand method syntax { m(){} }
compress.unsafe_comps / unsafe_math / pure_gettersSafe algebraic optimizations
mangle.toplevel: trueMangle top-level variable names inside IIFE scope

These options only affect CDN .min.js bundles, not npm ESM/CJS output. The unsafe_* options are safe for our codebase because the CDN bundles run in browser contexts where the assumptions hold.

Also pre-reserves sW in the mangle list for a follow-up change.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.64 kBaddedadded
@sentry/browser - with treeshaking flags24.14 kBaddedadded
@sentry/browser (incl. Tracing)42.62 kBaddedadded
@sentry/browser (incl. Tracing, Profiling)47.28 kBaddedadded
@sentry/browser (incl. Tracing, Replay)81.42 kBaddedadded
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags71 kBaddedadded
@sentry/browser (incl. Tracing, Replay with Canvas)86.12 kBaddedadded
@sentry/browser (incl. Tracing, Replay, Feedback)98.37 kBaddedadded
@sentry/browser (incl. Feedback)42.45 kBaddedadded
@sentry/browser (incl. sendFeedback)30.31 kBaddedadded
@sentry/browser (incl. FeedbackAsync)35.36 kBaddedadded
@sentry/browser (incl. Metrics)26.92 kBaddedadded
@sentry/browser (incl. Logs)27.07 kBaddedadded
@sentry/browser (incl. Metrics & Logs)27.74 kBaddedadded
@sentry/react27.39 kBaddedadded
@sentry/react (incl. Tracing)44.95 kBaddedadded
@sentry/vue30.08 kBaddedadded
@sentry/vue (incl. Tracing)44.48 kBaddedadded
@sentry/svelte25.66 kBaddedadded
CDN Bundle28.1 kBaddedadded
CDN Bundle (incl. Tracing)43.18 kBaddedadded
CDN Bundle (incl. Logs, Metrics)28.95 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics)44.06 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics)67.88 kBaddedadded
CDN Bundle (incl. Tracing, Replay)79.92 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.83 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback)85.46 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.39 kBaddedadded
CDN Bundle - uncompressed81.02 kBaddedadded
CDN Bundle (incl. Tracing) - uncompressed126.58 kBaddedadded
CDN Bundle (incl. Logs, Metrics) - uncompressed83.84 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed129.4 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed206.15 kBaddedadded
CDN Bundle (incl. Tracing, Replay) - uncompressed242.17 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed244.99 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed254.94 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed257.76 kBaddedadded
@sentry/nextjs (client)47.37 kBaddedadded
@sentry/sveltekit (client)43.07 kBaddedadded
@sentry/node-core56.24 kBaddedadded
@sentry/node173.06 kBaddedadded
@sentry/node - without tracing96.25 kBaddedadded
@sentry/aws-serverless113.25 kBaddedadded

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,205--added
GET With Sentry1,66418%-added
GET With Sentry (error only)5,86264%-added
POST Baseline1,202--added
POST With Sentry59650%-added
POST With Sentry (error only)1,05488%-added
MYSQL Baseline3,254--added
MYSQL With Sentry49315%-added
MYSQL With Sentry (error only)2,67482%-added

@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 56e885a to 3bc0473CompareMarch 19, 2026 14:31
@isaacs
isaacs requested review from a team as code ownersMarch 19, 2026 14:31
@github-actions

github-actionsBot commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump yauzl from 3.2.0 to 3.2.1 by dependabot in #19809
  • Bump mysql2 from 3.14.4 to 3.19.1 by dependabot in #19787
  • Bump OpenTelemetry dependencies by andreiborza in #19682
  • Bump hono from 4.12.5 to 4.12.7 by dependabot in #19747
  • Bump simple-git from 3.30.0 to 3.33.0 by dependabot in #19744

Nestjs

  • Instrument @nestjs/bullmq by nicohrubec in #19759
  • Use more specific span origins for NestJS guards, pipes, interceptors, and exception filters by nicohrubec in #19751
  • Instrument @nestjs/schedule decorators by nicohrubec in #19735

Node

  • Avoid OTEL instrumentation for outgoing requests on Node 22+ by mydea in #17355
  • Expose headersToSpanAttributes option on nativeNodeFetchIntegration by andreiborza in #19770

Other

  • (astro) Add Astro 6 support by Lms24 in #19745
  • (browser/cloudflare) Export conversation id from browser and cloudflare runtimes by nicohrubec in #19820
  • (core) Add sentry.timestamp.sequence attribute for timestamp tie-breaking by logaretm in #19421
  • (nextjs) Vercel queue instrumentation by chargome in #19799

Bug Fixes 🐛

Core

  • Fallback to sendDefaultPii setting in langchain and langgraph in non-node environments by nicohrubec in #19813
  • Align Vercel embedding spans with semantic conventions by nicohrubec in #19795
  • Improve Vercel AI SDK instrumentation attributes by RulaKhaled in #19717

Nextjs

  • Strip sourceMappingURL comments after deleting source maps in turbopack builds by chargome in #19814
  • Log correct lastEventId when error is thrown in component render by s1gr1d in #19764

Other

  • (browser) Skip browserTracingIntegration setup for bot user agents by chargome in #19708
  • (cloudflare) Recreate client when previous one was disposed by JPeer264 in #19727
  • (hono) Allow passing env and fix type issues by s1gr1d in #19825
  • (nestjs) Fork isolation scope in @nestjs/event-emitter instrumentation by nicohrubec in #19725
  • (nuxt) Upload client source maps by s1gr1d in #19805
  • (profiling-node) Fix NODE_VERSION rendered as [object Object] in warning by logaretm in #19788

Documentation 📚

New Release

  • Document sdkName for craft by s1gr1d in #19736
  • Update docs based on new Craft flow by s1gr1d in #19731

Other

  • (hono) Document usage without "*" by s1gr1d in #19756

Internal Changes 🔧

  • (agents) Be more explicit on linting and formatting by chargome in #19803
  • (astro,cloudflare) Add an E2E test for Astro 6 on Cloudflare by JPeer264 in #19781
  • (browser) Add simulated mfe integration test by chargome in #19768
  • (build) Optimize terser minifier config for CDN bundles by HazAT in #19852
  • (cloudflare) Prepare for WorkerEntrypoint by JPeer264 in #19742
  • (core) Fix flaky metric sequence number test by nicohrubec in #19754
  • (deps) Bump tedious from 18.6.1 to 19.2.1 by dependabot in #19786
  • (deps-dev) Bump file-type from 20.5.0 to 21.3.1 by dependabot in #19748
  • (e2e) Add MFE e2e test using vite-plugin-federation by chargome in #19778
  • (lint) Rule adjustments and fix warnings by logaretm in #19612
  • (nestjs) Move event instrumentation unit tests to separate file by nicohrubec in #19738
  • (nextjs) Add vercel queue tests to next-16 by chargome in #19798
  • (skills) Add skill-creator and update managed agent skills by chargome in #19713
  • Add oxlint migration commits to blame ignore by logaretm in #19784
  • Bump oxlint and oxfmt by logaretm in #19771
  • Clean up lint and format script names by logaretm in #19719
  • Add oxlint typescript program suppression to workspace settings by logaretm in #19692
  • Auto changes made from "yarn fix" by JPeer264 in #19710

🤖 This preview updates automatically when you update the PR.

@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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment thread.craft.yml Outdated
Enable additional terser compress and mangle options that safely reduce
the size of CDN bundle .min.js files:
- compress.passes: 5 (multi-pass finds more dead code)
- compress.ecma: 2020 (allows modern syntax: nullish coalescing, optional chaining)
- compress.toplevel: true (better variable inlining within the IIFE)
- compress.unsafe_arrows: true (function → arrow where this is unused, ~1.3KB raw)
- compress.unsafe_methods: true ({ m: function(){} } → { m(){} })
- compress.unsafe_comps/unsafe_math/pure_getters: safe algebraic opts
- mangle.toplevel: true (mangle top-level names inside IIFE scope)
Also adds 'sW' to the mangle reserved list (used by a follow-up change that
shortens the sentryWrapped function name for frame stripping).
These options only affect CDN .min.js bundles, not npm ESM/CJS output.
Saves ~300 bytes gzipped on the base browser bundle.
Co-Authored-By: Claude claude@anthropic.com
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 3bc0473 to 05a894eCompareMarch 19, 2026 14:37
This prevents the terser mangle option from mangling the 'Sentry' name,
and avoids a terser bug where our top-level 'var Sentry=' gets stripped.
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 05a894e to 9ae982fCompareMarch 19, 2026 16:20
@billyvg
billyvg removed request for a teamMarch 24, 2026 20:03
@Lms24

Lms24 commented Apr 9, 2026

Copy link
Copy Markdown
Member

Going to close this as the breakage with terser settings is too high

@Lms24Lms24 closed this Apr 9, 2026
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.

3 participants

@HazAT@Lms24@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

perf(build): Optimize terser minifier config for CDN bundles - #19852

Closed
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config
Closed

perf(build): Optimize terser minifier config for CDN bundles#19852
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config

Conversation

@HazAT

Copy link
Copy Markdown
Member

Summary

Enable additional terser compress and mangle options that safely reduce CDN .min.js bundle sizes. Saves ~300 bytes gzipped on the base browser bundle.

Changes

OptionEffect
compress.passes: 5Multi-pass optimization finds more dead code
compress.ecma: 2020Allows modern syntax in output (nullish coalescing, optional chaining)
compress.toplevel: trueBetter variable inlining within the IIFE wrapper
compress.unsafe_arrows: trueConverts function to => where this is unused (~1.3KB raw)
compress.unsafe_methods: trueShorthand method syntax { m(){} }
compress.unsafe_comps / unsafe_math / pure_gettersSafe algebraic optimizations
mangle.toplevel: trueMangle top-level variable names inside IIFE scope

These options only affect CDN .min.js bundles, not npm ESM/CJS output. The unsafe_* options are safe for our codebase because the CDN bundles run in browser contexts where the assumptions hold.

Also pre-reserves sW in the mangle list for a follow-up change.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.64 kBaddedadded
@sentry/browser - with treeshaking flags24.14 kBaddedadded
@sentry/browser (incl. Tracing)42.62 kBaddedadded
@sentry/browser (incl. Tracing, Profiling)47.28 kBaddedadded
@sentry/browser (incl. Tracing, Replay)81.42 kBaddedadded
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags71 kBaddedadded
@sentry/browser (incl. Tracing, Replay with Canvas)86.12 kBaddedadded
@sentry/browser (incl. Tracing, Replay, Feedback)98.37 kBaddedadded
@sentry/browser (incl. Feedback)42.45 kBaddedadded
@sentry/browser (incl. sendFeedback)30.31 kBaddedadded
@sentry/browser (incl. FeedbackAsync)35.36 kBaddedadded
@sentry/browser (incl. Metrics)26.92 kBaddedadded
@sentry/browser (incl. Logs)27.07 kBaddedadded
@sentry/browser (incl. Metrics & Logs)27.74 kBaddedadded
@sentry/react27.39 kBaddedadded
@sentry/react (incl. Tracing)44.95 kBaddedadded
@sentry/vue30.08 kBaddedadded
@sentry/vue (incl. Tracing)44.48 kBaddedadded
@sentry/svelte25.66 kBaddedadded
CDN Bundle28.1 kBaddedadded
CDN Bundle (incl. Tracing)43.18 kBaddedadded
CDN Bundle (incl. Logs, Metrics)28.95 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics)44.06 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics)67.88 kBaddedadded
CDN Bundle (incl. Tracing, Replay)79.92 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.83 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback)85.46 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.39 kBaddedadded
CDN Bundle - uncompressed81.02 kBaddedadded
CDN Bundle (incl. Tracing) - uncompressed126.58 kBaddedadded
CDN Bundle (incl. Logs, Metrics) - uncompressed83.84 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed129.4 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed206.15 kBaddedadded
CDN Bundle (incl. Tracing, Replay) - uncompressed242.17 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed244.99 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed254.94 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed257.76 kBaddedadded
@sentry/nextjs (client)47.37 kBaddedadded
@sentry/sveltekit (client)43.07 kBaddedadded
@sentry/node-core56.24 kBaddedadded
@sentry/node173.06 kBaddedadded
@sentry/node - without tracing96.25 kBaddedadded
@sentry/aws-serverless113.25 kBaddedadded

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,205--added
GET With Sentry1,66418%-added
GET With Sentry (error only)5,86264%-added
POST Baseline1,202--added
POST With Sentry59650%-added
POST With Sentry (error only)1,05488%-added
MYSQL Baseline3,254--added
MYSQL With Sentry49315%-added
MYSQL With Sentry (error only)2,67482%-added

@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 56e885a to 3bc0473CompareMarch 19, 2026 14:31
@isaacs
isaacs requested review from a team as code ownersMarch 19, 2026 14:31
@github-actions

github-actionsBot commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump yauzl from 3.2.0 to 3.2.1 by dependabot in #19809
  • Bump mysql2 from 3.14.4 to 3.19.1 by dependabot in #19787
  • Bump OpenTelemetry dependencies by andreiborza in #19682
  • Bump hono from 4.12.5 to 4.12.7 by dependabot in #19747
  • Bump simple-git from 3.30.0 to 3.33.0 by dependabot in #19744

Nestjs

  • Instrument @nestjs/bullmq by nicohrubec in #19759
  • Use more specific span origins for NestJS guards, pipes, interceptors, and exception filters by nicohrubec in #19751
  • Instrument @nestjs/schedule decorators by nicohrubec in #19735

Node

  • Avoid OTEL instrumentation for outgoing requests on Node 22+ by mydea in #17355
  • Expose headersToSpanAttributes option on nativeNodeFetchIntegration by andreiborza in #19770

Other

  • (astro) Add Astro 6 support by Lms24 in #19745
  • (browser/cloudflare) Export conversation id from browser and cloudflare runtimes by nicohrubec in #19820
  • (core) Add sentry.timestamp.sequence attribute for timestamp tie-breaking by logaretm in #19421
  • (nextjs) Vercel queue instrumentation by chargome in #19799

Bug Fixes 🐛

Core

  • Fallback to sendDefaultPii setting in langchain and langgraph in non-node environments by nicohrubec in #19813
  • Align Vercel embedding spans with semantic conventions by nicohrubec in #19795
  • Improve Vercel AI SDK instrumentation attributes by RulaKhaled in #19717

Nextjs

  • Strip sourceMappingURL comments after deleting source maps in turbopack builds by chargome in #19814
  • Log correct lastEventId when error is thrown in component render by s1gr1d in #19764

Other

  • (browser) Skip browserTracingIntegration setup for bot user agents by chargome in #19708
  • (cloudflare) Recreate client when previous one was disposed by JPeer264 in #19727
  • (hono) Allow passing env and fix type issues by s1gr1d in #19825
  • (nestjs) Fork isolation scope in @nestjs/event-emitter instrumentation by nicohrubec in #19725
  • (nuxt) Upload client source maps by s1gr1d in #19805
  • (profiling-node) Fix NODE_VERSION rendered as [object Object] in warning by logaretm in #19788

Documentation 📚

New Release

  • Document sdkName for craft by s1gr1d in #19736
  • Update docs based on new Craft flow by s1gr1d in #19731

Other

  • (hono) Document usage without "*" by s1gr1d in #19756

Internal Changes 🔧

  • (agents) Be more explicit on linting and formatting by chargome in #19803
  • (astro,cloudflare) Add an E2E test for Astro 6 on Cloudflare by JPeer264 in #19781
  • (browser) Add simulated mfe integration test by chargome in #19768
  • (build) Optimize terser minifier config for CDN bundles by HazAT in #19852
  • (cloudflare) Prepare for WorkerEntrypoint by JPeer264 in #19742
  • (core) Fix flaky metric sequence number test by nicohrubec in #19754
  • (deps) Bump tedious from 18.6.1 to 19.2.1 by dependabot in #19786
  • (deps-dev) Bump file-type from 20.5.0 to 21.3.1 by dependabot in #19748
  • (e2e) Add MFE e2e test using vite-plugin-federation by chargome in #19778
  • (lint) Rule adjustments and fix warnings by logaretm in #19612
  • (nestjs) Move event instrumentation unit tests to separate file by nicohrubec in #19738
  • (nextjs) Add vercel queue tests to next-16 by chargome in #19798
  • (skills) Add skill-creator and update managed agent skills by chargome in #19713
  • Add oxlint migration commits to blame ignore by logaretm in #19784
  • Bump oxlint and oxfmt by logaretm in #19771
  • Clean up lint and format script names by logaretm in #19719
  • Add oxlint typescript program suppression to workspace settings by logaretm in #19692
  • Auto changes made from "yarn fix" by JPeer264 in #19710

🤖 This preview updates automatically when you update the PR.

@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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment thread.craft.yml Outdated
Enable additional terser compress and mangle options that safely reduce
the size of CDN bundle .min.js files:
- compress.passes: 5 (multi-pass finds more dead code)
- compress.ecma: 2020 (allows modern syntax: nullish coalescing, optional chaining)
- compress.toplevel: true (better variable inlining within the IIFE)
- compress.unsafe_arrows: true (function → arrow where this is unused, ~1.3KB raw)
- compress.unsafe_methods: true ({ m: function(){} } → { m(){} })
- compress.unsafe_comps/unsafe_math/pure_getters: safe algebraic opts
- mangle.toplevel: true (mangle top-level names inside IIFE scope)
Also adds 'sW' to the mangle reserved list (used by a follow-up change that
shortens the sentryWrapped function name for frame stripping).
These options only affect CDN .min.js bundles, not npm ESM/CJS output.
Saves ~300 bytes gzipped on the base browser bundle.
Co-Authored-By: Claude claude@anthropic.com
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 3bc0473 to 05a894eCompareMarch 19, 2026 14:37
This prevents the terser mangle option from mangling the 'Sentry' name,
and avoids a terser bug where our top-level 'var Sentry=' gets stripped.
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 05a894e to 9ae982fCompareMarch 19, 2026 16:20
@billyvg
billyvg removed request for a teamMarch 24, 2026 20:03
@Lms24

Lms24 commented Apr 9, 2026

Copy link
Copy Markdown
Member

Going to close this as the breakage with terser settings is too high

@Lms24Lms24 closed this Apr 9, 2026
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.

3 participants

@HazAT@Lms24@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

perf(build): Optimize terser minifier config for CDN bundles - #19852

Closed
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config
Closed

perf(build): Optimize terser minifier config for CDN bundles#19852
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config

Conversation

@HazAT

Copy link
Copy Markdown
Member

Summary

Enable additional terser compress and mangle options that safely reduce CDN .min.js bundle sizes. Saves ~300 bytes gzipped on the base browser bundle.

Changes

OptionEffect
compress.passes: 5Multi-pass optimization finds more dead code
compress.ecma: 2020Allows modern syntax in output (nullish coalescing, optional chaining)
compress.toplevel: trueBetter variable inlining within the IIFE wrapper
compress.unsafe_arrows: trueConverts function to => where this is unused (~1.3KB raw)
compress.unsafe_methods: trueShorthand method syntax { m(){} }
compress.unsafe_comps / unsafe_math / pure_gettersSafe algebraic optimizations
mangle.toplevel: trueMangle top-level variable names inside IIFE scope

These options only affect CDN .min.js bundles, not npm ESM/CJS output. The unsafe_* options are safe for our codebase because the CDN bundles run in browser contexts where the assumptions hold.

Also pre-reserves sW in the mangle list for a follow-up change.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.64 kBaddedadded
@sentry/browser - with treeshaking flags24.14 kBaddedadded
@sentry/browser (incl. Tracing)42.62 kBaddedadded
@sentry/browser (incl. Tracing, Profiling)47.28 kBaddedadded
@sentry/browser (incl. Tracing, Replay)81.42 kBaddedadded
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags71 kBaddedadded
@sentry/browser (incl. Tracing, Replay with Canvas)86.12 kBaddedadded
@sentry/browser (incl. Tracing, Replay, Feedback)98.37 kBaddedadded
@sentry/browser (incl. Feedback)42.45 kBaddedadded
@sentry/browser (incl. sendFeedback)30.31 kBaddedadded
@sentry/browser (incl. FeedbackAsync)35.36 kBaddedadded
@sentry/browser (incl. Metrics)26.92 kBaddedadded
@sentry/browser (incl. Logs)27.07 kBaddedadded
@sentry/browser (incl. Metrics & Logs)27.74 kBaddedadded
@sentry/react27.39 kBaddedadded
@sentry/react (incl. Tracing)44.95 kBaddedadded
@sentry/vue30.08 kBaddedadded
@sentry/vue (incl. Tracing)44.48 kBaddedadded
@sentry/svelte25.66 kBaddedadded
CDN Bundle28.1 kBaddedadded
CDN Bundle (incl. Tracing)43.18 kBaddedadded
CDN Bundle (incl. Logs, Metrics)28.95 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics)44.06 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics)67.88 kBaddedadded
CDN Bundle (incl. Tracing, Replay)79.92 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.83 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback)85.46 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.39 kBaddedadded
CDN Bundle - uncompressed81.02 kBaddedadded
CDN Bundle (incl. Tracing) - uncompressed126.58 kBaddedadded
CDN Bundle (incl. Logs, Metrics) - uncompressed83.84 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed129.4 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed206.15 kBaddedadded
CDN Bundle (incl. Tracing, Replay) - uncompressed242.17 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed244.99 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed254.94 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed257.76 kBaddedadded
@sentry/nextjs (client)47.37 kBaddedadded
@sentry/sveltekit (client)43.07 kBaddedadded
@sentry/node-core56.24 kBaddedadded
@sentry/node173.06 kBaddedadded
@sentry/node - without tracing96.25 kBaddedadded
@sentry/aws-serverless113.25 kBaddedadded

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,205--added
GET With Sentry1,66418%-added
GET With Sentry (error only)5,86264%-added
POST Baseline1,202--added
POST With Sentry59650%-added
POST With Sentry (error only)1,05488%-added
MYSQL Baseline3,254--added
MYSQL With Sentry49315%-added
MYSQL With Sentry (error only)2,67482%-added

@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 56e885a to 3bc0473CompareMarch 19, 2026 14:31
@isaacs
isaacs requested review from a team as code ownersMarch 19, 2026 14:31
@github-actions

github-actionsBot commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump yauzl from 3.2.0 to 3.2.1 by dependabot in #19809
  • Bump mysql2 from 3.14.4 to 3.19.1 by dependabot in #19787
  • Bump OpenTelemetry dependencies by andreiborza in #19682
  • Bump hono from 4.12.5 to 4.12.7 by dependabot in #19747
  • Bump simple-git from 3.30.0 to 3.33.0 by dependabot in #19744

Nestjs

  • Instrument @nestjs/bullmq by nicohrubec in #19759
  • Use more specific span origins for NestJS guards, pipes, interceptors, and exception filters by nicohrubec in #19751
  • Instrument @nestjs/schedule decorators by nicohrubec in #19735

Node

  • Avoid OTEL instrumentation for outgoing requests on Node 22+ by mydea in #17355
  • Expose headersToSpanAttributes option on nativeNodeFetchIntegration by andreiborza in #19770

Other

  • (astro) Add Astro 6 support by Lms24 in #19745
  • (browser/cloudflare) Export conversation id from browser and cloudflare runtimes by nicohrubec in #19820
  • (core) Add sentry.timestamp.sequence attribute for timestamp tie-breaking by logaretm in #19421
  • (nextjs) Vercel queue instrumentation by chargome in #19799

Bug Fixes 🐛

Core

  • Fallback to sendDefaultPii setting in langchain and langgraph in non-node environments by nicohrubec in #19813
  • Align Vercel embedding spans with semantic conventions by nicohrubec in #19795
  • Improve Vercel AI SDK instrumentation attributes by RulaKhaled in #19717

Nextjs

  • Strip sourceMappingURL comments after deleting source maps in turbopack builds by chargome in #19814
  • Log correct lastEventId when error is thrown in component render by s1gr1d in #19764

Other

  • (browser) Skip browserTracingIntegration setup for bot user agents by chargome in #19708
  • (cloudflare) Recreate client when previous one was disposed by JPeer264 in #19727
  • (hono) Allow passing env and fix type issues by s1gr1d in #19825
  • (nestjs) Fork isolation scope in @nestjs/event-emitter instrumentation by nicohrubec in #19725
  • (nuxt) Upload client source maps by s1gr1d in #19805
  • (profiling-node) Fix NODE_VERSION rendered as [object Object] in warning by logaretm in #19788

Documentation 📚

New Release

  • Document sdkName for craft by s1gr1d in #19736
  • Update docs based on new Craft flow by s1gr1d in #19731

Other

  • (hono) Document usage without "*" by s1gr1d in #19756

Internal Changes 🔧

  • (agents) Be more explicit on linting and formatting by chargome in #19803
  • (astro,cloudflare) Add an E2E test for Astro 6 on Cloudflare by JPeer264 in #19781
  • (browser) Add simulated mfe integration test by chargome in #19768
  • (build) Optimize terser minifier config for CDN bundles by HazAT in #19852
  • (cloudflare) Prepare for WorkerEntrypoint by JPeer264 in #19742
  • (core) Fix flaky metric sequence number test by nicohrubec in #19754
  • (deps) Bump tedious from 18.6.1 to 19.2.1 by dependabot in #19786
  • (deps-dev) Bump file-type from 20.5.0 to 21.3.1 by dependabot in #19748
  • (e2e) Add MFE e2e test using vite-plugin-federation by chargome in #19778
  • (lint) Rule adjustments and fix warnings by logaretm in #19612
  • (nestjs) Move event instrumentation unit tests to separate file by nicohrubec in #19738
  • (nextjs) Add vercel queue tests to next-16 by chargome in #19798
  • (skills) Add skill-creator and update managed agent skills by chargome in #19713
  • Add oxlint migration commits to blame ignore by logaretm in #19784
  • Bump oxlint and oxfmt by logaretm in #19771
  • Clean up lint and format script names by logaretm in #19719
  • Add oxlint typescript program suppression to workspace settings by logaretm in #19692
  • Auto changes made from "yarn fix" by JPeer264 in #19710

🤖 This preview updates automatically when you update the PR.

@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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment thread.craft.yml Outdated
Enable additional terser compress and mangle options that safely reduce
the size of CDN bundle .min.js files:
- compress.passes: 5 (multi-pass finds more dead code)
- compress.ecma: 2020 (allows modern syntax: nullish coalescing, optional chaining)
- compress.toplevel: true (better variable inlining within the IIFE)
- compress.unsafe_arrows: true (function → arrow where this is unused, ~1.3KB raw)
- compress.unsafe_methods: true ({ m: function(){} } → { m(){} })
- compress.unsafe_comps/unsafe_math/pure_getters: safe algebraic opts
- mangle.toplevel: true (mangle top-level names inside IIFE scope)
Also adds 'sW' to the mangle reserved list (used by a follow-up change that
shortens the sentryWrapped function name for frame stripping).
These options only affect CDN .min.js bundles, not npm ESM/CJS output.
Saves ~300 bytes gzipped on the base browser bundle.
Co-Authored-By: Claude claude@anthropic.com
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 3bc0473 to 05a894eCompareMarch 19, 2026 14:37
This prevents the terser mangle option from mangling the 'Sentry' name,
and avoids a terser bug where our top-level 'var Sentry=' gets stripped.
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 05a894e to 9ae982fCompareMarch 19, 2026 16:20
@billyvg
billyvg removed request for a teamMarch 24, 2026 20:03
@Lms24

Lms24 commented Apr 9, 2026

Copy link
Copy Markdown
Member

Going to close this as the breakage with terser settings is too high

@Lms24Lms24 closed this Apr 9, 2026
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.

3 participants

@HazAT@Lms24@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

perf(build): Optimize terser minifier config for CDN bundles - #19852

Closed
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config
Closed

perf(build): Optimize terser minifier config for CDN bundles#19852
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config

Conversation

@HazAT

Copy link
Copy Markdown
Member

Summary

Enable additional terser compress and mangle options that safely reduce CDN .min.js bundle sizes. Saves ~300 bytes gzipped on the base browser bundle.

Changes

OptionEffect
compress.passes: 5Multi-pass optimization finds more dead code
compress.ecma: 2020Allows modern syntax in output (nullish coalescing, optional chaining)
compress.toplevel: trueBetter variable inlining within the IIFE wrapper
compress.unsafe_arrows: trueConverts function to => where this is unused (~1.3KB raw)
compress.unsafe_methods: trueShorthand method syntax { m(){} }
compress.unsafe_comps / unsafe_math / pure_gettersSafe algebraic optimizations
mangle.toplevel: trueMangle top-level variable names inside IIFE scope

These options only affect CDN .min.js bundles, not npm ESM/CJS output. The unsafe_* options are safe for our codebase because the CDN bundles run in browser contexts where the assumptions hold.

Also pre-reserves sW in the mangle list for a follow-up change.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.64 kBaddedadded
@sentry/browser - with treeshaking flags24.14 kBaddedadded
@sentry/browser (incl. Tracing)42.62 kBaddedadded
@sentry/browser (incl. Tracing, Profiling)47.28 kBaddedadded
@sentry/browser (incl. Tracing, Replay)81.42 kBaddedadded
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags71 kBaddedadded
@sentry/browser (incl. Tracing, Replay with Canvas)86.12 kBaddedadded
@sentry/browser (incl. Tracing, Replay, Feedback)98.37 kBaddedadded
@sentry/browser (incl. Feedback)42.45 kBaddedadded
@sentry/browser (incl. sendFeedback)30.31 kBaddedadded
@sentry/browser (incl. FeedbackAsync)35.36 kBaddedadded
@sentry/browser (incl. Metrics)26.92 kBaddedadded
@sentry/browser (incl. Logs)27.07 kBaddedadded
@sentry/browser (incl. Metrics & Logs)27.74 kBaddedadded
@sentry/react27.39 kBaddedadded
@sentry/react (incl. Tracing)44.95 kBaddedadded
@sentry/vue30.08 kBaddedadded
@sentry/vue (incl. Tracing)44.48 kBaddedadded
@sentry/svelte25.66 kBaddedadded
CDN Bundle28.1 kBaddedadded
CDN Bundle (incl. Tracing)43.18 kBaddedadded
CDN Bundle (incl. Logs, Metrics)28.95 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics)44.06 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics)67.88 kBaddedadded
CDN Bundle (incl. Tracing, Replay)79.92 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.83 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback)85.46 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.39 kBaddedadded
CDN Bundle - uncompressed81.02 kBaddedadded
CDN Bundle (incl. Tracing) - uncompressed126.58 kBaddedadded
CDN Bundle (incl. Logs, Metrics) - uncompressed83.84 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed129.4 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed206.15 kBaddedadded
CDN Bundle (incl. Tracing, Replay) - uncompressed242.17 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed244.99 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed254.94 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed257.76 kBaddedadded
@sentry/nextjs (client)47.37 kBaddedadded
@sentry/sveltekit (client)43.07 kBaddedadded
@sentry/node-core56.24 kBaddedadded
@sentry/node173.06 kBaddedadded
@sentry/node - without tracing96.25 kBaddedadded
@sentry/aws-serverless113.25 kBaddedadded

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,205--added
GET With Sentry1,66418%-added
GET With Sentry (error only)5,86264%-added
POST Baseline1,202--added
POST With Sentry59650%-added
POST With Sentry (error only)1,05488%-added
MYSQL Baseline3,254--added
MYSQL With Sentry49315%-added
MYSQL With Sentry (error only)2,67482%-added

@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 56e885a to 3bc0473CompareMarch 19, 2026 14:31
@isaacs
isaacs requested review from a team as code ownersMarch 19, 2026 14:31
@github-actions

github-actionsBot commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump yauzl from 3.2.0 to 3.2.1 by dependabot in #19809
  • Bump mysql2 from 3.14.4 to 3.19.1 by dependabot in #19787
  • Bump OpenTelemetry dependencies by andreiborza in #19682
  • Bump hono from 4.12.5 to 4.12.7 by dependabot in #19747
  • Bump simple-git from 3.30.0 to 3.33.0 by dependabot in #19744

Nestjs

  • Instrument @nestjs/bullmq by nicohrubec in #19759
  • Use more specific span origins for NestJS guards, pipes, interceptors, and exception filters by nicohrubec in #19751
  • Instrument @nestjs/schedule decorators by nicohrubec in #19735

Node

  • Avoid OTEL instrumentation for outgoing requests on Node 22+ by mydea in #17355
  • Expose headersToSpanAttributes option on nativeNodeFetchIntegration by andreiborza in #19770

Other

  • (astro) Add Astro 6 support by Lms24 in #19745
  • (browser/cloudflare) Export conversation id from browser and cloudflare runtimes by nicohrubec in #19820
  • (core) Add sentry.timestamp.sequence attribute for timestamp tie-breaking by logaretm in #19421
  • (nextjs) Vercel queue instrumentation by chargome in #19799

Bug Fixes 🐛

Core

  • Fallback to sendDefaultPii setting in langchain and langgraph in non-node environments by nicohrubec in #19813
  • Align Vercel embedding spans with semantic conventions by nicohrubec in #19795
  • Improve Vercel AI SDK instrumentation attributes by RulaKhaled in #19717

Nextjs

  • Strip sourceMappingURL comments after deleting source maps in turbopack builds by chargome in #19814
  • Log correct lastEventId when error is thrown in component render by s1gr1d in #19764

Other

  • (browser) Skip browserTracingIntegration setup for bot user agents by chargome in #19708
  • (cloudflare) Recreate client when previous one was disposed by JPeer264 in #19727
  • (hono) Allow passing env and fix type issues by s1gr1d in #19825
  • (nestjs) Fork isolation scope in @nestjs/event-emitter instrumentation by nicohrubec in #19725
  • (nuxt) Upload client source maps by s1gr1d in #19805
  • (profiling-node) Fix NODE_VERSION rendered as [object Object] in warning by logaretm in #19788

Documentation 📚

New Release

  • Document sdkName for craft by s1gr1d in #19736
  • Update docs based on new Craft flow by s1gr1d in #19731

Other

  • (hono) Document usage without "*" by s1gr1d in #19756

Internal Changes 🔧

  • (agents) Be more explicit on linting and formatting by chargome in #19803
  • (astro,cloudflare) Add an E2E test for Astro 6 on Cloudflare by JPeer264 in #19781
  • (browser) Add simulated mfe integration test by chargome in #19768
  • (build) Optimize terser minifier config for CDN bundles by HazAT in #19852
  • (cloudflare) Prepare for WorkerEntrypoint by JPeer264 in #19742
  • (core) Fix flaky metric sequence number test by nicohrubec in #19754
  • (deps) Bump tedious from 18.6.1 to 19.2.1 by dependabot in #19786
  • (deps-dev) Bump file-type from 20.5.0 to 21.3.1 by dependabot in #19748
  • (e2e) Add MFE e2e test using vite-plugin-federation by chargome in #19778
  • (lint) Rule adjustments and fix warnings by logaretm in #19612
  • (nestjs) Move event instrumentation unit tests to separate file by nicohrubec in #19738
  • (nextjs) Add vercel queue tests to next-16 by chargome in #19798
  • (skills) Add skill-creator and update managed agent skills by chargome in #19713
  • Add oxlint migration commits to blame ignore by logaretm in #19784
  • Bump oxlint and oxfmt by logaretm in #19771
  • Clean up lint and format script names by logaretm in #19719
  • Add oxlint typescript program suppression to workspace settings by logaretm in #19692
  • Auto changes made from "yarn fix" by JPeer264 in #19710

🤖 This preview updates automatically when you update the PR.

@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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment thread.craft.yml Outdated
Enable additional terser compress and mangle options that safely reduce
the size of CDN bundle .min.js files:
- compress.passes: 5 (multi-pass finds more dead code)
- compress.ecma: 2020 (allows modern syntax: nullish coalescing, optional chaining)
- compress.toplevel: true (better variable inlining within the IIFE)
- compress.unsafe_arrows: true (function → arrow where this is unused, ~1.3KB raw)
- compress.unsafe_methods: true ({ m: function(){} } → { m(){} })
- compress.unsafe_comps/unsafe_math/pure_getters: safe algebraic opts
- mangle.toplevel: true (mangle top-level names inside IIFE scope)
Also adds 'sW' to the mangle reserved list (used by a follow-up change that
shortens the sentryWrapped function name for frame stripping).
These options only affect CDN .min.js bundles, not npm ESM/CJS output.
Saves ~300 bytes gzipped on the base browser bundle.
Co-Authored-By: Claude claude@anthropic.com
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 3bc0473 to 05a894eCompareMarch 19, 2026 14:37
This prevents the terser mangle option from mangling the 'Sentry' name,
and avoids a terser bug where our top-level 'var Sentry=' gets stripped.
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 05a894e to 9ae982fCompareMarch 19, 2026 16:20
@billyvg
billyvg removed request for a teamMarch 24, 2026 20:03
@Lms24

Lms24 commented Apr 9, 2026

Copy link
Copy Markdown
Member

Going to close this as the breakage with terser settings is too high

@Lms24Lms24 closed this Apr 9, 2026
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.

3 participants

@HazAT@Lms24@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

perf(build): Optimize terser minifier config for CDN bundles - #19852

Closed
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config
Closed

perf(build): Optimize terser minifier config for CDN bundles#19852
HazAT wants to merge 2 commits into
autoresearch/browser-bundle-size-2026-03-17from
bundle-size/terser-config

Conversation

@HazAT

Copy link
Copy Markdown
Member

Summary

Enable additional terser compress and mangle options that safely reduce CDN .min.js bundle sizes. Saves ~300 bytes gzipped on the base browser bundle.

Changes

OptionEffect
compress.passes: 5Multi-pass optimization finds more dead code
compress.ecma: 2020Allows modern syntax in output (nullish coalescing, optional chaining)
compress.toplevel: trueBetter variable inlining within the IIFE wrapper
compress.unsafe_arrows: trueConverts function to => where this is unused (~1.3KB raw)
compress.unsafe_methods: trueShorthand method syntax { m(){} }
compress.unsafe_comps / unsafe_math / pure_gettersSafe algebraic optimizations
mangle.toplevel: trueMangle top-level variable names inside IIFE scope

These options only affect CDN .min.js bundles, not npm ESM/CJS output. The unsafe_* options are safe for our codebase because the CDN bundles run in browser contexts where the assumptions hold.

Also pre-reserves sW in the mangle list for a follow-up change.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
Comment threaddev-packages/rollup-utils/plugins/bundlePlugins.mjs Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.64 kBaddedadded
@sentry/browser - with treeshaking flags24.14 kBaddedadded
@sentry/browser (incl. Tracing)42.62 kBaddedadded
@sentry/browser (incl. Tracing, Profiling)47.28 kBaddedadded
@sentry/browser (incl. Tracing, Replay)81.42 kBaddedadded
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags71 kBaddedadded
@sentry/browser (incl. Tracing, Replay with Canvas)86.12 kBaddedadded
@sentry/browser (incl. Tracing, Replay, Feedback)98.37 kBaddedadded
@sentry/browser (incl. Feedback)42.45 kBaddedadded
@sentry/browser (incl. sendFeedback)30.31 kBaddedadded
@sentry/browser (incl. FeedbackAsync)35.36 kBaddedadded
@sentry/browser (incl. Metrics)26.92 kBaddedadded
@sentry/browser (incl. Logs)27.07 kBaddedadded
@sentry/browser (incl. Metrics & Logs)27.74 kBaddedadded
@sentry/react27.39 kBaddedadded
@sentry/react (incl. Tracing)44.95 kBaddedadded
@sentry/vue30.08 kBaddedadded
@sentry/vue (incl. Tracing)44.48 kBaddedadded
@sentry/svelte25.66 kBaddedadded
CDN Bundle28.1 kBaddedadded
CDN Bundle (incl. Tracing)43.18 kBaddedadded
CDN Bundle (incl. Logs, Metrics)28.95 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics)44.06 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics)67.88 kBaddedadded
CDN Bundle (incl. Tracing, Replay)79.92 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.83 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback)85.46 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.39 kBaddedadded
CDN Bundle - uncompressed81.02 kBaddedadded
CDN Bundle (incl. Tracing) - uncompressed126.58 kBaddedadded
CDN Bundle (incl. Logs, Metrics) - uncompressed83.84 kBaddedadded
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed129.4 kBaddedadded
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed206.15 kBaddedadded
CDN Bundle (incl. Tracing, Replay) - uncompressed242.17 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed244.99 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed254.94 kBaddedadded
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed257.76 kBaddedadded
@sentry/nextjs (client)47.37 kBaddedadded
@sentry/sveltekit (client)43.07 kBaddedadded
@sentry/node-core56.24 kBaddedadded
@sentry/node173.06 kBaddedadded
@sentry/node - without tracing96.25 kBaddedadded
@sentry/aws-serverless113.25 kBaddedadded

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,205--added
GET With Sentry1,66418%-added
GET With Sentry (error only)5,86264%-added
POST Baseline1,202--added
POST With Sentry59650%-added
POST With Sentry (error only)1,05488%-added
MYSQL Baseline3,254--added
MYSQL With Sentry49315%-added
MYSQL With Sentry (error only)2,67482%-added

@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 56e885a to 3bc0473CompareMarch 19, 2026 14:31
@isaacs
isaacs requested review from a team as code ownersMarch 19, 2026 14:31
@github-actions

github-actionsBot commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump yauzl from 3.2.0 to 3.2.1 by dependabot in #19809
  • Bump mysql2 from 3.14.4 to 3.19.1 by dependabot in #19787
  • Bump OpenTelemetry dependencies by andreiborza in #19682
  • Bump hono from 4.12.5 to 4.12.7 by dependabot in #19747
  • Bump simple-git from 3.30.0 to 3.33.0 by dependabot in #19744

Nestjs

  • Instrument @nestjs/bullmq by nicohrubec in #19759
  • Use more specific span origins for NestJS guards, pipes, interceptors, and exception filters by nicohrubec in #19751
  • Instrument @nestjs/schedule decorators by nicohrubec in #19735

Node

  • Avoid OTEL instrumentation for outgoing requests on Node 22+ by mydea in #17355
  • Expose headersToSpanAttributes option on nativeNodeFetchIntegration by andreiborza in #19770

Other

  • (astro) Add Astro 6 support by Lms24 in #19745
  • (browser/cloudflare) Export conversation id from browser and cloudflare runtimes by nicohrubec in #19820
  • (core) Add sentry.timestamp.sequence attribute for timestamp tie-breaking by logaretm in #19421
  • (nextjs) Vercel queue instrumentation by chargome in #19799

Bug Fixes 🐛

Core

  • Fallback to sendDefaultPii setting in langchain and langgraph in non-node environments by nicohrubec in #19813
  • Align Vercel embedding spans with semantic conventions by nicohrubec in #19795
  • Improve Vercel AI SDK instrumentation attributes by RulaKhaled in #19717

Nextjs

  • Strip sourceMappingURL comments after deleting source maps in turbopack builds by chargome in #19814
  • Log correct lastEventId when error is thrown in component render by s1gr1d in #19764

Other

  • (browser) Skip browserTracingIntegration setup for bot user agents by chargome in #19708
  • (cloudflare) Recreate client when previous one was disposed by JPeer264 in #19727
  • (hono) Allow passing env and fix type issues by s1gr1d in #19825
  • (nestjs) Fork isolation scope in @nestjs/event-emitter instrumentation by nicohrubec in #19725
  • (nuxt) Upload client source maps by s1gr1d in #19805
  • (profiling-node) Fix NODE_VERSION rendered as [object Object] in warning by logaretm in #19788

Documentation 📚

New Release

  • Document sdkName for craft by s1gr1d in #19736
  • Update docs based on new Craft flow by s1gr1d in #19731

Other

  • (hono) Document usage without "*" by s1gr1d in #19756

Internal Changes 🔧

  • (agents) Be more explicit on linting and formatting by chargome in #19803
  • (astro,cloudflare) Add an E2E test for Astro 6 on Cloudflare by JPeer264 in #19781
  • (browser) Add simulated mfe integration test by chargome in #19768
  • (build) Optimize terser minifier config for CDN bundles by HazAT in #19852
  • (cloudflare) Prepare for WorkerEntrypoint by JPeer264 in #19742
  • (core) Fix flaky metric sequence number test by nicohrubec in #19754
  • (deps) Bump tedious from 18.6.1 to 19.2.1 by dependabot in #19786
  • (deps-dev) Bump file-type from 20.5.0 to 21.3.1 by dependabot in #19748
  • (e2e) Add MFE e2e test using vite-plugin-federation by chargome in #19778
  • (lint) Rule adjustments and fix warnings by logaretm in #19612
  • (nestjs) Move event instrumentation unit tests to separate file by nicohrubec in #19738
  • (nextjs) Add vercel queue tests to next-16 by chargome in #19798
  • (skills) Add skill-creator and update managed agent skills by chargome in #19713
  • Add oxlint migration commits to blame ignore by logaretm in #19784
  • Bump oxlint and oxfmt by logaretm in #19771
  • Clean up lint and format script names by logaretm in #19719
  • Add oxlint typescript program suppression to workspace settings by logaretm in #19692
  • Auto changes made from "yarn fix" by JPeer264 in #19710

🤖 This preview updates automatically when you update the PR.

@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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment thread.craft.yml Outdated
Enable additional terser compress and mangle options that safely reduce
the size of CDN bundle .min.js files:
- compress.passes: 5 (multi-pass finds more dead code)
- compress.ecma: 2020 (allows modern syntax: nullish coalescing, optional chaining)
- compress.toplevel: true (better variable inlining within the IIFE)
- compress.unsafe_arrows: true (function → arrow where this is unused, ~1.3KB raw)
- compress.unsafe_methods: true ({ m: function(){} } → { m(){} })
- compress.unsafe_comps/unsafe_math/pure_getters: safe algebraic opts
- mangle.toplevel: true (mangle top-level names inside IIFE scope)
Also adds 'sW' to the mangle reserved list (used by a follow-up change that
shortens the sentryWrapped function name for frame stripping).
These options only affect CDN .min.js bundles, not npm ESM/CJS output.
Saves ~300 bytes gzipped on the base browser bundle.
Co-Authored-By: Claude claude@anthropic.com
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 3bc0473 to 05a894eCompareMarch 19, 2026 14:37
This prevents the terser mangle option from mangling the 'Sentry' name,
and avoids a terser bug where our top-level 'var Sentry=' gets stripped.
@isaacs
isaacsforce-pushed the bundle-size/terser-config branch from 05a894e to 9ae982fCompareMarch 19, 2026 16:20
@billyvg
billyvg removed request for a teamMarch 24, 2026 20:03
@Lms24

Lms24 commented Apr 9, 2026

Copy link
Copy Markdown
Member

Going to close this as the breakage with terser settings is too high

@Lms24Lms24 closed this Apr 9, 2026
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.

3 participants

@HazAT@Lms24@isaacs