@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,127 @@
|
|
|
1
|
+
# Error Monitoring — Sentry React Router Framework SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/react-router` (beta)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Automatic and Manual Capture
|
|
8
|
+
|
|
9
|
+
| Area | Auto Captured? | Mechanism |
|
|
10
|
+
| ----------------------------- | -------------- | ------------------------------------------------------------- |
|
|
11
|
+
| Client-side framework errors | ✅ Yes | `HydratedRouter onError={Sentry.sentryOnError}` |
|
|
12
|
+
| Unhandled client exceptions | ✅ Yes | Browser global handlers from SDK init |
|
|
13
|
+
| Server request/render errors | ✅ Yes | `createSentryHandleRequest` + `createSentryHandleError` |
|
|
14
|
+
| Custom handled server errors | ❌ Not always | Call `Sentry.captureException` manually |
|
|
15
|
+
| Custom loader/action failures | ⚠️ Depends | Use `wrapServerLoader` / `wrapServerAction` or manual capture |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Client setup requirement
|
|
20
|
+
|
|
21
|
+
`entry.client.tsx` must include:
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import * as Sentry from "@sentry/react-router";
|
|
25
|
+
import { HydratedRouter } from "react-router/dom";
|
|
26
|
+
|
|
27
|
+
Sentry.init({
|
|
28
|
+
dsn: "___PUBLIC_DSN___",
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
hydrateRoot(document, <HydratedRouter onError={Sentry.sentryOnError} />);
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Without `sentryOnError`, framework-level client errors may be missed.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Server setup requirement
|
|
39
|
+
|
|
40
|
+
`entry.server.tsx`:
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
import * as Sentry from "@sentry/react-router";
|
|
44
|
+
import { createReadableStreamFromReadable } from "@react-router/node";
|
|
45
|
+
import { renderToPipeableStream } from "react-dom/server";
|
|
46
|
+
import { ServerRouter } from "react-router";
|
|
47
|
+
|
|
48
|
+
const handleRequest = Sentry.createSentryHandleRequest({
|
|
49
|
+
ServerRouter,
|
|
50
|
+
renderToPipeableStream,
|
|
51
|
+
createReadableStreamFromReadable,
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
export default handleRequest;
|
|
55
|
+
|
|
56
|
+
export const handleError = Sentry.createSentryHandleError({
|
|
57
|
+
logErrors: false,
|
|
58
|
+
});
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Manual capture in custom handlers
|
|
64
|
+
|
|
65
|
+
```tsx
|
|
66
|
+
import * as Sentry from "@sentry/react-router";
|
|
67
|
+
|
|
68
|
+
export function handleError(error: unknown, args: unknown) {
|
|
69
|
+
Sentry.captureException(error);
|
|
70
|
+
console.error(error);
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
For custom streaming request implementations, wrap your handler:
|
|
75
|
+
|
|
76
|
+
```tsx
|
|
77
|
+
import { wrapSentryHandleRequest } from "@sentry/react-router";
|
|
78
|
+
|
|
79
|
+
export default wrapSentryHandleRequest(customHandleRequest);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Loader/action wrappers
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
import * as Sentry from "@sentry/react-router";
|
|
88
|
+
|
|
89
|
+
export const loader = Sentry.wrapServerLoader(
|
|
90
|
+
{ name: "Load Data", description: "Loads route data" },
|
|
91
|
+
async () => {
|
|
92
|
+
// loader logic
|
|
93
|
+
},
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
export const action = Sentry.wrapServerAction(
|
|
97
|
+
{ name: "Submit Data", description: "Handles form submission" },
|
|
98
|
+
async () => {
|
|
99
|
+
// action logic
|
|
100
|
+
},
|
|
101
|
+
);
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Verification
|
|
107
|
+
|
|
108
|
+
Use a route loader that throws:
|
|
109
|
+
|
|
110
|
+
```tsx
|
|
111
|
+
export async function loader() {
|
|
112
|
+
throw new Error("My first Sentry error!");
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Open the route and verify the event appears in **Issues**.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Troubleshooting
|
|
121
|
+
|
|
122
|
+
| Issue | Solution |
|
|
123
|
+
| --------------------------------------- | ---------------------------------------------------------------------------------- |
|
|
124
|
+
| Client framework errors missing | Ensure `HydratedRouter` uses `onError={Sentry.sentryOnError}` |
|
|
125
|
+
| Server render/request errors missing | Verify both `createSentryHandleRequest` and `createSentryHandleError` are exported |
|
|
126
|
+
| Custom handlers not captured | Add explicit `captureException` calls |
|
|
127
|
+
| Error appears locally but not in Sentry | Check DSN, network restrictions, and `debug: true` output |
|
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
# Sentry React Router Framework SDK
|
|
2
|
+
|
|
3
|
+
Opinionated wizard that scans your React Router Framework project and guides you through
|
|
4
|
+
complete Sentry setup across client and server entry points.
|
|
5
|
+
|
|
6
|
+
> **Important:** This SDK is currently beta.
|
|
7
|
+
> For React Router non-framework/data/declarative mode (v5/v6/v7), use
|
|
8
|
+
> [`react`](../react/index.md) with `@sentry/react` integrations instead.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Phase 1: Detect
|
|
13
|
+
|
|
14
|
+
Run these commands to understand the project before making any recommendations:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Detect React Router Framework indicators and versions
|
|
18
|
+
cat package.json | grep -E '"react-router"|"@react-router/"|"react-router-dev"|"react-router-serve"'
|
|
19
|
+
|
|
20
|
+
# Detect Sentry package choice
|
|
21
|
+
cat package.json | grep -E '"@sentry/react-router"|"@sentry/react"|"@sentry/profiling-node"'
|
|
22
|
+
|
|
23
|
+
# Check entry point visibility and server instrumentation files
|
|
24
|
+
ls entry.client.tsx entry.server.tsx instrument.server.mjs react-router.config.ts vite.config.ts 2>/dev/null
|
|
25
|
+
|
|
26
|
+
# Check if React Router files are still hidden (framework mode helper command available)
|
|
27
|
+
cat package.json | grep -E '"reveal"|react-router'
|
|
28
|
+
|
|
29
|
+
# Detect runtime startup scripts and import strategy
|
|
30
|
+
cat package.json | grep -E '"dev"|"start"|NODE_OPTIONS|--import'
|
|
31
|
+
|
|
32
|
+
# Detect optional logging/profile-related dependencies
|
|
33
|
+
cat package.json | grep -E '"pino"|"winston"|"@sentry/profiling-node"'
|
|
34
|
+
|
|
35
|
+
# Detect companion backend directories
|
|
36
|
+
ls ../backend ../server ../api 2>/dev/null
|
|
37
|
+
cat ../go.mod ../requirements.txt ../Gemfile ../pom.xml 2>/dev/null | head -3
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**What to determine:**
|
|
41
|
+
|
|
42
|
+
| Question | Impact |
|
|
43
|
+
| ----------------------------------------------- | ------------------------------------------------------------------------------ |
|
|
44
|
+
| `@sentry/react-router` already installed? | Skip install and move to feature setup |
|
|
45
|
+
| Framework entry files exposed? | Need `npx react-router reveal` before manual config |
|
|
46
|
+
| Using `@sentry/react` instead? | This is likely non-framework routing; redirect to [`react`](../react/index.md) |
|
|
47
|
+
| `react-router.config.ts` + Vite config present? | Source map upload and build-end hook setup path |
|
|
48
|
+
| `NODE_OPTIONS --import` available? | Preferred server instrumentation startup path |
|
|
49
|
+
| `@sentry/profiling-node` desired/available? | Enable server profiling integration |
|
|
50
|
+
| Backend directory found? | Trigger Phase 4 cross-link suggestion |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Phase 2: Recommend
|
|
55
|
+
|
|
56
|
+
Present a concrete recommendation based on what you found.
|
|
57
|
+
Do not ask open-ended questions — lead with a proposal:
|
|
58
|
+
|
|
59
|
+
**Recommended (core coverage):**
|
|
60
|
+
|
|
61
|
+
- ✅ **Error Monitoring** — always; captures client and server errors with framework
|
|
62
|
+
hooks
|
|
63
|
+
- ✅ **Tracing** — recommended baseline in framework apps with client/server request flow
|
|
64
|
+
- ✅ **Session Replay** — recommended for user-facing applications
|
|
65
|
+
|
|
66
|
+
**Optional (enhanced observability):**
|
|
67
|
+
|
|
68
|
+
- ⚡ **Profiling** — server-side profiling with `@sentry/profiling-node`
|
|
69
|
+
- ⚡ **Logs** — structured `Sentry.logger.*` ingestion and correlation
|
|
70
|
+
- ⚡ **User Feedback** — in-app feedback widget/reporting flows
|
|
71
|
+
|
|
72
|
+
**Recommendation logic:**
|
|
73
|
+
|
|
74
|
+
| Feature | Recommend when … |
|
|
75
|
+
| ---------------- | ----------------------------------------------------------------------------- |
|
|
76
|
+
| Error Monitoring | **Always** — non-negotiable baseline |
|
|
77
|
+
| Tracing | **Usually yes** in framework apps; route and request timing is high-value |
|
|
78
|
+
| Session Replay | User-facing product or difficult UX debugging |
|
|
79
|
+
| Profiling | Server performance investigations needed; Node runtime compatibility verified |
|
|
80
|
+
| Logs | Team wants log-search and trace correlation in Sentry |
|
|
81
|
+
| User Feedback | Product/support teams need direct in-app issue reports |
|
|
82
|
+
|
|
83
|
+
Propose: _“I recommend Error Monitoring + Tracing + Session Replay first.
|
|
84
|
+
Want me to also enable Profiling, Logs, and User Feedback?”_
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Phase 3: Guide
|
|
89
|
+
|
|
90
|
+
### Option 1: Wizard (Recommended)
|
|
91
|
+
|
|
92
|
+
> **You need to run this yourself** — the wizard is interactive and may require browser
|
|
93
|
+
> login:
|
|
94
|
+
>
|
|
95
|
+
> ```bash
|
|
96
|
+
> npx @sentry/wizard@latest -i reactRouter
|
|
97
|
+
> ```
|
|
98
|
+
>
|
|
99
|
+
> It installs `@sentry/react-router`, exposes React Router entry files, creates
|
|
100
|
+
> instrumentation files, updates root error handling, configures source map upload, and
|
|
101
|
+
> adds verification examples.
|
|
102
|
+
>
|
|
103
|
+
> **Once it finishes, continue at [Verification](#verification).**
|
|
104
|
+
|
|
105
|
+
If the user skips wizard setup, continue with manual setup below.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### Option 2: Manual Setup
|
|
110
|
+
|
|
111
|
+
#### Install packages
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
npm install @sentry/react-router --save
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
If profiling is needed:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npm install @sentry/profiling-node --save
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
#### Expose framework entry files
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
npx react-router reveal
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
#### Configure client in `entry.client.tsx`
|
|
130
|
+
|
|
131
|
+
```tsx
|
|
132
|
+
import * as Sentry from "@sentry/react-router";
|
|
133
|
+
import { startTransition, StrictMode } from "react";
|
|
134
|
+
import { hydrateRoot } from "react-dom/client";
|
|
135
|
+
import { HydratedRouter } from "react-router/dom";
|
|
136
|
+
|
|
137
|
+
Sentry.init({
|
|
138
|
+
dsn: "___PUBLIC_DSN___",
|
|
139
|
+
dataCollection: {
|
|
140
|
+
// To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
|
|
141
|
+
// https://docs.sentry.io/platforms/javascript/guides/react-router/configuration/options/#dataCollection
|
|
142
|
+
// userInfo: false,
|
|
143
|
+
// httpBodies: [],
|
|
144
|
+
},
|
|
145
|
+
integrations: [
|
|
146
|
+
Sentry.reactRouterTracingIntegration(),
|
|
147
|
+
Sentry.replayIntegration(),
|
|
148
|
+
Sentry.feedbackIntegration({ colorScheme: "system" }),
|
|
149
|
+
],
|
|
150
|
+
enableLogs: true,
|
|
151
|
+
tracesSampleRate: 1.0,
|
|
152
|
+
tracePropagationTargets: [/^\//, /^https:\/\/yourserver\.io\/api/],
|
|
153
|
+
replaysSessionSampleRate: 0.1,
|
|
154
|
+
replaysOnErrorSampleRate: 1.0,
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
startTransition(() => {
|
|
158
|
+
hydrateRoot(
|
|
159
|
+
document,
|
|
160
|
+
<StrictMode>
|
|
161
|
+
<HydratedRouter onError={Sentry.sentryOnError} />
|
|
162
|
+
</StrictMode>,
|
|
163
|
+
);
|
|
164
|
+
});
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
#### Configure server in `instrument.server.mjs`
|
|
168
|
+
|
|
169
|
+
```javascript
|
|
170
|
+
import * as Sentry from "@sentry/react-router";
|
|
171
|
+
import { nodeProfilingIntegration } from "@sentry/profiling-node";
|
|
172
|
+
|
|
173
|
+
Sentry.init({
|
|
174
|
+
dsn: "___PUBLIC_DSN___",
|
|
175
|
+
dataCollection: {
|
|
176
|
+
// To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
|
|
177
|
+
// https://docs.sentry.io/platforms/javascript/guides/react-router/configuration/options/#dataCollection
|
|
178
|
+
// userInfo: false,
|
|
179
|
+
// httpBodies: [],
|
|
180
|
+
},
|
|
181
|
+
enableLogs: true,
|
|
182
|
+
integrations: [nodeProfilingIntegration()],
|
|
183
|
+
tracesSampleRate: 1.0,
|
|
184
|
+
profileSessionSampleRate: 1.0,
|
|
185
|
+
});
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
#### Wrap server handlers in `entry.server.tsx`
|
|
189
|
+
|
|
190
|
+
```tsx
|
|
191
|
+
import * as Sentry from "@sentry/react-router";
|
|
192
|
+
import { createReadableStreamFromReadable } from "@react-router/node";
|
|
193
|
+
import { renderToPipeableStream } from "react-dom/server";
|
|
194
|
+
import { ServerRouter } from "react-router";
|
|
195
|
+
|
|
196
|
+
const handleRequest = Sentry.createSentryHandleRequest({
|
|
197
|
+
ServerRouter,
|
|
198
|
+
renderToPipeableStream,
|
|
199
|
+
createReadableStreamFromReadable,
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
export default handleRequest;
|
|
203
|
+
|
|
204
|
+
export const handleError = Sentry.createSentryHandleError({
|
|
205
|
+
logErrors: false,
|
|
206
|
+
});
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
For custom server logic, use `wrapSentryHandleRequest`, `getMetaTagTransformer`, and
|
|
210
|
+
manual `Sentry.captureException` in your custom `handleError`.
|
|
211
|
+
|
|
212
|
+
#### Load server instrumentation on startup
|
|
213
|
+
|
|
214
|
+
Prefer `NODE_OPTIONS --import`:
|
|
215
|
+
|
|
216
|
+
```json
|
|
217
|
+
{
|
|
218
|
+
"scripts": {
|
|
219
|
+
"dev": "NODE_OPTIONS='--import ./instrument.server.mjs' react-router dev",
|
|
220
|
+
"start": "NODE_OPTIONS='--import ./instrument.server.mjs' react-router-serve ./build/server/index.js"
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Fallback for platforms where runtime flags are restricted:
|
|
226
|
+
|
|
227
|
+
```tsx
|
|
228
|
+
import "./instrument.server.mjs";
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
This direct-import method can result in incomplete auto-instrumentation compared to
|
|
232
|
+
`--import`.
|
|
233
|
+
|
|
234
|
+
#### Configure source maps
|
|
235
|
+
|
|
236
|
+
`vite.config.ts`:
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
import { reactRouter } from "@react-router/dev/vite";
|
|
240
|
+
import { sentryReactRouter, type SentryReactRouterBuildOptions } from "@sentry/react-router";
|
|
241
|
+
import { defineConfig } from "vite";
|
|
242
|
+
|
|
243
|
+
const sentryConfig: SentryReactRouterBuildOptions = {
|
|
244
|
+
org: "___ORG_SLUG___",
|
|
245
|
+
project: "___PROJECT_SLUG___",
|
|
246
|
+
authToken: process.env.SENTRY_AUTH_TOKEN,
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
export default defineConfig((config) => {
|
|
250
|
+
return {
|
|
251
|
+
plugins: [reactRouter(), sentryReactRouter(sentryConfig, config)],
|
|
252
|
+
};
|
|
253
|
+
});
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
`react-router.config.ts`:
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
import type { Config } from "@react-router/dev/config";
|
|
260
|
+
import { sentryOnBuildEnd } from "@sentry/react-router";
|
|
261
|
+
|
|
262
|
+
export default {
|
|
263
|
+
ssr: true,
|
|
264
|
+
buildEnd: async ({ viteConfig, reactRouterConfig, buildManifest }) => {
|
|
265
|
+
await sentryOnBuildEnd({ viteConfig, reactRouterConfig, buildManifest });
|
|
266
|
+
},
|
|
267
|
+
} satisfies Config;
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
### For Each Agreed Feature
|
|
273
|
+
|
|
274
|
+
Walk through features one at a time.
|
|
275
|
+
Load the reference file, follow steps exactly, and verify before moving on:
|
|
276
|
+
|
|
277
|
+
| Feature | Reference | Load when … |
|
|
278
|
+
| ------------------ | -------------------------------------- | ----------------------------------------------------------- |
|
|
279
|
+
| Error Monitoring | `./error-monitoring.md` | Always |
|
|
280
|
+
| Tracing | `./tracing.md` | Route/request performance visibility needed |
|
|
281
|
+
| Profiling | `./profiling.md` | Server performance analysis needed |
|
|
282
|
+
| Session Replay | `./session-replay.md` | User-facing app |
|
|
283
|
+
| Logs | `./logging.md` | Structured logs/correlation needed |
|
|
284
|
+
| User Feedback | `./user-feedback.md` | In-app feedback flows needed |
|
|
285
|
+
| Framework Features | `./react-router-framework-features.md` | Entry files, wrappers, source maps, startup import strategy |
|
|
286
|
+
|
|
287
|
+
For each feature: `Read ./<feature>.md`, follow steps exactly, verify it works.
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Configuration Reference
|
|
292
|
+
|
|
293
|
+
### Key `Sentry.init()` options
|
|
294
|
+
|
|
295
|
+
| Option | Type | Default | Notes |
|
|
296
|
+
| ---------------------------- | ---------------------- | ----------------------------------- | ---------------------------------------------------------------------- |
|
|
297
|
+
| `dsn` | `string` | — | Required; SDK disabled when empty |
|
|
298
|
+
| `dataCollection` | `object` | — | Controls what data is collected (userInfo, cookies, httpHeaders, etc.) |
|
|
299
|
+
| `dataCollection.userInfo` | `boolean` | `true` | Includes IP-derived user context |
|
|
300
|
+
| `dataCollection.cookies` | `CollectBehavior` | `true` | Controls cookie collection and filtering |
|
|
301
|
+
| `dataCollection.httpHeaders` | `object` | `{ request: true, response: true }` | Controls HTTP header collection |
|
|
302
|
+
| `sendDefaultPii` | `boolean` | `false` | **Deprecated:** Use `dataCollection` instead; removed in v11 |
|
|
303
|
+
| `integrations` | `Integration[]` | SDK defaults | Add tracing/replay/feedback/profiling integrations |
|
|
304
|
+
| `enableLogs` | `boolean` | `false` | Enables `Sentry.logger.*` ingestion |
|
|
305
|
+
| `tracesSampleRate` | `number` | — | Usually `1.0` in testing, lower in production |
|
|
306
|
+
| `tracePropagationTargets` | `(string \| RegExp)[]` | SDK defaults | URLs that receive tracing headers |
|
|
307
|
+
| `replaysSessionSampleRate` | `number` | — | Fraction of all sessions recorded |
|
|
308
|
+
| `replaysOnErrorSampleRate` | `number` | — | Fraction of error sessions recorded |
|
|
309
|
+
| `profileSessionSampleRate` | `number` | — | Fraction of transactions profiled (server profiling) |
|
|
310
|
+
| `tunnel` | `string` | — | Optional ad-blocker bypass endpoint |
|
|
311
|
+
| `debug` | `boolean` | `false` | Verbose SDK diagnostics |
|
|
312
|
+
|
|
313
|
+
### Framework-specific APIs
|
|
314
|
+
|
|
315
|
+
| API | Purpose |
|
|
316
|
+
| ------------------------------------------------- | -------------------------------------------------------- |
|
|
317
|
+
| `reactRouterTracingIntegration()` | Client-side tracing integration for framework mode |
|
|
318
|
+
| `sentryOnError` | Hooks into React Router `HydratedRouter` error reporting |
|
|
319
|
+
| `createSentryHandleRequest(...)` | Server request wrapper for framework entry server |
|
|
320
|
+
| `createSentryHandleError(...)` | Server error handler wrapper |
|
|
321
|
+
| `wrapServerLoader(...)` / `wrapServerAction(...)` | Manual wrapping for server loaders/actions |
|
|
322
|
+
| `sentryReactRouter(...)` | Vite plugin for source maps/build integration |
|
|
323
|
+
| `sentryOnBuildEnd(...)` | React Router build-end hook for source map processing |
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## Verification
|
|
328
|
+
|
|
329
|
+
### Wizard-generated path
|
|
330
|
+
|
|
331
|
+
If wizard examples were generated, open `/sentry-example-page` and trigger test actions.
|
|
332
|
+
|
|
333
|
+
### Manual error test
|
|
334
|
+
|
|
335
|
+
```tsx
|
|
336
|
+
export async function loader() {
|
|
337
|
+
throw new Error("My first Sentry error!");
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Manual tracing test
|
|
342
|
+
|
|
343
|
+
```tsx
|
|
344
|
+
import * as Sentry from "@sentry/react-router";
|
|
345
|
+
|
|
346
|
+
export async function loader() {
|
|
347
|
+
return Sentry.startSpan({ op: "test", name: "My First Test Transaction" }, () => {
|
|
348
|
+
throw new Error("My first Sentry error!");
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### Logs test
|
|
354
|
+
|
|
355
|
+
```javascript
|
|
356
|
+
Sentry.logger.info("User example action completed");
|
|
357
|
+
Sentry.logger.warn("Slow operation detected", { operation: "data_fetch", duration: 3500 });
|
|
358
|
+
Sentry.logger.error("Validation failed", { field: "email", reason: "Invalid email" });
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
Confirm in Sentry:
|
|
362
|
+
|
|
363
|
+
- **Issues**: errors appear
|
|
364
|
+
- **Traces**: transaction/span data appears
|
|
365
|
+
- **Profiles**: profiles appear when profiling enabled
|
|
366
|
+
- **Replays**: replay entries appear when enabled
|
|
367
|
+
- **Logs**: log events appear when `enableLogs: true`
|
|
368
|
+
- **User Feedback**: submissions appear when feedback enabled
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
## Phase 4: Cross-Link
|
|
373
|
+
|
|
374
|
+
After completing React Router Framework setup:
|
|
375
|
+
|
|
376
|
+
1. Check whether the app is actually non-framework routing (v5/v6/v7 data/declarative
|
|
377
|
+
with `@sentry/react`).
|
|
378
|
+
2. If yes, redirect to [`react`](../react/index.md) for non-framework routing
|
|
379
|
+
integrations.
|
|
380
|
+
|
|
381
|
+
Then check companion backend coverage:
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
ls ../backend ../server ../api ../go ../python 2>/dev/null
|
|
385
|
+
cat ../go.mod ../requirements.txt ../pyproject.toml ../Gemfile ../pom.xml 2>/dev/null | head -5
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
| Backend detected | Suggest skill |
|
|
389
|
+
| --------------------- | ------------------------------ |
|
|
390
|
+
| Go | [`go`](../go/index.md) |
|
|
391
|
+
| Python | [`python`](../python/index.md) |
|
|
392
|
+
| Ruby | [`ruby`](../ruby/index.md) |
|
|
393
|
+
| Node backend services | [`node`](../node/index.md) |
|
|
394
|
+
| Java services | Use `@sentry/java` docs |
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## Troubleshooting
|
|
399
|
+
|
|
400
|
+
| Issue | Solution |
|
|
401
|
+
| -------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
|
|
402
|
+
| `entry.client.tsx` / `entry.server.tsx` missing | Run `npx react-router reveal` first |
|
|
403
|
+
| Client errors missing | Ensure `HydratedRouter` includes `onError={Sentry.sentryOnError}` |
|
|
404
|
+
| Server errors missing | Use `createSentryHandleRequest` and `createSentryHandleError` wrappers |
|
|
405
|
+
| Custom server handlers bypass Sentry | Use `wrapSentryHandleRequest` and manual `captureException` in custom `handleError` |
|
|
406
|
+
| Source maps not uploaded | Verify `sentryReactRouter` plugin config and `sentryOnBuildEnd` hook |
|
|
407
|
+
| `SENTRY_AUTH_TOKEN` undefined in Vite config | Load env vars in config or use `.env.sentry-build-plugin` |
|
|
408
|
+
| Incomplete server auto-instrumentation | Prefer `NODE_OPTIONS='--import ./instrument.server.mjs'` startup |
|
|
409
|
+
| Profiling data missing | Confirm `@sentry/profiling-node` installed and `nodeProfilingIntegration` enabled |
|
|
410
|
+
| Running unsupported Node auto-instrumentation version | Use instrumentation API/manual wrappers as documented |
|
|
411
|
+
| Non-framework app configured with `@sentry/react-router` | Switch to [`react`](../react/index.md) + `@sentry/react` for v5/v6/v7 non-framework routes |
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Logs — Sentry React Router Framework SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/react-router` with Logs support
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Enable logs
|
|
8
|
+
|
|
9
|
+
Set `enableLogs: true` in both client and server initialization where you want log
|
|
10
|
+
ingestion.
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
Sentry.init({
|
|
14
|
+
dsn: "___PUBLIC_DSN___",
|
|
15
|
+
enableLogs: true,
|
|
16
|
+
});
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Logging APIs
|
|
22
|
+
|
|
23
|
+
```javascript
|
|
24
|
+
Sentry.logger.info("User example action completed");
|
|
25
|
+
|
|
26
|
+
Sentry.logger.warn("Slow operation detected", {
|
|
27
|
+
operation: "data_fetch",
|
|
28
|
+
duration: 3500,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
Sentry.logger.error("Validation failed", {
|
|
32
|
+
field: "email",
|
|
33
|
+
reason: "Invalid email",
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Correlation guidance
|
|
40
|
+
|
|
41
|
+
For better debugging:
|
|
42
|
+
|
|
43
|
+
1. Enable tracing with meaningful transaction names.
|
|
44
|
+
2. Add structured fields to logs (`operation`, `route`, `tenant`, `requestId`).
|
|
45
|
+
3. Keep consistent keys across client and server logs.
|
|
46
|
+
|
|
47
|
+
This improves issue/trace/log correlation in Sentry.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Verification
|
|
52
|
+
|
|
53
|
+
1. Emit info/warn/error logs from app code.
|
|
54
|
+
2. Open **Logs** in Sentry.
|
|
55
|
+
3. Filter by message/metadata and confirm ingestion.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Troubleshooting
|
|
60
|
+
|
|
61
|
+
| Issue | Solution |
|
|
62
|
+
| ------------------------- | -------------------------------------------------------------- |
|
|
63
|
+
| Logs not visible | Verify `enableLogs: true` in active init path |
|
|
64
|
+
| Missing metadata | Pass structured objects as second logger argument |
|
|
65
|
+
| Noisy logs | Reduce volume or gate lower-severity logs by environment |
|
|
66
|
+
| Logs not linked to traces | Ensure tracing is active and shared context fields are present |
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Profiling — Sentry React Router Framework SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/react-router` with `@sentry/profiling-node` for server profiling
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Profiling setup (server)
|
|
8
|
+
|
|
9
|
+
Install profiling package:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @sentry/profiling-node --save
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Configure in `instrument.server.mjs`:
|
|
16
|
+
|
|
17
|
+
```js
|
|
18
|
+
import * as Sentry from "@sentry/react-router";
|
|
19
|
+
import { nodeProfilingIntegration } from "@sentry/profiling-node";
|
|
20
|
+
|
|
21
|
+
Sentry.init({
|
|
22
|
+
dsn: "___PUBLIC_DSN___",
|
|
23
|
+
integrations: [nodeProfilingIntegration()],
|
|
24
|
+
tracesSampleRate: 1.0,
|
|
25
|
+
profileSessionSampleRate: 1.0,
|
|
26
|
+
});
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Sampling strategy
|
|
32
|
+
|
|
33
|
+
| Setting | Purpose |
|
|
34
|
+
| -------------------------- | ------------------------------------------------- |
|
|
35
|
+
| `tracesSampleRate` | How many transactions are captured |
|
|
36
|
+
| `profileSessionSampleRate` | What fraction of traced transactions get profiles |
|
|
37
|
+
|
|
38
|
+
Start high in development, then lower for production cost control.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Verification
|
|
43
|
+
|
|
44
|
+
1. Trigger a server transaction with profiling enabled.
|
|
45
|
+
2. Open **Profiles** in Sentry.
|
|
46
|
+
3. Confirm profile entries appear and are linked to transactions.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Troubleshooting
|
|
51
|
+
|
|
52
|
+
| Issue | Solution |
|
|
53
|
+
| -------------------------------- | ---------------------------------------------------------------------- |
|
|
54
|
+
| No profiles visible | Ensure `@sentry/profiling-node` is installed and integration is active |
|
|
55
|
+
| Traces visible but no profiles | Increase `profileSessionSampleRate` |
|
|
56
|
+
| Profile volume too high | Lower `profileSessionSampleRate` and/or `tracesSampleRate` |
|
|
57
|
+
| Runtime incompatibility symptoms | Verify Node runtime support and fallback to tracing-only where needed |
|