@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,373 @@
|
|
|
1
|
+
# Profiling — Sentry Node.js SDK
|
|
2
|
+
|
|
3
|
+
> Node.js profiling: `@sentry/profiling-node` — must match your `@sentry/node` version
|
|
4
|
+
> exactly\
|
|
5
|
+
> **Bun and Deno are NOT supported.** The profiler is a native C++ addon (`node-gyp`)
|
|
6
|
+
> that only runs in Node.js.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
Profiling captures V8 CPU call stacks at ~100 samples/second alongside your traces.
|
|
13
|
+
Profiles attach to spans, giving you flame graphs to identify hot paths directly from a
|
|
14
|
+
slow trace.
|
|
15
|
+
|
|
16
|
+
Profiling is **Node.js only**:
|
|
17
|
+
|
|
18
|
+
| Runtime | Profiling | Notes |
|
|
19
|
+
| ----------- | --------- | ----------------------------------------- |
|
|
20
|
+
| Node.js ≥18 | ✅ | Full support via `@sentry/profiling-node` |
|
|
21
|
+
| Bun | ❌ | Native addon not supported |
|
|
22
|
+
| Deno | ❌ | Native addon not supported |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## How Profiling Relates to Tracing
|
|
27
|
+
|
|
28
|
+
Profiles attach to **spans** — they require tracing to be enabled:
|
|
29
|
+
|
|
30
|
+
1. `tracesSampleRate` / `tracesSampler` decides whether a request is traced at all
|
|
31
|
+
2. `profileSessionSampleRate` decides whether the session opts into profiling
|
|
32
|
+
3. A profile is only collected when **both** sampling decisions are “yes”
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
tracesSampleRate: 0.1 + profileSessionSampleRate: 0.5
|
|
36
|
+
→ ~5% of requests will have both a trace AND a profile attached
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
In `trace` lifecycle mode, you can drill from a slow span in the Performance UI directly
|
|
40
|
+
into a flame graph:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Trace: "POST /api/checkout" (850ms)
|
|
44
|
+
├── "validateCart" (45ms) → [Profile attached] → shows DB driver hot paths
|
|
45
|
+
├── "processPayment" (620ms)
|
|
46
|
+
└── "updateInventory" (185ms) → [Profile attached] → shows ORM overhead
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Installation
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
npm install @sentry/profiling-node --save
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
> ⚠️ **Version pinning is required.** `@sentry/profiling-node` must exactly match your
|
|
58
|
+
> `@sentry/node` version.
|
|
59
|
+
> Mismatched versions cause silent failures or startup crashes.
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Both must be the same version
|
|
63
|
+
npm install @sentry/node@latest @sentry/profiling-node@latest
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## SDK Configuration
|
|
69
|
+
|
|
70
|
+
### Trace Mode (Recommended)
|
|
71
|
+
|
|
72
|
+
Profiles auto-attach to all sampled spans with no additional code:
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
import * as Sentry from "@sentry/node";
|
|
76
|
+
import { nodeProfilingIntegration } from "@sentry/profiling-node";
|
|
77
|
+
|
|
78
|
+
Sentry.init({
|
|
79
|
+
dsn: process.env.SENTRY_DSN,
|
|
80
|
+
|
|
81
|
+
integrations: [nodeProfilingIntegration()],
|
|
82
|
+
|
|
83
|
+
tracesSampleRate: 1.0,
|
|
84
|
+
|
|
85
|
+
// Session-level sampling: decision made once at process startup
|
|
86
|
+
profileSessionSampleRate: process.env.NODE_ENV === "production" ? 0.1 : 1.0,
|
|
87
|
+
|
|
88
|
+
// "trace" = profiles auto-attach to every sampled span
|
|
89
|
+
profileLifecycle: "trace",
|
|
90
|
+
});
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Manual Mode
|
|
94
|
+
|
|
95
|
+
Start and stop profiling around specific code paths:
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
import * as Sentry from "@sentry/node";
|
|
99
|
+
import { nodeProfilingIntegration } from "@sentry/profiling-node";
|
|
100
|
+
|
|
101
|
+
Sentry.init({
|
|
102
|
+
dsn: process.env.SENTRY_DSN,
|
|
103
|
+
integrations: [nodeProfilingIntegration()],
|
|
104
|
+
tracesSampleRate: 1.0,
|
|
105
|
+
profileSessionSampleRate: 1.0,
|
|
106
|
+
profileLifecycle: "manual",
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
// Explicit start/stop around critical code:
|
|
110
|
+
Sentry.profiler.startProfiler();
|
|
111
|
+
await heavyComputation();
|
|
112
|
+
Sentry.profiler.stopProfiler();
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Continuous Profiling
|
|
118
|
+
|
|
119
|
+
For long-running processes, batch jobs, or background workers that don’t map cleanly to
|
|
120
|
+
request spans, use the profiler API directly:
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
import * as Sentry from "@sentry/node";
|
|
124
|
+
import { nodeProfilingIntegration } from "@sentry/profiling-node";
|
|
125
|
+
|
|
126
|
+
Sentry.init({
|
|
127
|
+
dsn: process.env.SENTRY_DSN,
|
|
128
|
+
integrations: [nodeProfilingIntegration()],
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
// Start profiling at process startup
|
|
132
|
+
Sentry.profiler.startProfiler();
|
|
133
|
+
|
|
134
|
+
// Profile is chunked automatically into ~60-second intervals and uploaded
|
|
135
|
+
// All spans created during this window have profile data attached
|
|
136
|
+
|
|
137
|
+
// Stop when done (e.g. graceful shutdown)
|
|
138
|
+
process.on("SIGTERM", () => {
|
|
139
|
+
Sentry.profiler.stopProfiler();
|
|
140
|
+
process.exit(0);
|
|
141
|
+
});
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Profile Chunk Architecture
|
|
145
|
+
|
|
146
|
+
The V2 profiler divides data into 60-second chunks that upload automatically:
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
Process lifetime:
|
|
150
|
+
┌─── 60 seconds ───┬─── 60 seconds ───┬─── 60 seconds ───┐
|
|
151
|
+
│ Chunk 1 │ Chunk 2 │ Chunk 3 │
|
|
152
|
+
│ Spans: [...] │ Spans: [...] │ Spans: [...] │
|
|
153
|
+
│ Sent at 60s │ Sent at 120s │ Sent at 180s │
|
|
154
|
+
└──────────────────┴──────────────────┴──────────────────┘
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
This means there’s no 30-second max like in the legacy V1 API — the profiler runs as
|
|
158
|
+
long as your process does.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Profiler API Reference
|
|
163
|
+
|
|
164
|
+
### `Sentry.profiler.startProfiler()`
|
|
165
|
+
|
|
166
|
+
Starts the V8 CpuProfiler.
|
|
167
|
+
Call this once at process startup or before the code you want to profile.
|
|
168
|
+
|
|
169
|
+
```typescript
|
|
170
|
+
Sentry.profiler.startProfiler();
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
- No-ops gracefully if already running
|
|
174
|
+
- Takes effect immediately
|
|
175
|
+
- Overhead is low; safe to call at startup in production
|
|
176
|
+
|
|
177
|
+
### `Sentry.profiler.stopProfiler()`
|
|
178
|
+
|
|
179
|
+
Stops the profiler and flushes remaining profile data to Sentry.
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
Sentry.profiler.stopProfiler();
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
- Flushes the current in-progress chunk
|
|
186
|
+
- Call on graceful shutdown to avoid losing the last partial chunk
|
|
187
|
+
|
|
188
|
+
### Manual Start/Stop Pattern
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
// Profile a specific batch job, not the entire process
|
|
192
|
+
async function runNightlyBatch() {
|
|
193
|
+
Sentry.profiler.startProfiler();
|
|
194
|
+
try {
|
|
195
|
+
await Sentry.startSpan({ op: "batch", name: "nightly-sync" }, async () => {
|
|
196
|
+
await syncUsers();
|
|
197
|
+
await syncOrders();
|
|
198
|
+
await syncInventory();
|
|
199
|
+
});
|
|
200
|
+
} finally {
|
|
201
|
+
Sentry.profiler.stopProfiler();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Configuration Reference
|
|
209
|
+
|
|
210
|
+
| Parameter | Type | Description |
|
|
211
|
+
| ---------------------------- | --------------------- | ------------------------------------------------------------------------------------------ |
|
|
212
|
+
| `profileSessionSampleRate` | `0.0–1.0` | Session-level sampling. Decision made once at process startup. |
|
|
213
|
+
| `profileLifecycle` | `"trace" \| "manual"` | `"trace"` = auto-attach to spans; `"manual"` = explicit `startProfiler()`/`stopProfiler()` |
|
|
214
|
+
| `nodeProfilingIntegration()` | integration | Enables V8 CpuProfiler. Must be in `integrations` array. |
|
|
215
|
+
|
|
216
|
+
### `profileSessionSampleRate` Semantics
|
|
217
|
+
|
|
218
|
+
The profiling sampling decision is made **once per process startup** — not per request.
|
|
219
|
+
|
|
220
|
+
A “profiling session” either opts in or opts out for its entire lifetime.
|
|
221
|
+
Within a profiling session, every traced span gets a profile attached (in `trace` mode).
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
// 10% of Node.js processes will profile all their requests
|
|
225
|
+
profileSessionSampleRate: 0.1;
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### `profileLifecycle` Modes
|
|
229
|
+
|
|
230
|
+
| Mode | Trigger | Best for |
|
|
231
|
+
| ---------- | ------------------------------------ | ----------------------------------------- |
|
|
232
|
+
| `"trace"` | Auto-attached to every sampled span | Broad production coverage, web servers |
|
|
233
|
+
| `"manual"` | `startProfiler()` / `stopProfiler()` | Batch jobs, specific hot paths, CLI tools |
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Supported Platforms
|
|
238
|
+
|
|
239
|
+
Precompiled native binaries are available for:
|
|
240
|
+
|
|
241
|
+
| OS | Architecture | Node.js |
|
|
242
|
+
| ------------------- | --------------------- | ------- |
|
|
243
|
+
| macOS | x64 (Intel) | 18–24 |
|
|
244
|
+
| macOS | ARM64 (Apple Silicon) | 18–24 |
|
|
245
|
+
| Linux (glibc) | x64 | 18–24 |
|
|
246
|
+
| Linux (glibc) | ARM64 | 18–24 |
|
|
247
|
+
| Linux (musl/Alpine) | x64 | 18–24 |
|
|
248
|
+
| Linux (musl/Alpine) | ARM64 | 18–24 |
|
|
249
|
+
| Windows | x64 | 18–24 |
|
|
250
|
+
|
|
251
|
+
> ❌ **FreeBSD, 32-bit systems, Bun, and Deno are not supported.**\
|
|
252
|
+
> The native addon requires Node.js — it cannot run in other runtimes.
|
|
253
|
+
|
|
254
|
+
### Alpine Linux / Docker
|
|
255
|
+
|
|
256
|
+
The musl libc variant is included automatically.
|
|
257
|
+
If you see missing binary errors on Alpine:
|
|
258
|
+
|
|
259
|
+
```dockerfile
|
|
260
|
+
# Ensure you're installing native dependencies
|
|
261
|
+
RUN npm install --include=optional
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Or rebuild from source:
|
|
265
|
+
|
|
266
|
+
```dockerfile
|
|
267
|
+
RUN apk add --no-cache python3 make g++ && npm rebuild @sentry/profiling-node
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## Environment Variables
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
# Override profiler binary path (for custom builds or non-standard environments)
|
|
276
|
+
SENTRY_PROFILER_BINARY_PATH=/custom/path/sentry_cpu_profiler.node
|
|
277
|
+
|
|
278
|
+
# Override binary directory
|
|
279
|
+
SENTRY_PROFILER_BINARY_DIR=/path/to/dir
|
|
280
|
+
|
|
281
|
+
# Profiler logging mode:
|
|
282
|
+
# "eager" (default) — faster startProfiler calls, slightly more CPU overhead
|
|
283
|
+
# "lazy" — lower CPU overhead, slightly slower startProfiler
|
|
284
|
+
SENTRY_PROFILER_LOGGING_MODE=lazy node server.js
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Production Recommendations
|
|
290
|
+
|
|
291
|
+
```typescript
|
|
292
|
+
Sentry.init({
|
|
293
|
+
integrations: [nodeProfilingIntegration()],
|
|
294
|
+
tracesSampleRate: process.env.NODE_ENV === "production" ? 0.1 : 1.0,
|
|
295
|
+
profileSessionSampleRate: process.env.NODE_ENV === "production" ? 0.1 : 1.0,
|
|
296
|
+
profileLifecycle: "trace",
|
|
297
|
+
});
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**Performance impact notes:**
|
|
301
|
+
|
|
302
|
+
- **Sampling rate (~100Hz):** The V8 CpuProfiler adds CPU overhead.
|
|
303
|
+
Test with realistic load before deploying `profileSessionSampleRate: 1.0` to
|
|
304
|
+
high-traffic production.
|
|
305
|
+
- **Memory:** Each 60-second chunk uses ~10–20 MB of buffer.
|
|
306
|
+
Capped at 50 chunks (~100 MB max).
|
|
307
|
+
- **Network:** One profiling upload per 60-second window per process.
|
|
308
|
+
|
|
309
|
+
> “For high-throughput environments, we recommend testing prior to deployment to ensure
|
|
310
|
+
> that your service’s performance characteristics maintain expectations.”
|
|
311
|
+
> — Sentry docs
|
|
312
|
+
|
|
313
|
+
For high-traffic servers, start conservative:
|
|
314
|
+
|
|
315
|
+
```typescript
|
|
316
|
+
// Start at 1–5% and increase after measuring overhead
|
|
317
|
+
profileSessionSampleRate: 0.01;
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## Complete Setup Example
|
|
323
|
+
|
|
324
|
+
```typescript
|
|
325
|
+
// instrument.ts (loaded before app code)
|
|
326
|
+
import * as Sentry from "@sentry/node";
|
|
327
|
+
import { nodeProfilingIntegration } from "@sentry/profiling-node";
|
|
328
|
+
|
|
329
|
+
Sentry.init({
|
|
330
|
+
dsn: process.env.SENTRY_DSN,
|
|
331
|
+
|
|
332
|
+
integrations: [nodeProfilingIntegration()],
|
|
333
|
+
|
|
334
|
+
tracesSampleRate: process.env.NODE_ENV === "development" ? 1.0 : 0.1,
|
|
335
|
+
profileSessionSampleRate: process.env.NODE_ENV === "development" ? 1.0 : 0.1,
|
|
336
|
+
profileLifecycle: "trace",
|
|
337
|
+
});
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
```typescript
|
|
341
|
+
// app.ts
|
|
342
|
+
import "./instrument"; // Must be first import
|
|
343
|
+
import express from "express";
|
|
344
|
+
import * as Sentry from "@sentry/node";
|
|
345
|
+
|
|
346
|
+
const app = express();
|
|
347
|
+
|
|
348
|
+
app.get("/api/users", async (req, res) => {
|
|
349
|
+
// Automatically traced + profiled (in profiling sessions)
|
|
350
|
+
const users = await db.query("SELECT * FROM users");
|
|
351
|
+
res.json(users);
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
Sentry.setupExpressErrorHandler(app);
|
|
355
|
+
app.listen(3000);
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
## Troubleshooting
|
|
361
|
+
|
|
362
|
+
| Issue | Solution |
|
|
363
|
+
| --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
364
|
+
| No profiles appearing in Sentry | Verify `@sentry/profiling-node` version exactly matches `@sentry/node` version (`npm ls @sentry/profiling-node`) |
|
|
365
|
+
| `Cannot find module '@sentry/profiling-node'` | Run `npm install @sentry/profiling-node` and confirm it’s in `dependencies` (not `devDependencies`) |
|
|
366
|
+
| Native addon fails to load | Check you’re on Node.js ≥18; check OS/arch is in the supported platforms table |
|
|
367
|
+
| Profiles not linked to spans | Confirm `profileLifecycle: "trace"` is set and `tracesSampleRate` > 0; both are required |
|
|
368
|
+
| High CPU usage | Lower `profileSessionSampleRate`; use `SENTRY_PROFILER_LOGGING_MODE=lazy` |
|
|
369
|
+
| Alpine/musl Linux binary error | Run `npm rebuild @sentry/profiling-node` after installing build tools (`apk add python3 make g++`) |
|
|
370
|
+
| Profiling works locally but not in Docker | Ensure `npm install --include=optional` runs in the Docker build; musl variant must be present |
|
|
371
|
+
| Flame graphs show minified names | Upload source maps via `authToken` in Sentry config; use `NODE_OPTIONS=--enable-source-maps` |
|
|
372
|
+
| Last ~60s of data lost on shutdown | Call `Sentry.profiler.stopProfiler()` in your SIGTERM/SIGINT handler before `process.exit()` |
|
|
373
|
+
| Bun or Deno profiling doesn’t work | Native addon only supports Node.js — profiling is not available in Bun or Deno |
|