@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,942 @@
|
|
|
1
|
+
# Sentry Node.js / Bun / Deno SDK
|
|
2
|
+
|
|
3
|
+
Opinionated wizard that scans your project and guides you through complete Sentry setup
|
|
4
|
+
for server-side JavaScript and TypeScript runtimes: Node.js, Bun, and Deno.
|
|
5
|
+
|
|
6
|
+
> **NestJS?** Use [[`nestjs`](../nestjs/index.md)](../nestjs/index.md) instead — it uses
|
|
7
|
+
> `@sentry/nestjs` with NestJS-native decorators and filters.
|
|
8
|
+
> **Next.js?** Use [[`nextjs`](../nextjs/index.md)](../nextjs/index.md) instead — it
|
|
9
|
+
> handles the three-runtime architecture (browser, server, edge).
|
|
10
|
+
|
|
11
|
+
> **Note:** SDK versions below reflect current Sentry docs at time of writing
|
|
12
|
+
> (`@sentry/node` ≥10.42.0, `@sentry/bun` ≥10.42.0, `@sentry/deno` ≥10.42.0). Always
|
|
13
|
+
> verify against
|
|
14
|
+
> [docs.sentry.io/platforms/javascript/guides/node/](https://docs.sentry.io/platforms/javascript/guides/node/)
|
|
15
|
+
> before implementing.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Phase 1: Detect
|
|
20
|
+
|
|
21
|
+
Run these commands to identify the runtime, framework, and existing Sentry setup:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Detect runtime
|
|
25
|
+
bun --version 2>/dev/null && echo "Bun detected"
|
|
26
|
+
deno --version 2>/dev/null && echo "Deno detected"
|
|
27
|
+
node --version 2>/dev/null && echo "Node.js detected"
|
|
28
|
+
|
|
29
|
+
# Detect existing Sentry packages
|
|
30
|
+
cat package.json 2>/dev/null | grep -E '"@sentry/'
|
|
31
|
+
cat deno.json deno.jsonc 2>/dev/null | grep -i sentry
|
|
32
|
+
|
|
33
|
+
# Detect Node.js framework
|
|
34
|
+
cat package.json 2>/dev/null | grep -E '"express"|"fastify"|"@hapi/hapi"|"koa"|"@nestjs/core"|"connect"'
|
|
35
|
+
|
|
36
|
+
# Detect Bun-specific frameworks
|
|
37
|
+
cat package.json 2>/dev/null | grep -E '"elysia"|"hono"'
|
|
38
|
+
|
|
39
|
+
# Detect Deno frameworks (deno.json imports)
|
|
40
|
+
cat deno.json deno.jsonc 2>/dev/null | grep -E '"oak"|"hono"|"fresh"'
|
|
41
|
+
|
|
42
|
+
# Detect module system (Node.js)
|
|
43
|
+
cat package.json 2>/dev/null | grep '"type"'
|
|
44
|
+
ls *.mjs *.cjs 2>/dev/null | head -5
|
|
45
|
+
|
|
46
|
+
# Detect existing instrument file
|
|
47
|
+
ls instrument.js instrument.mjs instrument.ts instrument.cjs 2>/dev/null
|
|
48
|
+
|
|
49
|
+
# Detect logging libraries
|
|
50
|
+
cat package.json 2>/dev/null | grep -E '"winston"|"pino"|"bunyan"'
|
|
51
|
+
|
|
52
|
+
# Detect cron / scheduling
|
|
53
|
+
cat package.json 2>/dev/null | grep -E '"node-cron"|"cron"|"agenda"|"bull"|"bullmq"'
|
|
54
|
+
|
|
55
|
+
# Detect AI / LLM usage
|
|
56
|
+
cat package.json 2>/dev/null | grep -E '"openai"|"@anthropic-ai"|"@langchain"|"@vercel/ai"|"@google/generative-ai"'
|
|
57
|
+
|
|
58
|
+
# Detect OpenTelemetry tracing
|
|
59
|
+
cat package.json 2>/dev/null | grep -E '"@opentelemetry/sdk-node"|"@opentelemetry/sdk-trace-node"|"@opentelemetry/sdk-trace-base"'
|
|
60
|
+
grep -rn "NodeTracerProvider\|trace\.getTracer\|startActiveSpan" \
|
|
61
|
+
--include="*.ts" --include="*.js" --include="*.mjs" 2>/dev/null | head -5
|
|
62
|
+
|
|
63
|
+
# Check for companion frontend
|
|
64
|
+
ls frontend/ web/ client/ ui/ 2>/dev/null
|
|
65
|
+
cat package.json 2>/dev/null | grep -E '"react"|"vue"|"svelte"|"next"'
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**What to determine:**
|
|
69
|
+
|
|
70
|
+
| Question | Impact |
|
|
71
|
+
| -------------------------------------------------- | ---------------------------------------------------------------------------- |
|
|
72
|
+
| Which runtime? (Node.js / Bun / Deno) | Determines package, init pattern, and preload flag |
|
|
73
|
+
| Node.js: ESM or CJS? | ESM requires `--import ./instrument.mjs`; CJS uses `require("./instrument")` |
|
|
74
|
+
| Framework detected? | Determines which error handler to register |
|
|
75
|
+
| `@sentry/*` already installed? | Skip install, go straight to feature config |
|
|
76
|
+
| `instrument.js` / `instrument.mjs` already exists? | Merge into it rather than overwrite |
|
|
77
|
+
| Logging library detected? | Recommend Sentry Logs |
|
|
78
|
+
| Cron / job scheduler detected? | Recommend Crons monitoring |
|
|
79
|
+
| AI library detected? | Recommend AI Monitoring |
|
|
80
|
+
| OpenTelemetry tracing detected? | Use OTLP path instead of native tracing |
|
|
81
|
+
| Companion frontend found? | Trigger Phase 4 cross-link |
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Phase 2: Recommend
|
|
86
|
+
|
|
87
|
+
Present a concrete recommendation based on what you found.
|
|
88
|
+
Don’t ask open-ended questions — lead with a proposal:
|
|
89
|
+
|
|
90
|
+
**Route from OTel detection:**
|
|
91
|
+
|
|
92
|
+
- **OTel tracing detected** (`@opentelemetry/sdk-node` or
|
|
93
|
+
`@opentelemetry/sdk-trace-node` in `package.json`, or `NodeTracerProvider` in source)
|
|
94
|
+
→ use OTLP path: `otlpIntegration()` via `@sentry/node-core/light`; do **not** set
|
|
95
|
+
`tracesSampleRate`; Sentry links errors to OTel traces automatically
|
|
96
|
+
|
|
97
|
+
**Recommended (core coverage):**
|
|
98
|
+
|
|
99
|
+
- ✅ **Error Monitoring** — always; captures unhandled exceptions, promise rejections,
|
|
100
|
+
and framework errors
|
|
101
|
+
- ✅ **Tracing** — automatic HTTP, DB, and queue instrumentation via OpenTelemetry
|
|
102
|
+
|
|
103
|
+
**Optional (enhanced observability):**
|
|
104
|
+
|
|
105
|
+
- ⚡ **Logging** — structured logs via `Sentry.logger.*`; recommend when
|
|
106
|
+
`winston`/`pino`/`bunyan` or log search is needed
|
|
107
|
+
- ⚡ **Profiling** — continuous CPU profiling (Node.js only; not available on Bun or
|
|
108
|
+
Deno); **not available with OTLP path**
|
|
109
|
+
- ⚡ **AI Monitoring** — OpenAI, Anthropic, LangChain, Vercel AI SDK; recommend when
|
|
110
|
+
AI/LLM calls detected
|
|
111
|
+
- ⚡ **Crons** — detect missed or failed scheduled jobs; recommend when node-cron, Bull,
|
|
112
|
+
or Agenda is detected
|
|
113
|
+
- ⚡ **Metrics** — custom counters, gauges, distributions; recommend when custom KPIs
|
|
114
|
+
needed
|
|
115
|
+
- ⚡ **Runtime Metrics** — automatic collection of memory, CPU, and event loop metrics;
|
|
116
|
+
`nodeRuntimeMetricsIntegration()` (Node.js) / `bunRuntimeMetricsIntegration()` (Bun)
|
|
117
|
+
|
|
118
|
+
**Recommendation logic:**
|
|
119
|
+
|
|
120
|
+
| Feature | Recommend when … |
|
|
121
|
+
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
122
|
+
| Error Monitoring | **Always** — non-negotiable baseline |
|
|
123
|
+
| OTLP Integration | OTel tracing detected — **replaces** native Tracing |
|
|
124
|
+
| Tracing | **Always for server apps** — HTTP spans + DB spans are high-value; **skip if OTel tracing detected** |
|
|
125
|
+
| Logging | App uses winston, pino, bunyan, or needs log-to-trace correlation |
|
|
126
|
+
| Profiling | **Node.js only** — performance-critical service; native addon compatible; **skip if OTel tracing detected** (requires `tracesSampleRate`, incompatible with OTLP) |
|
|
127
|
+
| AI Monitoring | App calls OpenAI, Anthropic, LangChain, Vercel AI, or Google GenAI |
|
|
128
|
+
| Crons | App uses node-cron, Bull, BullMQ, Agenda, or any scheduled task pattern |
|
|
129
|
+
| Metrics | App needs custom counters, gauges, or histograms |
|
|
130
|
+
| Runtime Metrics | Any Node.js or Bun service wanting automatic memory/CPU/event-loop visibility |
|
|
131
|
+
|
|
132
|
+
**OTel tracing detected:** _“I see OpenTelemetry tracing in the project.
|
|
133
|
+
I recommend Sentry’s OTLP integration for tracing (via your existing OTel setup) + Error
|
|
134
|
+
Monitoring + Sentry Logging [+ Metrics/Crons/AI Monitoring if applicable]. Shall I
|
|
135
|
+
proceed?”_
|
|
136
|
+
|
|
137
|
+
**No OTel:** _“I recommend setting up Error Monitoring + Tracing.
|
|
138
|
+
Want me to also add Logging or Profiling?”_
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Phase 3: Guide
|
|
143
|
+
|
|
144
|
+
### Runtime: Node.js
|
|
145
|
+
|
|
146
|
+
#### Option 1: Wizard (Recommended for Node.js)
|
|
147
|
+
|
|
148
|
+
> **You need to run this yourself** — the wizard opens a browser for login and requires
|
|
149
|
+
> interactive input that the agent can’t handle.
|
|
150
|
+
> Copy-paste into your terminal:
|
|
151
|
+
>
|
|
152
|
+
> ```
|
|
153
|
+
> npx @sentry/wizard@latest -i node
|
|
154
|
+
> ```
|
|
155
|
+
>
|
|
156
|
+
> It handles login, org/project selection, SDK installation, `instrument.js` creation,
|
|
157
|
+
> and package.json script updates.
|
|
158
|
+
>
|
|
159
|
+
> **Once it finishes, come back and skip to [Verification](#verification).**
|
|
160
|
+
|
|
161
|
+
If the user skips the wizard, proceed with Option 2 (Manual Setup) below.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
#### Option 2: Manual Setup — Node.js
|
|
166
|
+
|
|
167
|
+
##### Install
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
npm install @sentry/node --save
|
|
171
|
+
# or
|
|
172
|
+
yarn add @sentry/node
|
|
173
|
+
# or
|
|
174
|
+
pnpm add @sentry/node
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
##### Create the Instrument File
|
|
178
|
+
|
|
179
|
+
**CommonJS (`instrument.js`):**
|
|
180
|
+
|
|
181
|
+
```javascript
|
|
182
|
+
// instrument.js — must be loaded before all other modules
|
|
183
|
+
const Sentry = require("@sentry/node");
|
|
184
|
+
|
|
185
|
+
Sentry.init({
|
|
186
|
+
dsn: process.env.SENTRY_DSN ?? "___DSN___",
|
|
187
|
+
|
|
188
|
+
dataCollection: {
|
|
189
|
+
// To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
|
|
190
|
+
// https://docs.sentry.io/platforms/javascript/guides/node/configuration/options/#dataCollection
|
|
191
|
+
// userInfo: false,
|
|
192
|
+
// httpBodies: [],
|
|
193
|
+
},
|
|
194
|
+
|
|
195
|
+
// 100% in dev, lower in production
|
|
196
|
+
tracesSampleRate: process.env.NODE_ENV === "development" ? 1.0 : 0.1,
|
|
197
|
+
|
|
198
|
+
// Capture local variable values in stack frames
|
|
199
|
+
includeLocalVariables: true,
|
|
200
|
+
|
|
201
|
+
enableLogs: true,
|
|
202
|
+
});
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**ESM (`instrument.mjs`):**
|
|
206
|
+
|
|
207
|
+
```javascript
|
|
208
|
+
// instrument.mjs — loaded via --import flag before any other module
|
|
209
|
+
import * as Sentry from "@sentry/node";
|
|
210
|
+
|
|
211
|
+
Sentry.init({
|
|
212
|
+
dsn: process.env.SENTRY_DSN ?? "___DSN___",
|
|
213
|
+
|
|
214
|
+
dataCollection: {
|
|
215
|
+
// To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
|
|
216
|
+
// https://docs.sentry.io/platforms/javascript/guides/node/configuration/options/#dataCollection
|
|
217
|
+
// userInfo: false,
|
|
218
|
+
// httpBodies: [],
|
|
219
|
+
},
|
|
220
|
+
tracesSampleRate: process.env.NODE_ENV === "development" ? 1.0 : 0.1,
|
|
221
|
+
includeLocalVariables: true,
|
|
222
|
+
enableLogs: true,
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
##### Start Your App with Sentry Loaded First
|
|
227
|
+
|
|
228
|
+
**CommonJS** — add `require("./instrument")` as the very first line of your entry file:
|
|
229
|
+
|
|
230
|
+
```javascript
|
|
231
|
+
// app.js
|
|
232
|
+
require("./instrument"); // must be first
|
|
233
|
+
|
|
234
|
+
const express = require("express");
|
|
235
|
+
// ... rest of your app
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**ESM** — use the `--import` flag so Sentry loads before all other modules (Node.js
|
|
239
|
+
18.19.0+ required):
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
node --import ./instrument.mjs app.mjs
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Add to `package.json` scripts:
|
|
246
|
+
|
|
247
|
+
```json
|
|
248
|
+
{
|
|
249
|
+
"scripts": {
|
|
250
|
+
"start": "node --import ./instrument.mjs server.mjs",
|
|
251
|
+
"dev": "node --import ./instrument.mjs --watch server.mjs"
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Or via environment variable (useful for wrapping existing start commands):
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
NODE_OPTIONS="--import ./instrument.mjs" npm start
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
##### Framework Error Handlers
|
|
263
|
+
|
|
264
|
+
Register the Sentry error handler **after all routes** so it can capture framework
|
|
265
|
+
errors:
|
|
266
|
+
|
|
267
|
+
**Express:**
|
|
268
|
+
|
|
269
|
+
```javascript
|
|
270
|
+
const express = require("express");
|
|
271
|
+
const Sentry = require("@sentry/node");
|
|
272
|
+
|
|
273
|
+
const app = express();
|
|
274
|
+
|
|
275
|
+
// ... your routes
|
|
276
|
+
|
|
277
|
+
// Add AFTER all routes — captures 5xx errors by default
|
|
278
|
+
Sentry.setupExpressErrorHandler(app);
|
|
279
|
+
|
|
280
|
+
// Optional: capture 4xx errors too
|
|
281
|
+
// Sentry.setupExpressErrorHandler(app, {
|
|
282
|
+
// shouldHandleError(error) { return error.status >= 400; },
|
|
283
|
+
// });
|
|
284
|
+
|
|
285
|
+
app.listen(3000);
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
**Fastify:**
|
|
289
|
+
|
|
290
|
+
```javascript
|
|
291
|
+
const Fastify = require("fastify");
|
|
292
|
+
const Sentry = require("@sentry/node");
|
|
293
|
+
|
|
294
|
+
const fastify = Fastify();
|
|
295
|
+
|
|
296
|
+
// Add BEFORE routes (unlike Express!)
|
|
297
|
+
Sentry.setupFastifyErrorHandler(fastify);
|
|
298
|
+
|
|
299
|
+
// ... your routes
|
|
300
|
+
|
|
301
|
+
await fastify.listen({ port: 3000 });
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
**Koa:**
|
|
305
|
+
|
|
306
|
+
```javascript
|
|
307
|
+
const Koa = require("koa");
|
|
308
|
+
const Sentry = require("@sentry/node");
|
|
309
|
+
|
|
310
|
+
const app = new Koa();
|
|
311
|
+
|
|
312
|
+
// Add as FIRST middleware (catches errors thrown by later middleware)
|
|
313
|
+
Sentry.setupKoaErrorHandler(app);
|
|
314
|
+
|
|
315
|
+
// ... your other middleware and routes
|
|
316
|
+
|
|
317
|
+
app.listen(3000);
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**Hapi (async — must await):**
|
|
321
|
+
|
|
322
|
+
```javascript
|
|
323
|
+
const Hapi = require("@hapi/hapi");
|
|
324
|
+
const Sentry = require("@sentry/node");
|
|
325
|
+
|
|
326
|
+
const server = Hapi.server({ port: 3000 });
|
|
327
|
+
|
|
328
|
+
// ... your routes
|
|
329
|
+
|
|
330
|
+
// Must await — Hapi registration is async
|
|
331
|
+
await Sentry.setupHapiErrorHandler(server);
|
|
332
|
+
|
|
333
|
+
await server.start();
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
**Connect:**
|
|
337
|
+
|
|
338
|
+
```javascript
|
|
339
|
+
const connect = require("connect");
|
|
340
|
+
const Sentry = require("@sentry/node");
|
|
341
|
+
|
|
342
|
+
const app = connect();
|
|
343
|
+
|
|
344
|
+
// Add BEFORE routes (like Fastify and Koa)
|
|
345
|
+
Sentry.setupConnectErrorHandler(app);
|
|
346
|
+
|
|
347
|
+
// ... your middleware and routes
|
|
348
|
+
|
|
349
|
+
require("http").createServer(app).listen(3000);
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
**NestJS** — has its own dedicated skill with full coverage:
|
|
353
|
+
|
|
354
|
+
> **Use the [[`nestjs`](../nestjs/index.md)](../nestjs/index.md) skill instead.** NestJS
|
|
355
|
+
> uses a separate package (`@sentry/nestjs`) with NestJS-native constructs:
|
|
356
|
+
> `SentryModule.forRoot()`, `SentryGlobalFilter`, `@SentryTraced`, `@SentryCron`
|
|
357
|
+
> decorators, and GraphQL/Microservices support.
|
|
358
|
+
> Load that skill for complete NestJS setup.
|
|
359
|
+
|
|
360
|
+
**Vanilla Node.js `http` module** — wrap request handler manually:
|
|
361
|
+
|
|
362
|
+
```javascript
|
|
363
|
+
const http = require("http");
|
|
364
|
+
const Sentry = require("@sentry/node");
|
|
365
|
+
|
|
366
|
+
const server = http.createServer((req, res) => {
|
|
367
|
+
Sentry.withIsolationScope(() => {
|
|
368
|
+
try {
|
|
369
|
+
// your handler
|
|
370
|
+
res.end("OK");
|
|
371
|
+
} catch (err) {
|
|
372
|
+
Sentry.captureException(err);
|
|
373
|
+
res.writeHead(500);
|
|
374
|
+
res.end("Internal Server Error");
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
server.listen(3000);
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
**Framework error handler summary:**
|
|
383
|
+
|
|
384
|
+
| Framework | Function | Placement | Async? |
|
|
385
|
+
| --------- | ---------------------------------------------------------- | ----------------------- | ------- |
|
|
386
|
+
| Express | `setupExpressErrorHandler(app)` | **After** all routes | No |
|
|
387
|
+
| Fastify | `setupFastifyErrorHandler(fastify)` | **Before** routes | No |
|
|
388
|
+
| Koa | `setupKoaErrorHandler(app)` | **First** middleware | No |
|
|
389
|
+
| Hapi | `setupHapiErrorHandler(server)` | Before `server.start()` | **Yes** |
|
|
390
|
+
| Connect | `setupConnectErrorHandler(app)` | **Before** routes | No |
|
|
391
|
+
| NestJS | → Use [[`nestjs`](../nestjs/index.md)](../nestjs/index.md) | Dedicated skill | — |
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
### Runtime: Bun
|
|
396
|
+
|
|
397
|
+
> **No wizard available for Bun.** Manual setup only.
|
|
398
|
+
|
|
399
|
+
#### Install
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
bun add @sentry/bun
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
#### Create `instrument.ts` (or `instrument.js`)
|
|
406
|
+
|
|
407
|
+
```typescript
|
|
408
|
+
// instrument.ts
|
|
409
|
+
import * as Sentry from "@sentry/bun";
|
|
410
|
+
|
|
411
|
+
Sentry.init({
|
|
412
|
+
dsn: process.env.SENTRY_DSN ?? "___DSN___",
|
|
413
|
+
|
|
414
|
+
dataCollection: {
|
|
415
|
+
// To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
|
|
416
|
+
// https://docs.sentry.io/platforms/javascript/guides/node/configuration/options/#dataCollection
|
|
417
|
+
// userInfo: false,
|
|
418
|
+
// httpBodies: [],
|
|
419
|
+
},
|
|
420
|
+
tracesSampleRate: process.env.NODE_ENV === "development" ? 1.0 : 0.1,
|
|
421
|
+
enableLogs: true,
|
|
422
|
+
});
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
#### Start Your App with `--preload`
|
|
426
|
+
|
|
427
|
+
```bash
|
|
428
|
+
bun --preload ./instrument.ts server.ts
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
Add to `package.json`:
|
|
432
|
+
|
|
433
|
+
```json
|
|
434
|
+
{
|
|
435
|
+
"scripts": {
|
|
436
|
+
"start": "bun --preload ./instrument.ts server.ts",
|
|
437
|
+
"dev": "bun --watch --preload ./instrument.ts server.ts"
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
#### Bun.serve() — Auto-Instrumentation
|
|
443
|
+
|
|
444
|
+
`@sentry/bun` automatically instruments `Bun.serve()` via JavaScript Proxy.
|
|
445
|
+
No extra setup is required — just initialize with `--preload` and your `Bun.serve()`
|
|
446
|
+
calls are traced:
|
|
447
|
+
|
|
448
|
+
```typescript
|
|
449
|
+
// server.ts
|
|
450
|
+
const server = Bun.serve({
|
|
451
|
+
port: 3000,
|
|
452
|
+
fetch(req) {
|
|
453
|
+
return new Response("Hello from Bun!");
|
|
454
|
+
},
|
|
455
|
+
});
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
#### Framework Error Handlers on Bun
|
|
459
|
+
|
|
460
|
+
Bun can run Express, Fastify, Hono, and Elysia.
|
|
461
|
+
Use the same `@sentry/bun` import and the `@sentry/node` error handler functions
|
|
462
|
+
(re-exported by `@sentry/bun`):
|
|
463
|
+
|
|
464
|
+
```typescript
|
|
465
|
+
import * as Sentry from "@sentry/bun";
|
|
466
|
+
import express from "express";
|
|
467
|
+
|
|
468
|
+
const app = express();
|
|
469
|
+
// ... routes
|
|
470
|
+
Sentry.setupExpressErrorHandler(app);
|
|
471
|
+
app.listen(3000);
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
#### Bun Feature Support
|
|
475
|
+
|
|
476
|
+
| Feature | Bun Support | Notes |
|
|
477
|
+
| ---------------- | -------------------------- | -------------------------------------------------------------------------------------------- |
|
|
478
|
+
| Error Monitoring | ✅ Full | Same API as Node |
|
|
479
|
+
| Tracing | ✅ Via `@sentry/node` OTel | Most auto-instrumentations work |
|
|
480
|
+
| Logging | ✅ Full | `enableLogs: true` + `Sentry.logger.*` |
|
|
481
|
+
| Profiling | ❌ Not available | `@sentry/profiling-node` uses native addons incompatible with Bun |
|
|
482
|
+
| Metrics | ✅ Full | `Sentry.metrics.*` |
|
|
483
|
+
| Runtime Metrics | ✅ Full | `bunRuntimeMetricsIntegration()` — memory, CPU, event loop (no event loop delay percentiles) |
|
|
484
|
+
| Crons | ✅ Full | `Sentry.withMonitor()` |
|
|
485
|
+
| AI Monitoring | ✅ Full | OpenAI, Anthropic integrations work |
|
|
486
|
+
|
|
487
|
+
---
|
|
488
|
+
|
|
489
|
+
### Runtime: Deno
|
|
490
|
+
|
|
491
|
+
> **No wizard available for Deno.** Manual setup only.
|
|
492
|
+
> **Requires Deno 2.0+.** Deno 1.x is not supported.
|
|
493
|
+
> **Use `npm:` specifier.** The `deno.land/x/sentry` registry is deprecated.
|
|
494
|
+
|
|
495
|
+
#### Install via `deno.json` (Recommended)
|
|
496
|
+
|
|
497
|
+
```json
|
|
498
|
+
{
|
|
499
|
+
"imports": {
|
|
500
|
+
"@sentry/deno": "npm:@sentry/deno@10.42.0"
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
Or import directly with the `npm:` specifier:
|
|
506
|
+
|
|
507
|
+
```typescript
|
|
508
|
+
import * as Sentry from "npm:@sentry/deno";
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
#### Initialize — Add to Entry File
|
|
512
|
+
|
|
513
|
+
```typescript
|
|
514
|
+
// main.ts — Sentry.init() must be called before any other code
|
|
515
|
+
import * as Sentry from "@sentry/deno";
|
|
516
|
+
|
|
517
|
+
Sentry.init({
|
|
518
|
+
dsn: Deno.env.get("SENTRY_DSN") ?? "___DSN___",
|
|
519
|
+
|
|
520
|
+
dataCollection: {
|
|
521
|
+
// To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
|
|
522
|
+
// https://docs.sentry.io/platforms/javascript/guides/node/configuration/options/#dataCollection
|
|
523
|
+
// userInfo: false,
|
|
524
|
+
// httpBodies: [],
|
|
525
|
+
},
|
|
526
|
+
tracesSampleRate: Deno.env.get("DENO_ENV") === "development" ? 1.0 : 0.1,
|
|
527
|
+
enableLogs: true,
|
|
528
|
+
});
|
|
529
|
+
|
|
530
|
+
// Your application code follows
|
|
531
|
+
Deno.serve({ port: 8000 }, (req) => {
|
|
532
|
+
return new Response("Hello from Deno!");
|
|
533
|
+
});
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
> Unlike Node.js and Bun, Deno does not have a `--preload` or `--import` flag.
|
|
537
|
+
> Sentry must be the first `import` in your entry file.
|
|
538
|
+
|
|
539
|
+
#### Required Deno Permissions
|
|
540
|
+
|
|
541
|
+
The SDK requires network access to reach your Sentry ingest domain:
|
|
542
|
+
|
|
543
|
+
```bash
|
|
544
|
+
deno run \
|
|
545
|
+
--allow-net=o<ORG_ID>.ingest.sentry.io \
|
|
546
|
+
--allow-read=./src \
|
|
547
|
+
--allow-env=SENTRY_DSN,SENTRY_RELEASE \
|
|
548
|
+
main.ts
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
For development, `--allow-all` works but is not recommended for production.
|
|
552
|
+
|
|
553
|
+
#### Deno Cron Integration
|
|
554
|
+
|
|
555
|
+
Deno provides native cron scheduling.
|
|
556
|
+
Use `denoCronIntegration` for automatic monitoring:
|
|
557
|
+
|
|
558
|
+
```typescript
|
|
559
|
+
import * as Sentry from "@sentry/deno";
|
|
560
|
+
import { denoCronIntegration } from "@sentry/deno";
|
|
561
|
+
|
|
562
|
+
Sentry.init({
|
|
563
|
+
dsn: Deno.env.get("SENTRY_DSN") ?? "___DSN___",
|
|
564
|
+
integrations: [denoCronIntegration()],
|
|
565
|
+
});
|
|
566
|
+
|
|
567
|
+
// Cron is automatically monitored
|
|
568
|
+
Deno.cron("daily-cleanup", "0 0 * * *", () => {
|
|
569
|
+
// cleanup logic
|
|
570
|
+
});
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
#### Deno Feature Support
|
|
574
|
+
|
|
575
|
+
| Feature | Deno Support | Notes |
|
|
576
|
+
| ---------------- | ---------------- | ------------------------------------------------------------ |
|
|
577
|
+
| Error Monitoring | ✅ Full | Unhandled exceptions + `captureException` |
|
|
578
|
+
| Tracing | ✅ Custom OTel | Automatic spans for `Deno.serve()` and `fetch` |
|
|
579
|
+
| Logging | ✅ Full | `enableLogs: true` + `Sentry.logger.*` |
|
|
580
|
+
| Profiling | ❌ Not available | No profiling addon for Deno |
|
|
581
|
+
| Metrics | ✅ Full | `Sentry.metrics.*` |
|
|
582
|
+
| Runtime Metrics | ❌ Not available | No runtime metrics integration for Deno |
|
|
583
|
+
| Crons | ✅ Full | `denoCronIntegration()` + `Sentry.withMonitor()` |
|
|
584
|
+
| AI Monitoring | ✅ Partial | Vercel AI SDK integration works; OpenAI/Anthropic via `npm:` |
|
|
585
|
+
|
|
586
|
+
---
|
|
587
|
+
|
|
588
|
+
### OTLP Integration (OTel-First Projects — Node.js Only)
|
|
589
|
+
|
|
590
|
+
> Use this path **only when OpenTelemetry tracing was detected** in Phase 1 (e.g.,
|
|
591
|
+
> `@opentelemetry/sdk-node` or `@opentelemetry/sdk-trace-node` in `package.json`). For
|
|
592
|
+
> projects without an existing OTel setup, use the standard `@sentry/node` path above.
|
|
593
|
+
|
|
594
|
+
The OTLP integration uses `@sentry/node-core/light` — a lightweight Sentry SDK that does
|
|
595
|
+
not bundle its own OpenTelemetry.
|
|
596
|
+
Instead, it hooks into the user’s existing OTel `TracerProvider` and exports spans to
|
|
597
|
+
Sentry via OTLP.
|
|
598
|
+
|
|
599
|
+
#### When to Use
|
|
600
|
+
|
|
601
|
+
| Scenario | Recommended path |
|
|
602
|
+
| --------------------------------------------- | --------------------------------------------------------------- |
|
|
603
|
+
| New project, no existing OTel | Standard `@sentry/node` (above) — includes built-in OTel |
|
|
604
|
+
| Existing OTel setup, want Sentry tracing | `@sentry/node-core/light` + `otlpIntegration()` |
|
|
605
|
+
| Existing OTel setup, sending to own Collector | `@sentry/node-core/light` + `otlpIntegration({ collectorUrl })` |
|
|
606
|
+
|
|
607
|
+
#### Install
|
|
608
|
+
|
|
609
|
+
```bash
|
|
610
|
+
npm install @sentry/node-core @opentelemetry/api @opentelemetry/sdk-trace-node @opentelemetry/sdk-trace-base
|
|
611
|
+
# or
|
|
612
|
+
yarn add @sentry/node-core @opentelemetry/api @opentelemetry/sdk-trace-node @opentelemetry/sdk-trace-base
|
|
613
|
+
# or
|
|
614
|
+
pnpm add @sentry/node-core @opentelemetry/api @opentelemetry/sdk-trace-node @opentelemetry/sdk-trace-base
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
> The `@opentelemetry/*` packages are peer dependencies.
|
|
618
|
+
> If the project already has them installed, skip duplicates.
|
|
619
|
+
|
|
620
|
+
#### Initialize
|
|
621
|
+
|
|
622
|
+
```javascript
|
|
623
|
+
// instrument.mjs — load via --import flag before any other module
|
|
624
|
+
import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
|
|
625
|
+
import * as Sentry from "@sentry/node-core/light";
|
|
626
|
+
import { otlpIntegration } from "@sentry/node-core/light/otlp";
|
|
627
|
+
|
|
628
|
+
// Register the user's OTel TracerProvider first
|
|
629
|
+
const provider = new NodeTracerProvider();
|
|
630
|
+
provider.register();
|
|
631
|
+
|
|
632
|
+
Sentry.init({
|
|
633
|
+
dsn: process.env.SENTRY_DSN ?? "___DSN___",
|
|
634
|
+
|
|
635
|
+
dataCollection: {
|
|
636
|
+
// To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
|
|
637
|
+
// https://docs.sentry.io/platforms/javascript/guides/node/configuration/options/#dataCollection
|
|
638
|
+
// userInfo: false,
|
|
639
|
+
// httpBodies: [],
|
|
640
|
+
},
|
|
641
|
+
enableLogs: true,
|
|
642
|
+
|
|
643
|
+
// Do NOT set tracesSampleRate — OTel controls sampling
|
|
644
|
+
integrations: [
|
|
645
|
+
otlpIntegration({
|
|
646
|
+
// Export OTel spans to Sentry via OTLP (default: true)
|
|
647
|
+
setupOtlpTracesExporter: true,
|
|
648
|
+
}),
|
|
649
|
+
],
|
|
650
|
+
});
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
**With a custom Collector endpoint:**
|
|
654
|
+
|
|
655
|
+
```javascript
|
|
656
|
+
Sentry.init({
|
|
657
|
+
dsn: process.env.SENTRY_DSN ?? "___DSN___",
|
|
658
|
+
integrations: [
|
|
659
|
+
otlpIntegration({
|
|
660
|
+
collectorUrl: "http://localhost:4318/v1/traces",
|
|
661
|
+
}),
|
|
662
|
+
],
|
|
663
|
+
});
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
#### Start Your App
|
|
667
|
+
|
|
668
|
+
Same `--import` pattern as the standard Node.js setup:
|
|
669
|
+
|
|
670
|
+
```bash
|
|
671
|
+
node --import ./instrument.mjs app.mjs
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
#### Key Differences from Standard `@sentry/node`
|
|
675
|
+
|
|
676
|
+
| Aspect | `@sentry/node` (standard) | `@sentry/node-core/light` (OTLP) |
|
|
677
|
+
| --------------------- | ------------------------------------- | ------------------------------------ |
|
|
678
|
+
| OTel bundled | ✅ Yes — built-in TracerProvider | ❌ No — uses your existing provider |
|
|
679
|
+
| Tracing control | `tracesSampleRate` in `Sentry.init()` | OTel SDK controls sampling |
|
|
680
|
+
| Auto-instrumentation | ✅ Built-in (HTTP, DB, etc.) | ❌ You manage OTel instrumentations |
|
|
681
|
+
| Profiling | ✅ Available | ❌ Not compatible |
|
|
682
|
+
| Error ↔ trace linking | ✅ Automatic | ✅ Automatic (via `otlpIntegration`) |
|
|
683
|
+
| Package size | Larger (includes OTel) | Smaller (light mode) |
|
|
684
|
+
|
|
685
|
+
---
|
|
686
|
+
|
|
687
|
+
### For Each Agreed Feature
|
|
688
|
+
|
|
689
|
+
Load the corresponding reference file and follow its steps:
|
|
690
|
+
|
|
691
|
+
| Feature | Reference file | Load when … |
|
|
692
|
+
| ---------------- | -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
|
|
693
|
+
| Error Monitoring | `./error-monitoring.md` | Always (baseline) — captures, scopes, enrichment, beforeSend |
|
|
694
|
+
| OTLP Integration | See [OTLP Integration](#otlp-integration-otel-first-projects--nodejs-only) above | OTel tracing detected — **replaces** native Tracing |
|
|
695
|
+
| Tracing | `./tracing.md` | OTel auto-instrumentation, custom spans, distributed tracing, sampling; **skip if OTel tracing detected** |
|
|
696
|
+
| Logging | `./logging.md` | Structured logs, `Sentry.logger.*`, log-to-trace correlation |
|
|
697
|
+
| Profiling | `./profiling.md` | Node.js only — CPU profiling, Bun/Deno gaps documented; **skip if OTel tracing detected** |
|
|
698
|
+
| Metrics | `./metrics.md` | Custom counters, gauges, distributions |
|
|
699
|
+
| Runtime Metrics | See inline below | Automatic memory, CPU, and event loop metrics for Node.js and Bun |
|
|
700
|
+
| Crons | `./crons.md` | Scheduled job monitoring, node-cron, Bull, Agenda, Deno.cron |
|
|
701
|
+
| AI Monitoring | `./ai-monitoring.md` | OpenAI, Anthropic, LangChain, Vercel AI, Google GenAI |
|
|
702
|
+
|
|
703
|
+
For each feature: read the reference file, follow its steps exactly, and verify before
|
|
704
|
+
moving on.
|
|
705
|
+
|
|
706
|
+
### Runtime Metrics
|
|
707
|
+
|
|
708
|
+
Automatically collect Node.js and Bun runtime health metrics (memory, CPU utilization,
|
|
709
|
+
event loop delay/utilization, uptime) at a configurable interval.
|
|
710
|
+
Metrics appear in Sentry’s Metrics product under the `node.runtime.*` / `bun.runtime.*`
|
|
711
|
+
namespace.
|
|
712
|
+
|
|
713
|
+
**Node.js** — add `nodeRuntimeMetricsIntegration()` to your `instrument.js`:
|
|
714
|
+
|
|
715
|
+
```javascript
|
|
716
|
+
const Sentry = require("@sentry/node");
|
|
717
|
+
|
|
718
|
+
Sentry.init({
|
|
719
|
+
dsn: process.env.SENTRY_DSN,
|
|
720
|
+
integrations: [
|
|
721
|
+
Sentry.nodeRuntimeMetricsIntegration(),
|
|
722
|
+
// Optional: change collection interval (default 30 000 ms)
|
|
723
|
+
// Sentry.nodeRuntimeMetricsIntegration({ collectionIntervalMs: 60_000 }),
|
|
724
|
+
],
|
|
725
|
+
});
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
Metrics collected by default: `node.runtime.mem.rss`, `node.runtime.mem.heap_used`,
|
|
729
|
+
`node.runtime.mem.heap_total`, `node.runtime.cpu.utilization`,
|
|
730
|
+
`node.runtime.event_loop.delay.p50`, `node.runtime.event_loop.delay.p99`,
|
|
731
|
+
`node.runtime.event_loop.utilization`, `node.runtime.process.uptime`.
|
|
732
|
+
|
|
733
|
+
**Bun** — add `bunRuntimeMetricsIntegration()` to your `instrument.ts`:
|
|
734
|
+
|
|
735
|
+
```typescript
|
|
736
|
+
import * as Sentry from "@sentry/bun";
|
|
737
|
+
import { bunRuntimeMetricsIntegration } from "@sentry/bun";
|
|
738
|
+
|
|
739
|
+
Sentry.init({
|
|
740
|
+
dsn: process.env.SENTRY_DSN,
|
|
741
|
+
integrations: [
|
|
742
|
+
bunRuntimeMetricsIntegration(),
|
|
743
|
+
// Optional: change collection interval (default 30 000 ms)
|
|
744
|
+
// bunRuntimeMetricsIntegration({ collectionIntervalMs: 60_000 }),
|
|
745
|
+
],
|
|
746
|
+
});
|
|
747
|
+
```
|
|
748
|
+
|
|
749
|
+
Metrics collected: same as Node.js except no event loop delay percentiles (unavailable
|
|
750
|
+
in Bun). Prefixed with `bun.runtime.*`.
|
|
751
|
+
|
|
752
|
+
---
|
|
753
|
+
|
|
754
|
+
## Configuration Reference
|
|
755
|
+
|
|
756
|
+
### `Sentry.init()` Core Options
|
|
757
|
+
|
|
758
|
+
| Option | Type | Default | Notes |
|
|
759
|
+
| ----------------------- | --------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
760
|
+
| `dsn` | `string` | — | Required. Also from `SENTRY_DSN` env var |
|
|
761
|
+
| `tracesSampleRate` | `number` | — | 0–1; required to enable tracing; **do not set when using OTLP path** |
|
|
762
|
+
| `dataCollection` | `object` | conservative unless set | Fine-grained control over auto-collected categories (`userInfo`, `cookies`, `httpHeaders`, `httpBodies`, `queryParams`, `genAI`). When omitted, the SDK falls back to `sendDefaultPii` (default `false`). Passing the object — even `{}` — flips unset categories to their permissive defaults; opt out per category. |
|
|
763
|
+
| `includeLocalVariables` | `boolean` | `false` | Add local variable values to stack frames (Node.js) |
|
|
764
|
+
| `enableLogs` | `boolean` | `false` | Enable Sentry Logs product (v9.41.0+) |
|
|
765
|
+
| `environment` | `string` | `"production"` | Also from `SENTRY_ENVIRONMENT` env var |
|
|
766
|
+
| `release` | `string` | — | Also from `SENTRY_RELEASE` env var |
|
|
767
|
+
| `debug` | `boolean` | `false` | Log SDK activity to console |
|
|
768
|
+
| `enabled` | `boolean` | `true` | Set `false` in tests to disable sending |
|
|
769
|
+
| `sampleRate` | `number` | `1.0` | Fraction of error events to send (0–1) |
|
|
770
|
+
| `shutdownTimeout` | `number` | `2000` | Milliseconds to flush events before process exit |
|
|
771
|
+
|
|
772
|
+
### `nativeNodeFetchIntegration()` Options
|
|
773
|
+
|
|
774
|
+
Configures outgoing `fetch`/`undici` span capture.
|
|
775
|
+
Since `@opentelemetry/instrumentation-undici@0.22.0`, response headers like
|
|
776
|
+
`content-length` are no longer captured automatically — use `headersToSpanAttributes` to
|
|
777
|
+
opt in:
|
|
778
|
+
|
|
779
|
+
```javascript
|
|
780
|
+
Sentry.init({
|
|
781
|
+
integrations: [
|
|
782
|
+
Sentry.nativeNodeFetchIntegration({
|
|
783
|
+
headersToSpanAttributes: {
|
|
784
|
+
requestHeaders: ["x-request-id"],
|
|
785
|
+
responseHeaders: ["content-length", "content-type"],
|
|
786
|
+
},
|
|
787
|
+
}),
|
|
788
|
+
],
|
|
789
|
+
});
|
|
790
|
+
```
|
|
791
|
+
|
|
792
|
+
| Option | Type | Default | Notes |
|
|
793
|
+
| ----------------------------------------- | ---------- | ------- | --------------------------------------------------- |
|
|
794
|
+
| `breadcrumbs` | `boolean` | `true` | Record breadcrumbs for outgoing fetch requests |
|
|
795
|
+
| `headersToSpanAttributes.requestHeaders` | `string[]` | — | Request header names to capture as span attributes |
|
|
796
|
+
| `headersToSpanAttributes.responseHeaders` | `string[]` | — | Response header names to capture as span attributes |
|
|
797
|
+
|
|
798
|
+
### `otlpIntegration()` Options (`@sentry/node-core/light/otlp`)
|
|
799
|
+
|
|
800
|
+
For OTel-first projects using `@sentry/node-core/light`. Import:
|
|
801
|
+
`import { otlpIntegration } from '@sentry/node-core/light/otlp'`.
|
|
802
|
+
|
|
803
|
+
| Option | Type | Default | Purpose |
|
|
804
|
+
| ------------------------- | --------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
805
|
+
| `setupOtlpTracesExporter` | `boolean` | `true` | Auto-configure OTLP exporter to send spans to Sentry; set `false` if you already export to your own Collector |
|
|
806
|
+
| `collectorUrl` | `string` | `undefined` | OTLP HTTP endpoint of an OTel Collector (e.g., `http://localhost:4318/v1/traces`); when set, spans are sent to the collector instead of the DSN-derived Sentry endpoint |
|
|
807
|
+
|
|
808
|
+
### Graceful Shutdown
|
|
809
|
+
|
|
810
|
+
Flush buffered events before process exit — important for short-lived scripts and
|
|
811
|
+
serverless:
|
|
812
|
+
|
|
813
|
+
```javascript
|
|
814
|
+
process.on("SIGTERM", async () => {
|
|
815
|
+
await Sentry.close(2000); // flush with 2s timeout
|
|
816
|
+
process.exit(0);
|
|
817
|
+
});
|
|
818
|
+
```
|
|
819
|
+
|
|
820
|
+
### Environment Variables
|
|
821
|
+
|
|
822
|
+
| Variable | Purpose | Runtime |
|
|
823
|
+
| -------------------- | ----------------------------------------------- | ---------- |
|
|
824
|
+
| `SENTRY_DSN` | DSN (alternative to hardcoding in `init()`) | All |
|
|
825
|
+
| `SENTRY_ENVIRONMENT` | Deployment environment | All |
|
|
826
|
+
| `SENTRY_RELEASE` | Release version string (auto-detected from git) | All |
|
|
827
|
+
| `SENTRY_AUTH_TOKEN` | Source map upload token | Build time |
|
|
828
|
+
| `SENTRY_ORG` | Org slug for source map upload | Build time |
|
|
829
|
+
| `SENTRY_PROJECT` | Project slug for source map upload | Build time |
|
|
830
|
+
| `NODE_OPTIONS` | Set `--import ./instrument.mjs` for ESM | Node.js |
|
|
831
|
+
|
|
832
|
+
### Source Maps (Node.js)
|
|
833
|
+
|
|
834
|
+
Readable stack traces in production require uploading source maps with `@sentry/cli` or
|
|
835
|
+
the webpack/esbuild/rollup plugins — for example, an inject + upload step in your build:
|
|
836
|
+
|
|
837
|
+
```json
|
|
838
|
+
{
|
|
839
|
+
"scripts": {
|
|
840
|
+
"build": "tsc && sentry-cli sourcemaps inject ./dist && sentry-cli sourcemaps upload ./dist"
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
Upload needs a `SENTRY_AUTH_TOKEN` (a build-time secret).
|
|
846
|
+
|
|
847
|
+
---
|
|
848
|
+
|
|
849
|
+
## Verification
|
|
850
|
+
|
|
851
|
+
After setup, verify Sentry is receiving events:
|
|
852
|
+
|
|
853
|
+
```javascript
|
|
854
|
+
// Add temporarily to your entry file or a test route, then remove
|
|
855
|
+
import * as Sentry from "@sentry/node"; // or @sentry/bun / @sentry/deno
|
|
856
|
+
|
|
857
|
+
Sentry.captureException(new Error("Sentry test error — delete me"));
|
|
858
|
+
```
|
|
859
|
+
|
|
860
|
+
Or trigger an unhandled exception:
|
|
861
|
+
|
|
862
|
+
```javascript
|
|
863
|
+
// In a route handler or startup — will be captured automatically
|
|
864
|
+
throw new Error("Sentry test error — delete me");
|
|
865
|
+
```
|
|
866
|
+
|
|
867
|
+
Then check your [Sentry Issues dashboard](https://sentry.io/issues/) — the error should
|
|
868
|
+
appear within ~30 seconds.
|
|
869
|
+
|
|
870
|
+
**Verification checklist:**
|
|
871
|
+
|
|
872
|
+
| Check | How |
|
|
873
|
+
| ------------------------------- | --------------------------------------------------- |
|
|
874
|
+
| Error captured | Throw in a handler, verify in Sentry Issues |
|
|
875
|
+
| Tracing working | Check Performance tab — should show HTTP spans |
|
|
876
|
+
| `includeLocalVariables` working | Stack frame in Sentry should show variable values |
|
|
877
|
+
| Source maps working | Stack trace shows readable file names, not minified |
|
|
878
|
+
|
|
879
|
+
---
|
|
880
|
+
|
|
881
|
+
## Phase 4: Cross-Link
|
|
882
|
+
|
|
883
|
+
After completing backend setup, check for companion services:
|
|
884
|
+
|
|
885
|
+
```bash
|
|
886
|
+
# Frontend companion
|
|
887
|
+
ls frontend/ web/ client/ ui/ 2>/dev/null
|
|
888
|
+
cat package.json 2>/dev/null | grep -E '"react"|"vue"|"svelte"|"next"'
|
|
889
|
+
|
|
890
|
+
# Other backend services
|
|
891
|
+
ls ../go.mod ../requirements.txt ../Gemfile 2>/dev/null
|
|
892
|
+
```
|
|
893
|
+
|
|
894
|
+
If a frontend, framework-specific SDK, or other backend is found, suggest the matching
|
|
895
|
+
skill:
|
|
896
|
+
|
|
897
|
+
**Dedicated JavaScript framework skills (prefer these over generic node-sdk):**
|
|
898
|
+
|
|
899
|
+
| Detected | Prefer skill | Why |
|
|
900
|
+
| ----------------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
901
|
+
| NestJS (`@nestjs/core` in `package.json`) | [[`nestjs`](../nestjs/index.md)](../nestjs/index.md) | Uses `@sentry/nestjs` with NestJS-native decorators, filters, and GraphQL support |
|
|
902
|
+
| Next.js (`next` in `package.json`) | [[`nextjs`](../nextjs/index.md)](../nextjs/index.md) | Three-runtime architecture (browser, server, edge), `withSentryConfig`, source map upload |
|
|
903
|
+
|
|
904
|
+
**Frontend companions:**
|
|
905
|
+
|
|
906
|
+
| Detected | Suggest |
|
|
907
|
+
| ------------------------------------- | ---------------------------------------------------- |
|
|
908
|
+
| React app (`react` in `package.json`) | [[`react`](../react/index.md)](../react/index.md) |
|
|
909
|
+
| Svelte/SvelteKit | [[`svelte`](../svelte/index.md)](../svelte/index.md) |
|
|
910
|
+
|
|
911
|
+
**Other backend companions:**
|
|
912
|
+
|
|
913
|
+
| Detected | Suggest |
|
|
914
|
+
| ----------------------------------------------------- | ---------------------------------------------------- |
|
|
915
|
+
| Go backend (`go.mod`) | [[`go`](../go/index.md)](../go/index.md) |
|
|
916
|
+
| Python backend (`requirements.txt`, `pyproject.toml`) | [[`python`](../python/index.md)](../python/index.md) |
|
|
917
|
+
| Ruby backend (`Gemfile`) | [[`ruby`](../ruby/index.md)](../ruby/index.md) |
|
|
918
|
+
|
|
919
|
+
Connecting frontend and backend with the same DSN or linked projects enables
|
|
920
|
+
**distributed tracing** — stack traces that span your browser, API server, and database
|
|
921
|
+
in a single trace view.
|
|
922
|
+
|
|
923
|
+
---
|
|
924
|
+
|
|
925
|
+
## Troubleshooting
|
|
926
|
+
|
|
927
|
+
| Issue | Cause | Solution |
|
|
928
|
+
| --------------------------------------------- | ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
|
|
929
|
+
| Events not appearing | `instrument.js` loaded too late | Ensure it’s the first `require()` / loaded via `--import` or `--preload` |
|
|
930
|
+
| Tracing spans missing | `tracesSampleRate` not set | Add `tracesSampleRate: 1.0` to `Sentry.init()` |
|
|
931
|
+
| ESM instrumentation not working | Missing `--import` flag | Run with `node --import ./instrument.mjs`; `import "./instrument.mjs"` inside app is not sufficient |
|
|
932
|
+
| `@sentry/profiling-node` install fails on Bun | Native addon incompatible | Profiling is not supported on Bun — remove `@sentry/profiling-node` |
|
|
933
|
+
| Deno: events not sent | Missing `--allow-net` permission | Run with `--allow-net=o<ORG_ID>.ingest.sentry.io` |
|
|
934
|
+
| Deno: `deno.land/x/sentry` not working | Deprecated and frozen at v8.55.0 | Switch to `npm:@sentry/deno` specifier |
|
|
935
|
+
| `includeLocalVariables` not showing values | Integration not activated or minified code | Ensure `includeLocalVariables: true` in init; check source maps |
|
|
936
|
+
| NestJS: errors not captured | Wrong SDK or missing filter | Use [[`nestjs`](../nestjs/index.md)](../nestjs/index.md) — NestJS needs `@sentry/nestjs`, not `@sentry/node` |
|
|
937
|
+
| Hapi: `setupHapiErrorHandler` timing issue | Not awaited | Must `await Sentry.setupHapiErrorHandler(server)` before `server.start()` |
|
|
938
|
+
| Shutdown: events lost | Process exits before flush | Add `await Sentry.close(2000)` in SIGTERM/SIGINT handler |
|
|
939
|
+
| Stack traces show minified code | Source maps not uploaded | Configure `@sentry/cli` source map upload in build step |
|
|
940
|
+
| No traces appearing (OTLP) | Missing `@opentelemetry/*` packages or `otlpIntegration` not added | Verify `@opentelemetry/sdk-trace-node` is installed; add `otlpIntegration()` to `integrations`; do **not** set `tracesSampleRate` |
|
|
941
|
+
| OTLP: errors not linked to traces | `otlpIntegration` not registered | Ensure `otlpIntegration()` is in the `integrations` array — it registers the propagation context that links errors to OTel traces |
|
|
942
|
+
| Profiling not starting (OTLP) | Profiling requires `tracesSampleRate` | Profiling is **not compatible** with the OTLP path; use the standard `@sentry/node` setup instead |
|