@danieljvdm/dev-kit 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/package.json +1 -1
- package/skill-sources.jsonc +2 -33
- package/skill-sources.lock.json +15 -117
- package/skills/animate/LICENSE +21 -0
- package/skills/animate/NOTICE +10 -0
- package/skills/animate/SKILL.md +34 -0
- package/skills/animate/references/gestures.md +27 -0
- package/skills/animate/references/glossary.md +136 -0
- package/skills/animate/references/implementation.md +22 -0
- package/skills/animate/references/opportunities.md +18 -0
- package/skills/animate/references/principles.md +48 -0
- package/skills/animate/references/review.md +19 -0
- package/skills/cloudflare-workers/LICENSE +202 -0
- package/skills/cloudflare-workers/NOTICE +9 -0
- package/skills/cloudflare-workers/SKILL.md +26 -0
- package/skills/cloudflare-workers/references/durable-objects.md +68 -0
- package/skills/cloudflare-workers/references/sandbox.md +48 -0
- package/skills/cloudflare-workers/references/workers.md +63 -0
- package/skills/cloudflare-workers/references/wrangler.md +56 -0
- package/skills/design-ui/LICENSE +21 -0
- package/skills/design-ui/NOTICE +8 -0
- package/skills/design-ui/SKILL.md +29 -0
- package/skills/design-ui/references/appearance.md +22 -0
- package/skills/design-ui/references/components.md +33 -0
- package/skills/design-ui/references/exploration.md +50 -0
- package/skills/design-ui/references/libraries.md +39 -0
- package/skills/design-ui/references/themes.md +23 -0
- package/skills/dev-kit/SKILL.md +19 -38
- package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
- package/skills/dev-kit/references/skills.md +2 -2
- package/skills/effect-development/SKILL.md +27 -0
- package/skills/effect-development/agents/openai.yaml +4 -0
- package/skills/effect-development/references/api/index.md +32 -0
- package/skills/effect-development/references/api/schema-codecs.md +15 -0
- package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
- package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
- package/skills/effect-development/references/atom/index.md +40 -0
- package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
- package/skills/effect-development/references/cli/index.md +39 -0
- package/skills/effect-development/references/setup.md +15 -0
- package/skills/open-pull-request/SKILL.md +10 -70
- package/skills/open-pull-request/references/evidence.md +22 -0
- package/skills/open-pull-request/references/explanation.md +21 -0
- package/skills/open-pull-request/references/publication.md +21 -0
- package/skills/sentry/LICENSE +202 -0
- package/skills/sentry/LICENSE-UPSTREAM +21 -0
- package/skills/sentry/NOTICE +14 -0
- package/skills/sentry/SKILL.md +33 -0
- package/skills/sentry/references/alert-payloads.md +105 -0
- package/skills/sentry/references/alerts.md +17 -0
- package/skills/sentry/references/artifacts.md +25 -0
- package/skills/sentry/references/auth-token.md +65 -0
- package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
- package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
- package/skills/sentry/references/concepts/crons.md +50 -0
- package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
- package/skills/sentry/references/concepts/errors.md +40 -0
- package/skills/sentry/references/concepts/logging.md +85 -0
- package/skills/sentry/references/concepts/metrics.md +49 -0
- package/skills/sentry/references/concepts/monitors.md +78 -0
- package/skills/sentry/references/concepts/profiling.md +38 -0
- package/skills/sentry/references/concepts/reduce-volume.md +49 -0
- package/skills/sentry/references/concepts/releases.md +43 -0
- package/skills/sentry/references/concepts/session-replay.md +35 -0
- package/skills/sentry/references/concepts/tracing.md +54 -0
- package/skills/sentry/references/concepts/user-feedback.md +36 -0
- package/skills/sentry/references/debug-artifacts/android.md +68 -0
- package/skills/sentry/references/debug-artifacts/apple.md +96 -0
- package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
- package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
- package/skills/sentry/references/debug-artifacts/index.md +75 -0
- package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
- package/skills/sentry/references/debug-artifacts/matching.md +73 -0
- package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
- package/skills/sentry/references/first-error-setup.md +25 -0
- package/skills/sentry/references/instrumentation.md +30 -0
- package/skills/sentry/references/issues.md +32 -0
- package/skills/sentry/references/new-project.md +17 -0
- package/skills/sentry/references/otel-exporter.md +30 -0
- package/skills/sentry/references/release-workflow.md +31 -0
- package/skills/sentry/references/releases/ci-pipeline.md +214 -0
- package/skills/sentry/references/releases/index.md +93 -0
- package/skills/sentry/references/releases/suspect-commits.md +155 -0
- package/skills/sentry/references/releases/tagging.md +131 -0
- package/skills/sentry/references/releases/troubleshooting.md +67 -0
- package/skills/sentry/references/sdks/android/crons.md +305 -0
- package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
- package/skills/sentry/references/sdks/android/index.md +748 -0
- package/skills/sentry/references/sdks/android/integrations.md +48 -0
- package/skills/sentry/references/sdks/android/logging.md +374 -0
- package/skills/sentry/references/sdks/android/metrics.md +288 -0
- package/skills/sentry/references/sdks/android/profiling.md +397 -0
- package/skills/sentry/references/sdks/android/session-replay.md +406 -0
- package/skills/sentry/references/sdks/android/tracing.md +861 -0
- package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
- package/skills/sentry/references/sdks/browser/index.md +714 -0
- package/skills/sentry/references/sdks/browser/logging.md +315 -0
- package/skills/sentry/references/sdks/browser/profiling.md +236 -0
- package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
- package/skills/sentry/references/sdks/browser/tracing.md +561 -0
- package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
- package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
- package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
- package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
- package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
- package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
- package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
- package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
- package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
- package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
- package/skills/sentry/references/sdks/cocoa/index.md +497 -0
- package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
- package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
- package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
- package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
- package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
- package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
- package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
- package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
- package/skills/sentry/references/sdks/dotnet/index.md +614 -0
- package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
- package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
- package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
- package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
- package/skills/sentry/references/sdks/elixir/crons.md +371 -0
- package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
- package/skills/sentry/references/sdks/elixir/index.md +383 -0
- package/skills/sentry/references/sdks/elixir/logging.md +239 -0
- package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
- package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
- package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
- package/skills/sentry/references/sdks/flutter/index.md +728 -0
- package/skills/sentry/references/sdks/flutter/logging.md +387 -0
- package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
- package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
- package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
- package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
- package/skills/sentry/references/sdks/go/crons.md +270 -0
- package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
- package/skills/sentry/references/sdks/go/index.md +324 -0
- package/skills/sentry/references/sdks/go/logging.md +354 -0
- package/skills/sentry/references/sdks/go/metrics.md +273 -0
- package/skills/sentry/references/sdks/go/profiling.md +46 -0
- package/skills/sentry/references/sdks/go/tracing.md +366 -0
- package/skills/sentry/references/sdks/index.md +41 -0
- package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
- package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
- package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
- package/skills/sentry/references/sdks/nestjs/index.md +699 -0
- package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
- package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
- package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
- package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
- package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
- package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
- package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
- package/skills/sentry/references/sdks/nextjs/index.md +491 -0
- package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
- package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
- package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
- package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
- package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
- package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
- package/skills/sentry/references/sdks/node/crons.md +432 -0
- package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
- package/skills/sentry/references/sdks/node/index.md +942 -0
- package/skills/sentry/references/sdks/node/logging.md +380 -0
- package/skills/sentry/references/sdks/node/metrics.md +278 -0
- package/skills/sentry/references/sdks/node/profiling.md +373 -0
- package/skills/sentry/references/sdks/node/tracing.md +878 -0
- package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
- package/skills/sentry/references/sdks/php/crons.md +265 -0
- package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
- package/skills/sentry/references/sdks/php/index.md +362 -0
- package/skills/sentry/references/sdks/php/laravel.md +542 -0
- package/skills/sentry/references/sdks/php/logging.md +242 -0
- package/skills/sentry/references/sdks/php/metrics.md +193 -0
- package/skills/sentry/references/sdks/php/profiling.md +115 -0
- package/skills/sentry/references/sdks/php/symfony.md +552 -0
- package/skills/sentry/references/sdks/php/tracing.md +516 -0
- package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
- package/skills/sentry/references/sdks/python/crons.md +218 -0
- package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
- package/skills/sentry/references/sdks/python/index.md +361 -0
- package/skills/sentry/references/sdks/python/logging.md +234 -0
- package/skills/sentry/references/sdks/python/metrics.md +154 -0
- package/skills/sentry/references/sdks/python/profiling.md +120 -0
- package/skills/sentry/references/sdks/python/tracing.md +364 -0
- package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
- package/skills/sentry/references/sdks/react/index.md +492 -0
- package/skills/sentry/references/sdks/react/logging.md +364 -0
- package/skills/sentry/references/sdks/react/profiling.md +322 -0
- package/skills/sentry/references/sdks/react/react-features.md +1272 -0
- package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
- package/skills/sentry/references/sdks/react/tracing.md +1415 -0
- package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
- package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
- package/skills/sentry/references/sdks/react-native/index.md +1030 -0
- package/skills/sentry/references/sdks/react-native/logging.md +444 -0
- package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
- package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
- package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
- package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
- package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
- package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
- package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
- package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
- package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
- package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
- package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
- package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
- package/skills/sentry/references/sdks/ruby/crons.md +184 -0
- package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
- package/skills/sentry/references/sdks/ruby/index.md +297 -0
- package/skills/sentry/references/sdks/ruby/logging.md +168 -0
- package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
- package/skills/sentry/references/sdks/ruby/migration.md +321 -0
- package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
- package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
- package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
- package/skills/sentry/references/sdks/svelte/index.md +467 -0
- package/skills/sentry/references/sdks/svelte/logging.md +344 -0
- package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
- package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
- package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
- package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
- package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
- package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
- package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
- package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
- package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
- package/skills/sentry/references/search-query-language.md +226 -0
- package/skills/sentry/references/semantics/angular.md +7 -0
- package/skills/sentry/references/semantics/app.md +28 -0
- package/skills/sentry/references/semantics/art.md +17 -0
- package/skills/sentry/references/semantics/aws.md +43 -0
- package/skills/sentry/references/semantics/browser.md +34 -0
- package/skills/sentry/references/semantics/cache.md +12 -0
- package/skills/sentry/references/semantics/client.md +8 -0
- package/skills/sentry/references/semantics/cloud.md +12 -0
- package/skills/sentry/references/semantics/cloudflare.md +23 -0
- package/skills/sentry/references/semantics/code.md +11 -0
- package/skills/sentry/references/semantics/culture.md +11 -0
- package/skills/sentry/references/semantics/db.md +21 -0
- package/skills/sentry/references/semantics/device.md +43 -0
- package/skills/sentry/references/semantics/error.md +7 -0
- package/skills/sentry/references/semantics/event.md +8 -0
- package/skills/sentry/references/semantics/exception.md +10 -0
- package/skills/sentry/references/semantics/faas.md +19 -0
- package/skills/sentry/references/semantics/file.md +8 -0
- package/skills/sentry/references/semantics/flag.md +7 -0
- package/skills/sentry/references/semantics/gcp.md +16 -0
- package/skills/sentry/references/semantics/gen_ai.md +53 -0
- package/skills/sentry/references/semantics/general.md +11 -0
- package/skills/sentry/references/semantics/graphql.md +9 -0
- package/skills/sentry/references/semantics/grpc.md +19 -0
- package/skills/sentry/references/semantics/http.md +34 -0
- package/skills/sentry/references/semantics/index.md +63 -0
- package/skills/sentry/references/semantics/jsonrpc.md +8 -0
- package/skills/sentry/references/semantics/jvm.md +12 -0
- package/skills/sentry/references/semantics/koa.md +7 -0
- package/skills/sentry/references/semantics/logger.md +7 -0
- package/skills/sentry/references/semantics/mcp.md +37 -0
- package/skills/sentry/references/semantics/mdc.md +7 -0
- package/skills/sentry/references/semantics/messaging.md +23 -0
- package/skills/sentry/references/semantics/middleware.md +7 -0
- package/skills/sentry/references/semantics/navigation.md +9 -0
- package/skills/sentry/references/semantics/nel.md +11 -0
- package/skills/sentry/references/semantics/network.md +17 -0
- package/skills/sentry/references/semantics/os.md +15 -0
- package/skills/sentry/references/semantics/otel.md +10 -0
- package/skills/sentry/references/semantics/params.md +7 -0
- package/skills/sentry/references/semantics/process.md +14 -0
- package/skills/sentry/references/semantics/react.md +7 -0
- package/skills/sentry/references/semantics/remix.md +7 -0
- package/skills/sentry/references/semantics/resource.md +7 -0
- package/skills/sentry/references/semantics/rpc.md +10 -0
- package/skills/sentry/references/semantics/score.md +10 -0
- package/skills/sentry/references/semantics/sentry.md +69 -0
- package/skills/sentry/references/semantics/server.md +8 -0
- package/skills/sentry/references/semantics/service.md +8 -0
- package/skills/sentry/references/semantics/session.md +7 -0
- package/skills/sentry/references/semantics/state.md +7 -0
- package/skills/sentry/references/semantics/thread.md +8 -0
- package/skills/sentry/references/semantics/timber.md +7 -0
- package/skills/sentry/references/semantics/trpc.md +8 -0
- package/skills/sentry/references/semantics/ui.md +18 -0
- package/skills/sentry/references/semantics/url.md +15 -0
- package/skills/sentry/references/semantics/user.md +17 -0
- package/skills/sentry/references/semantics/user_agent.md +7 -0
- package/skills/sentry/references/semantics/vercel.md +42 -0
- package/skills/sentry/references/setup-verification.md +39 -0
- package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
- package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
- package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
- package/skills/sentry/references/snapshots/index.md +19 -0
- package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
- package/skills/sentry/references/snapshots/snapshots.md +123 -0
- package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
- package/skills/testing/LICENSE +21 -0
- package/skills/testing/NOTICE +7 -0
- package/skills/testing/SKILL.md +13 -19
- package/skills/testing/agents/openai.yaml +1 -2
- package/skills/testing/references/selection.md +23 -0
- package/skills/testing/references/tdd.md +19 -0
- package/skills/testing/references/test-design.md +17 -0
- package/src/catalog.ts +1 -7
- package/skills/build-effect-apis/SKILL.md +0 -81
- package/skills/build-effect-apis/agents/openai.yaml +0 -4
- package/skills/build-effect-clis/SKILL.md +0 -92
- package/skills/build-effect-clis/agents/openai.yaml +0 -4
- package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
- package/skills/effect-atom-state/SKILL.md +0 -97
- package/skills/effect-atom-state/agents/openai.yaml +0 -4
- package/skills/effect-ts/SKILL.md +0 -35
- package/skills/effect-ts/agents/openai.yaml +0 -4
- /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
- /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
# Tracing — Sentry Browser SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/browser` ≥7.0.0\
|
|
4
|
+
> `enableInp` defaults to `true` as of SDK ≥8.0.0 (was `false` in 7.x)\
|
|
5
|
+
> `enableLongAnimationFrame` available since SDK ≥8.18.0\
|
|
6
|
+
> `inheritOrSampleWith` in `tracesSampler` available since SDK ≥9.0.0\
|
|
7
|
+
> `profileSessionSampleRate` replaces `profilesSampleRate` as of SDK ≥10.27.0
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Minimal Setup
|
|
12
|
+
|
|
13
|
+
```javascript
|
|
14
|
+
import * as Sentry from "@sentry/browser";
|
|
15
|
+
|
|
16
|
+
Sentry.init({
|
|
17
|
+
dsn: "___PUBLIC_DSN___",
|
|
18
|
+
integrations: [Sentry.browserTracingIntegration()],
|
|
19
|
+
tracesSampleRate: 0.2, // Capture 20% of all transactions
|
|
20
|
+
});
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
> **Disabling tracing:** Omit **both** `tracesSampleRate` and `tracesSampler`. Setting
|
|
24
|
+
> `tracesSampleRate: 0` does not disable tracing — it simply never sends any traces.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## `browserTracingIntegration()` — Configuration Reference
|
|
29
|
+
|
|
30
|
+
All options are passed as a single object to `browserTracingIntegration()`.
|
|
31
|
+
|
|
32
|
+
### Page Load & Navigation
|
|
33
|
+
|
|
34
|
+
| Option | Type | Default | Description |
|
|
35
|
+
| ------------------------ | ------------------------------------------- | ------------- | ----------------------------------------------------------------------------------- |
|
|
36
|
+
| `instrumentPageLoad` | `boolean` | `true` | Create a `pageload` root span on initial page load |
|
|
37
|
+
| `instrumentNavigation` | `boolean` | `true` | Create a `navigation` root span on client-side history changes |
|
|
38
|
+
| `markBackgroundSpan` | `boolean` | `true` | Mark `pageload`/`navigation` spans as cancelled when the tab goes to the background |
|
|
39
|
+
| `enableReportPageLoaded` | `boolean` | `false` | Enable the `Sentry.reportPageLoaded()` utility function _(SDK ≥10.13.0)_ |
|
|
40
|
+
| `linkPreviousTrace` | `"in-memory" \| "session-storage" \| false` | `"in-memory"` | Controls how new `pageload` spans link to the previous trace across navigations |
|
|
41
|
+
|
|
42
|
+
### HTTP Request Instrumentation
|
|
43
|
+
|
|
44
|
+
| Option | Type | Default | Description |
|
|
45
|
+
| ---------------------------- | --------------------------------------- | ------- | --------------------------------------------------------------------------- |
|
|
46
|
+
| `traceFetch` | `boolean` | `true` | Automatically create spans for outgoing `fetch` requests |
|
|
47
|
+
| `traceXHR` | `boolean` | `true` | Automatically create spans for outgoing `XMLHttpRequest` calls |
|
|
48
|
+
| `enableHTTPTimings` | `boolean` | `true` | Attach detailed HTTP timing data via the Performance Resource Timing API |
|
|
49
|
+
| `shouldCreateSpanForRequest` | `(url: string) => boolean` | — | Predicate to exclude specific requests from tracing (e.g., health checks) |
|
|
50
|
+
| `onRequestSpanStart` | `(span, fetchInput, fetchInit) => void` | — | Callback invoked when a span is started for an outgoing `fetch`/XHR request |
|
|
51
|
+
|
|
52
|
+
### Interaction & Long Task Instrumentation
|
|
53
|
+
|
|
54
|
+
| Option | Type | Default | Description |
|
|
55
|
+
| -------------------------- | --------- | ---------------------------- | ----------------------------------------------------------------------------- |
|
|
56
|
+
| `enableInp` | `boolean` | `true` (8.x+), `false` (7.x) | Capture Interaction to Next Paint (INP) events |
|
|
57
|
+
| `interactionsSampleRate` | `number` | `1.0` | Additional sampling rate for INP spans (applied on top of `tracesSampleRate`) |
|
|
58
|
+
| `enableLongTask` | `boolean` | `true` | Create spans for main-thread blocking tasks exceeding 50 ms |
|
|
59
|
+
| `enableLongAnimationFrame` | `boolean` | `true` | Create spans for long animation frames _(SDK ≥8.18.0)_ |
|
|
60
|
+
|
|
61
|
+
### Timing & Timeouts
|
|
62
|
+
|
|
63
|
+
| Option | Type | Default | Description |
|
|
64
|
+
| ------------------ | -------- | ------- | ---------------------------------------------------------------------------- |
|
|
65
|
+
| `idleTimeout` | `number` | `1000` | Milliseconds of inactivity before `pageload`/`navigation` span auto-finishes |
|
|
66
|
+
| `finalTimeout` | `number` | `30000` | Maximum lifespan (ms) for any root span regardless of activity |
|
|
67
|
+
| `childSpanTimeout` | `number` | `15000` | Maximum time (ms) a child span may remain open before the parent can finish |
|
|
68
|
+
|
|
69
|
+
### Propagation & Filtering
|
|
70
|
+
|
|
71
|
+
| Option | Type | Default | Description |
|
|
72
|
+
| --------------------------- | --------------------------------------- | ---------------------- | ----------------------------------------------------------------------------------------- |
|
|
73
|
+
| `tracePropagationTargets` | `Array<string \| RegExp>` | `["localhost", /^\//]` | Outgoing requests whose URL matches an entry receive `sentry-trace` and `baggage` headers |
|
|
74
|
+
| `beforeStartSpan` | `(context: SpanContext) => SpanContext` | — | Modify or enrich a span’s context before it is created |
|
|
75
|
+
| `ignoreResourceSpans` | `Array<string>` | `[]` | Suppress automatic spans by operation category (e.g., `"resource.css"`) |
|
|
76
|
+
| `ignorePerformanceApiSpans` | `Array<string \| RegExp>` | `[]` | Suppress spans from `performance.mark()` / `performance.measure()` calls |
|
|
77
|
+
|
|
78
|
+
### Full Configuration Example
|
|
79
|
+
|
|
80
|
+
```javascript
|
|
81
|
+
import * as Sentry from "@sentry/browser";
|
|
82
|
+
|
|
83
|
+
Sentry.init({
|
|
84
|
+
dsn: "___PUBLIC_DSN___",
|
|
85
|
+
integrations: [
|
|
86
|
+
Sentry.browserTracingIntegration({
|
|
87
|
+
// Page / navigation spans
|
|
88
|
+
instrumentPageLoad: true,
|
|
89
|
+
instrumentNavigation: true,
|
|
90
|
+
markBackgroundSpan: true,
|
|
91
|
+
linkPreviousTrace: "in-memory",
|
|
92
|
+
|
|
93
|
+
// HTTP spans
|
|
94
|
+
traceFetch: true,
|
|
95
|
+
traceXHR: true,
|
|
96
|
+
enableHTTPTimings: true,
|
|
97
|
+
shouldCreateSpanForRequest: (url) => !url.match(/\/health\/?$/),
|
|
98
|
+
|
|
99
|
+
// INP / long-task spans
|
|
100
|
+
enableInp: true,
|
|
101
|
+
interactionsSampleRate: 0.5,
|
|
102
|
+
enableLongTask: true,
|
|
103
|
+
enableLongAnimationFrame: true,
|
|
104
|
+
|
|
105
|
+
// Timeouts
|
|
106
|
+
idleTimeout: 1000,
|
|
107
|
+
finalTimeout: 30000,
|
|
108
|
+
childSpanTimeout: 15000,
|
|
109
|
+
|
|
110
|
+
// Propagation
|
|
111
|
+
tracePropagationTargets: ["localhost", /^https:\/\/api\.yourapp\.com/],
|
|
112
|
+
|
|
113
|
+
// Normalise dynamic URL segments in transaction names
|
|
114
|
+
beforeStartSpan: (context) => ({
|
|
115
|
+
...context,
|
|
116
|
+
name: location.pathname.replace(/\/[a-f0-9]{32}/g, "/<hash>").replace(/\/\d+/g, "/<id>"),
|
|
117
|
+
}),
|
|
118
|
+
}),
|
|
119
|
+
],
|
|
120
|
+
tracesSampleRate: 1.0,
|
|
121
|
+
});
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Automatic Instrumentation
|
|
127
|
+
|
|
128
|
+
When `browserTracingIntegration()` is active, the following are captured automatically:
|
|
129
|
+
|
|
130
|
+
### Page Loads
|
|
131
|
+
|
|
132
|
+
A root `pageload` span covers the full page-load lifecycle.
|
|
133
|
+
Child spans are attached for:
|
|
134
|
+
|
|
135
|
+
- **Web Vitals**: LCP, CLS, TTFB
|
|
136
|
+
- **Resource loads**: CSS, JS, images, fonts (each as a `resource.*` child span)
|
|
137
|
+
- **HTTP requests** made during load
|
|
138
|
+
|
|
139
|
+
### Navigations (SPA Route Changes)
|
|
140
|
+
|
|
141
|
+
Each client-side route change (via the History API) produces a new `navigation` root
|
|
142
|
+
span, along with any HTTP requests and web vitals captured during that navigation.
|
|
143
|
+
|
|
144
|
+
### Fetch / XHR Requests
|
|
145
|
+
|
|
146
|
+
Every outgoing `fetch` or `XMLHttpRequest` produces an `http.client` child span
|
|
147
|
+
containing: request duration, HTTP status code, and URL.
|
|
148
|
+
|
|
149
|
+
Use `shouldCreateSpanForRequest` to exclude URLs you don’t want traced:
|
|
150
|
+
|
|
151
|
+
```javascript
|
|
152
|
+
Sentry.browserTracingIntegration({
|
|
153
|
+
shouldCreateSpanForRequest: (url) => {
|
|
154
|
+
return !url.includes("/health") && !url.includes("/metrics");
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Web Vitals
|
|
160
|
+
|
|
161
|
+
| Metric | Description | Auto-captured |
|
|
162
|
+
| ----------------------------------- | ----------------------------- | ------------- |
|
|
163
|
+
| **LCP** — Largest Contentful Paint | Perceived load speed | ✅ Always |
|
|
164
|
+
| **CLS** — Cumulative Layout Shift | Visual stability | ✅ Always |
|
|
165
|
+
| **TTFB** — Time to First Byte | Server responsiveness | ✅ Always |
|
|
166
|
+
| **INP** — Interaction to Next Paint | Responsiveness to user inputs | ✅ (SDK ≥8.x) |
|
|
167
|
+
|
|
168
|
+
### Long Tasks
|
|
169
|
+
|
|
170
|
+
Main-thread tasks blocking the browser for more than **50 ms** are recorded as
|
|
171
|
+
`ui.long-task` child spans.
|
|
172
|
+
|
|
173
|
+
### Custom Router Integration
|
|
174
|
+
|
|
175
|
+
To integrate with a router that manages its own history, disable automatic span creation
|
|
176
|
+
and call the low-level helpers directly:
|
|
177
|
+
|
|
178
|
+
```javascript
|
|
179
|
+
const client = Sentry.init({
|
|
180
|
+
integrations: [
|
|
181
|
+
Sentry.browserTracingIntegration({
|
|
182
|
+
instrumentNavigation: false,
|
|
183
|
+
instrumentPageLoad: false,
|
|
184
|
+
}),
|
|
185
|
+
],
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
// Initial page load
|
|
189
|
+
let pageLoadSpan = Sentry.startBrowserTracingPageLoadSpan(client, {
|
|
190
|
+
name: window.location.pathname,
|
|
191
|
+
attributes: {
|
|
192
|
+
[Sentry.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "url",
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
myRouter.on("routeChange", (route) => {
|
|
197
|
+
if (pageLoadSpan) {
|
|
198
|
+
// Update the name of the in-flight page-load span
|
|
199
|
+
pageLoadSpan.updateName(route.name);
|
|
200
|
+
pageLoadSpan.setAttribute(Sentry.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, "route");
|
|
201
|
+
pageLoadSpan = undefined;
|
|
202
|
+
} else {
|
|
203
|
+
// Start a navigation span for subsequent route changes
|
|
204
|
+
Sentry.startBrowserTracingNavigationSpan(client, {
|
|
205
|
+
op: "navigation",
|
|
206
|
+
name: route.name,
|
|
207
|
+
attributes: {
|
|
208
|
+
[Sentry.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "route",
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Custom Spans
|
|
218
|
+
|
|
219
|
+
Three functions are available for manual instrumentation.
|
|
220
|
+
All accept the same options object.
|
|
221
|
+
|
|
222
|
+
### `startSpan(options, callback)` — Auto-ending Span (Recommended)
|
|
223
|
+
|
|
224
|
+
Creates an active span that ends automatically when the callback returns (sync or
|
|
225
|
+
async).
|
|
226
|
+
|
|
227
|
+
```javascript
|
|
228
|
+
// Synchronous
|
|
229
|
+
const result = Sentry.startSpan({ name: "process-checkout", op: "function" }, () => {
|
|
230
|
+
return processCheckoutData();
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
// Asynchronous
|
|
234
|
+
const data = await Sentry.startSpan({ name: "fetch-user-profile", op: "http.client" }, async () => {
|
|
235
|
+
const response = await fetch("/api/user/profile");
|
|
236
|
+
return response.json();
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
// With attributes
|
|
240
|
+
const result = await Sentry.startSpan(
|
|
241
|
+
{
|
|
242
|
+
name: "query-products",
|
|
243
|
+
op: "db",
|
|
244
|
+
attributes: {
|
|
245
|
+
"db.system": "postgresql",
|
|
246
|
+
"db.table": "products",
|
|
247
|
+
"db.query.count": 50,
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
() => db.query("SELECT * FROM products LIMIT 50"),
|
|
251
|
+
);
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
### `startSpanManual(options, callback)` — Manually-ended Active Span
|
|
257
|
+
|
|
258
|
+
Creates an active span that must be ended explicitly by calling `span.end()`. Use when
|
|
259
|
+
the span’s end is decoupled from the callback’s return (e.g., event-driven code).
|
|
260
|
+
|
|
261
|
+
```javascript
|
|
262
|
+
function attachUploadTracing(input) {
|
|
263
|
+
input.addEventListener("change", (event) => {
|
|
264
|
+
Sentry.startSpanManual({ name: "file-upload", op: "file.upload" }, (span) => {
|
|
265
|
+
const file = event.target.files[0];
|
|
266
|
+
span.setAttribute("file.size", file.size);
|
|
267
|
+
span.setAttribute("file.type", file.type);
|
|
268
|
+
|
|
269
|
+
const upload = uploadFile(file);
|
|
270
|
+
upload.on("complete", () => {
|
|
271
|
+
span.setStatus({ code: 1 }); // ok
|
|
272
|
+
span.end();
|
|
273
|
+
});
|
|
274
|
+
upload.on("error", (err) => {
|
|
275
|
+
span.setStatus({ code: 2 }); // error
|
|
276
|
+
span.end();
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
### `startInactiveSpan(options)` — Manually-ended Inactive Span
|
|
286
|
+
|
|
287
|
+
Creates a span that is **not** set as the active span.
|
|
288
|
+
Useful for parallel work sharing a common parent.
|
|
289
|
+
|
|
290
|
+
```javascript
|
|
291
|
+
const span1 = Sentry.startInactiveSpan({ name: "task-a", op: "function" });
|
|
292
|
+
const span2 = Sentry.startInactiveSpan({ name: "task-b", op: "function" });
|
|
293
|
+
|
|
294
|
+
await Promise.all([workA(), workB()]);
|
|
295
|
+
|
|
296
|
+
span1.end();
|
|
297
|
+
span2.end();
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
### Span Options
|
|
303
|
+
|
|
304
|
+
| Option | Type | Required | Description |
|
|
305
|
+
| ------------------ | ---------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------- |
|
|
306
|
+
| `name` | `string` | ✅ | Human-readable identifier shown in the Sentry UI |
|
|
307
|
+
| `op` | `string` | — | Operation type for categorization (see Operation Types below) |
|
|
308
|
+
| `startTime` | `number` | — | Custom Unix timestamp (seconds, sub-second precision) for span start |
|
|
309
|
+
| `attributes` | `Record<string, string \| number \| boolean \| string[] \| number[] \| boolean[]>` | — | Key/value metadata attached to the span |
|
|
310
|
+
| `parentSpan` | `Span` | — | Explicitly designate a parent span instead of using the active span |
|
|
311
|
+
| `onlyIfParent` | `boolean` | — | If `true`, the span is a no-op when there is no active parent span |
|
|
312
|
+
| `forceTransaction` | `boolean` | — | Force this span to appear as a root transaction in the Sentry UI |
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
### Operation Types
|
|
317
|
+
|
|
318
|
+
Use well-known `op` values so the Sentry UI presents appropriate icons and filtering:
|
|
319
|
+
|
|
320
|
+
| `op` Value | Use Case |
|
|
321
|
+
| ----------------- | ------------------------------ |
|
|
322
|
+
| `http.client` | Outgoing HTTP requests |
|
|
323
|
+
| `db` | Database queries |
|
|
324
|
+
| `db.system` | Database system operations |
|
|
325
|
+
| `ui.click` | User click interactions |
|
|
326
|
+
| `ui.long-task` | Long-running main-thread tasks |
|
|
327
|
+
| `navigation` | Client-side route transitions |
|
|
328
|
+
| `pageload` | Initial full page load |
|
|
329
|
+
| `resource.script` | Script resource load |
|
|
330
|
+
| `resource.css` | CSS resource load |
|
|
331
|
+
| `resource.img` | Image resource load |
|
|
332
|
+
| `function` | Generic function calls |
|
|
333
|
+
| `file.upload` | File upload operations |
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
### Working with Span Attributes and Status
|
|
338
|
+
|
|
339
|
+
```javascript
|
|
340
|
+
// Set attributes at creation
|
|
341
|
+
Sentry.startSpan(
|
|
342
|
+
{
|
|
343
|
+
name: "process-payment",
|
|
344
|
+
attributes: { "payment.provider": "stripe", "payment.amount": 9999 },
|
|
345
|
+
},
|
|
346
|
+
() => processPayment(),
|
|
347
|
+
);
|
|
348
|
+
|
|
349
|
+
// On an existing span
|
|
350
|
+
const span = Sentry.getActiveSpan();
|
|
351
|
+
if (span) {
|
|
352
|
+
span.setAttribute("key", "value");
|
|
353
|
+
span.setAttributes({ key1: "val1", key2: 42 });
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// Update span name (SDK ≥8.47.0)
|
|
357
|
+
Sentry.updateSpanName(span, "New Name");
|
|
358
|
+
|
|
359
|
+
// Set span status
|
|
360
|
+
span.setStatus({ code: 1 }); // 0 = unknown, 1 = ok, 2 = error
|
|
361
|
+
span.setHttpStatus(404);
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## Distributed Tracing
|
|
367
|
+
|
|
368
|
+
Distributed tracing connects browser activity to backend requests, enabling a single
|
|
369
|
+
timeline across services.
|
|
370
|
+
|
|
371
|
+
### How It Works
|
|
372
|
+
|
|
373
|
+
Sentry propagates two HTTP headers on every outgoing request matching
|
|
374
|
+
`tracePropagationTargets`:
|
|
375
|
+
|
|
376
|
+
| Header | Contents |
|
|
377
|
+
| -------------- | ------------------------------------------------------------------------ |
|
|
378
|
+
| `sentry-trace` | Trace ID, parent span ID, and sampling decision flag |
|
|
379
|
+
| `baggage` | Dynamic sampling context: trace ID, public key, sample rate, environment |
|
|
380
|
+
|
|
381
|
+
> **CORS:** Both headers must be added to your server’s `Access-Control-Allow-Headers` —
|
|
382
|
+
> otherwise browsers or gateways will strip them.
|
|
383
|
+
|
|
384
|
+
### `tracePropagationTargets` Configuration
|
|
385
|
+
|
|
386
|
+
```javascript
|
|
387
|
+
Sentry.init({
|
|
388
|
+
dsn: "___PUBLIC_DSN___",
|
|
389
|
+
integrations: [Sentry.browserTracingIntegration()],
|
|
390
|
+
tracesSampleRate: 1.0,
|
|
391
|
+
tracePropagationTargets: ["localhost", /^https:\/\/api\.yourapp\.com/],
|
|
392
|
+
});
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
**Rules:**
|
|
396
|
+
|
|
397
|
+
- String entries = exact substring match against the full URL
|
|
398
|
+
- RegExp entries = tested against the full URL (including scheme and port)
|
|
399
|
+
- Port numbers matter — a service on port 8080 requires a separate entry
|
|
400
|
+
- Set to `[]` to **disable** header propagation entirely
|
|
401
|
+
|
|
402
|
+
**Common patterns:**
|
|
403
|
+
|
|
404
|
+
```javascript
|
|
405
|
+
// E-commerce with multiple backend services
|
|
406
|
+
tracePropagationTargets: ["https://api.myecommerce.com", "https://auth.myecommerce.com"];
|
|
407
|
+
|
|
408
|
+
// Mixed absolute URLs and relative API paths
|
|
409
|
+
tracePropagationTargets: ["https://api.myapp.com", /^\/api\//];
|
|
410
|
+
|
|
411
|
+
// Disable all header propagation
|
|
412
|
+
tracePropagationTargets: [];
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
417
|
+
### Continuing a Server-Initiated Trace
|
|
418
|
+
|
|
419
|
+
When your server renders the HTML, emit the current trace context as `<meta>` tags.
|
|
420
|
+
The `browserTracingIntegration` reads them automatically on page load and continues the
|
|
421
|
+
same trace:
|
|
422
|
+
|
|
423
|
+
```html
|
|
424
|
+
<meta name="sentry-trace" content="12345678901234567890123456789012-1234567890123456-1" />
|
|
425
|
+
<meta
|
|
426
|
+
name="baggage"
|
|
427
|
+
content="sentry-trace_id=12345678901234567890123456789012,sentry-environment=production,sentry-sample_rate=1"
|
|
428
|
+
/>
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
### Manual Trace Propagation (Non-HTTP Channels)
|
|
434
|
+
|
|
435
|
+
For WebSockets, message queues, or any non-HTTP transport:
|
|
436
|
+
|
|
437
|
+
```javascript
|
|
438
|
+
const traceData = Sentry.getTraceData();
|
|
439
|
+
|
|
440
|
+
webSocket.send(
|
|
441
|
+
JSON.stringify({
|
|
442
|
+
payload: myData,
|
|
443
|
+
metadata: {
|
|
444
|
+
sentryTrace: traceData["sentry-trace"],
|
|
445
|
+
baggage: traceData["baggage"],
|
|
446
|
+
},
|
|
447
|
+
}),
|
|
448
|
+
);
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
## Sampling
|
|
454
|
+
|
|
455
|
+
### `tracesSampleRate` — Uniform Sampling
|
|
456
|
+
|
|
457
|
+
```javascript
|
|
458
|
+
Sentry.init({
|
|
459
|
+
tracesSampleRate: 0.2, // Sample 20% of transactions
|
|
460
|
+
});
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
- Range: `0` – `1` (random, uniform percentage)
|
|
464
|
+
- `0` = send no traces (tracing is still “active”; omit both options to fully disable)
|
|
465
|
+
- `1` = send 100% of traces
|
|
466
|
+
|
|
467
|
+
### `tracesSampler` — Dynamic / Context-Aware Sampling
|
|
468
|
+
|
|
469
|
+
A function that receives a `SamplingContext` and returns a sample rate (`0`–`1`) or a
|
|
470
|
+
`boolean`.
|
|
471
|
+
|
|
472
|
+
```javascript
|
|
473
|
+
Sentry.init({
|
|
474
|
+
tracesSampler: ({ name, attributes, inheritOrSampleWith }) => {
|
|
475
|
+
// Never sample health checks
|
|
476
|
+
if (name.includes("healthcheck") || name.includes("/health")) return 0;
|
|
477
|
+
|
|
478
|
+
// Always sample authentication flows
|
|
479
|
+
if (name.includes("auth") || name.includes("login")) return 1;
|
|
480
|
+
|
|
481
|
+
// Sample checkout at high rate (business critical)
|
|
482
|
+
if (name.includes("checkout")) return 0.5;
|
|
483
|
+
|
|
484
|
+
// For everything else, inherit the parent's decision or default to 20%
|
|
485
|
+
return inheritOrSampleWith(0.2);
|
|
486
|
+
},
|
|
487
|
+
});
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### `SamplingContext` Properties
|
|
491
|
+
|
|
492
|
+
| Property | Type | Description |
|
|
493
|
+
| --------------------------- | ------------------------- | -------------------------------------------------------------------- |
|
|
494
|
+
| `name` | `string` | The span’s initial name |
|
|
495
|
+
| `attributes` | `Record<string, unknown>` | Initial span attributes |
|
|
496
|
+
| `parentSampled` | `boolean \| undefined` | Whether the parent span was sampled (`undefined` if no parent) |
|
|
497
|
+
| `parentSampleRate` | `number \| undefined` | The sample rate used by the incoming trace |
|
|
498
|
+
| `inheritOrSampleWith(rate)` | `function` | _(SDK ≥9)_ Returns `parentSampled` if defined, otherwise uses `rate` |
|
|
499
|
+
|
|
500
|
+
### Sampling Precedence
|
|
501
|
+
|
|
502
|
+
1. **`tracesSampler`** — highest priority (if defined)
|
|
503
|
+
2. **Parent sampling decision** — used when no sampler is defined but a parent trace
|
|
504
|
+
exists
|
|
505
|
+
3. **`tracesSampleRate`** — fallback uniform rate
|
|
506
|
+
|
|
507
|
+
### INP-Specific Sampling
|
|
508
|
+
|
|
509
|
+
`interactionsSampleRate` applies an **additional** multiplier on top of
|
|
510
|
+
`tracesSampleRate` for INP interaction spans:
|
|
511
|
+
|
|
512
|
+
```javascript
|
|
513
|
+
Sentry.init({
|
|
514
|
+
tracesSampleRate: 0.5,
|
|
515
|
+
integrations: [
|
|
516
|
+
Sentry.browserTracingIntegration({
|
|
517
|
+
enableInp: true,
|
|
518
|
+
interactionsSampleRate: 0.1, // Effective rate: 50% × 10% = 5% of interactions
|
|
519
|
+
}),
|
|
520
|
+
],
|
|
521
|
+
});
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
---
|
|
525
|
+
|
|
526
|
+
## Best Practices
|
|
527
|
+
|
|
528
|
+
- **Set `tracePropagationTargets` explicitly** — the default (`localhost` + `/`) is
|
|
529
|
+
rarely correct for production.
|
|
530
|
+
Define your API origins precisely.
|
|
531
|
+
- **Use `beforeStartSpan` to normalize transaction names** — avoid high cardinality from
|
|
532
|
+
dynamic URLs (`/users/123` → `/users/<id>`).
|
|
533
|
+
- **Use `shouldCreateSpanForRequest` to exclude noise** — skip health checks, analytics
|
|
534
|
+
pixels, and third-party beacons.
|
|
535
|
+
- **Prefer `startSpan` over `startInactiveSpan`** — the auto-ending behavior prevents
|
|
536
|
+
runaway spans.
|
|
537
|
+
- **Set `op` on custom spans** — the Sentry UI uses `op` for icons, grouping, and
|
|
538
|
+
performance charts.
|
|
539
|
+
- **Use `inheritOrSampleWith` in `tracesSampler`** — ensures sampling decisions are
|
|
540
|
+
deterministically propagated from parent to child traces.
|
|
541
|
+
- **Add CORS headers on your servers** — `sentry-trace` and `baggage` must be in
|
|
542
|
+
`Access-Control-Allow-Headers` and `Access-Control-Expose-Headers`.
|
|
543
|
+
- **Tune `idleTimeout` for your SPA** — if your navigation transitions are slow (>1s),
|
|
544
|
+
increase `idleTimeout` to avoid premature span termination.
|
|
545
|
+
|
|
546
|
+
---
|
|
547
|
+
|
|
548
|
+
## Troubleshooting
|
|
549
|
+
|
|
550
|
+
| Issue | Solution |
|
|
551
|
+
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
552
|
+
| Transactions not appearing in Sentry | Ensure `tracesSampleRate > 0` (or `tracesSampler` returns a value > 0). Check that `browserTracingIntegration()` is in the `integrations` array. |
|
|
553
|
+
| Missing `sentry-trace` / `baggage` headers on requests | Check `tracePropagationTargets` — the request URL must match an entry. Also verify CORS headers allow these. |
|
|
554
|
+
| Transaction names showing raw URLs with IDs | Use `beforeStartSpan` to normalize dynamic URL segments. |
|
|
555
|
+
| Distributed trace not connecting to backend | Ensure the backend SDK reads `sentry-trace` and `baggage` headers. Add them to `Access-Control-Allow-Headers`. |
|
|
556
|
+
| `pageload` span ends too early | Increase `idleTimeout` (default: 1000ms) or `finalTimeout` (default: 30000ms). |
|
|
557
|
+
| INP spans not appearing | Requires SDK ≥8.0.0 (enabled by default). In SDK 7.x set `enableInp: true` explicitly. |
|
|
558
|
+
| Too many transactions overwhelming quota | Use `tracesSampler` to sample high-volume routes at a lower rate. Drop health checks entirely (return `0`). |
|
|
559
|
+
| Parallel spans showing wrong parent | Use `startInactiveSpan` with explicit `parentSpan` option to control hierarchy. |
|
|
560
|
+
| `beforeSendTransaction` not called | Ensure you’re returning from `beforeSend` correctly — `beforeSendTransaction` is a separate hook for transactions only. |
|
|
561
|
+
| Long tasks not captured | Ensure `enableLongTask: true` (default). Long animation frames require SDK ≥8.18.0 and `enableLongAnimationFrame: true`. |
|