@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,354 @@
|
|
|
1
|
+
# User Feedback — Sentry Browser SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/browser` ≥7.85.0 for `feedbackIntegration()`\
|
|
4
|
+
> Screenshot capture: requires ≥8.0.0\
|
|
5
|
+
> Self-hosted Sentry: requires version ≥24.4.2
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Two Approaches
|
|
10
|
+
|
|
11
|
+
| Approach | When to Use |
|
|
12
|
+
| ------------------------------------ | -------------------------------------------------------------------------------- |
|
|
13
|
+
| **`feedbackIntegration()` widget** | Collect feedback anywhere — no error required; embeds a button in the UI |
|
|
14
|
+
| **`showReportDialog()` crash modal** | Triggered after an error is captured; prompts the user to describe what happened |
|
|
15
|
+
|
|
16
|
+
Both approaches can be used together.
|
|
17
|
+
The widget is general-purpose; the crash modal is specifically for error-linked
|
|
18
|
+
feedback.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Approach 1: Feedback Widget (`feedbackIntegration`)
|
|
23
|
+
|
|
24
|
+
### Basic Setup
|
|
25
|
+
|
|
26
|
+
```javascript
|
|
27
|
+
import * as Sentry from "@sentry/browser";
|
|
28
|
+
|
|
29
|
+
Sentry.init({
|
|
30
|
+
dsn: "___PUBLIC_DSN___",
|
|
31
|
+
integrations: [
|
|
32
|
+
Sentry.feedbackIntegration({
|
|
33
|
+
colorScheme: "system", // "light" | "dark" | "system"
|
|
34
|
+
}),
|
|
35
|
+
],
|
|
36
|
+
});
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
A “Report a Bug” button appears in the bottom-right corner by default.
|
|
40
|
+
Clicking it opens a modal form.
|
|
41
|
+
|
|
42
|
+
### Lazy Loading via Loader Script
|
|
43
|
+
|
|
44
|
+
```javascript
|
|
45
|
+
window.sentryOnLoad = function () {
|
|
46
|
+
Sentry.init({ dsn: "___PUBLIC_DSN___" });
|
|
47
|
+
|
|
48
|
+
Sentry.lazyLoadIntegration("feedbackIntegration")
|
|
49
|
+
.then((feedbackIntegration) => {
|
|
50
|
+
Sentry.addIntegration(
|
|
51
|
+
feedbackIntegration({
|
|
52
|
+
colorScheme: "system",
|
|
53
|
+
}),
|
|
54
|
+
);
|
|
55
|
+
})
|
|
56
|
+
.catch(() => {
|
|
57
|
+
// Network error — User Feedback widget not loaded
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### CDN Bundle Options
|
|
63
|
+
|
|
64
|
+
```html
|
|
65
|
+
<!-- Feedback only (lightest bundle) -->
|
|
66
|
+
<script
|
|
67
|
+
src="https://browser.sentry-cdn.com/10.42.0/bundle.feedback.min.js"
|
|
68
|
+
crossorigin="anonymous"
|
|
69
|
+
></script>
|
|
70
|
+
|
|
71
|
+
<!-- With tracing and replay -->
|
|
72
|
+
<script
|
|
73
|
+
src="https://browser.sentry-cdn.com/10.42.0/bundle.tracing.replay.feedback.min.js"
|
|
74
|
+
crossorigin="anonymous"
|
|
75
|
+
></script>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Configuration Options
|
|
79
|
+
|
|
80
|
+
#### Appearance
|
|
81
|
+
|
|
82
|
+
| Option | Type | Default | Description |
|
|
83
|
+
| ------------------- | ----------------------------------- | ------------------- | ------------------------------------------------ |
|
|
84
|
+
| `colorScheme` | `'light'` \| `'dark'` \| `'system'` | `'system'` | Widget color theme. |
|
|
85
|
+
| `buttonLabel` | `string` | `"Report a Bug"` | Text on the trigger button. |
|
|
86
|
+
| `submitButtonLabel` | `string` | `"Send Bug Report"` | Text on the form’s submit button. |
|
|
87
|
+
| `cancelButtonLabel` | `string` | `"Cancel"` | Text on the cancel button. |
|
|
88
|
+
| `formTitle` | `string` | `"Report a Bug"` | Title displayed in the feedback form. |
|
|
89
|
+
| `showBranding` | `boolean` | `true` | Show “Powered by Sentry” branding in the widget. |
|
|
90
|
+
|
|
91
|
+
#### Form Fields
|
|
92
|
+
|
|
93
|
+
| Option | Type | Default | Description |
|
|
94
|
+
| -------------------- | --------- | -------------------------- | ------------------------------ |
|
|
95
|
+
| `showName` | `boolean` | `true` | Show the name input field. |
|
|
96
|
+
| `showEmail` | `boolean` | `true` | Show the email input field. |
|
|
97
|
+
| `isNameRequired` | `boolean` | `false` | Make name field required. |
|
|
98
|
+
| `isEmailRequired` | `boolean` | `false` | Make email field required. |
|
|
99
|
+
| `namePlaceholder` | `string` | `"Your Name"` | Placeholder for name field. |
|
|
100
|
+
| `emailPlaceholder` | `string` | `"your.email@example.org"` | Placeholder for email field. |
|
|
101
|
+
| `messagePlaceholder` | `string` | `"What's the bug? ..."` | Placeholder for message field. |
|
|
102
|
+
|
|
103
|
+
#### Positioning
|
|
104
|
+
|
|
105
|
+
| Option | Type | Default | Description |
|
|
106
|
+
| ---------- | -------------------------------------------------------------------- | ---------------- | ------------------------------------- |
|
|
107
|
+
| `position` | `'bottom-right'` \| `'bottom-left'` \| `'top-right'` \| `'top-left'` | `'bottom-right'` | Where to position the trigger button. |
|
|
108
|
+
|
|
109
|
+
#### Behaviour
|
|
110
|
+
|
|
111
|
+
| Option | Type | Default | Description |
|
|
112
|
+
| ------------------ | ------------------------ | ------- | ------------------------------------------------------------------------------------------------ |
|
|
113
|
+
| `autoInject` | `boolean` | `true` | Automatically inject the trigger button into the DOM. Set `false` to control placement manually. |
|
|
114
|
+
| `enableScreenshot` | `boolean` | `true` | Allow users to attach a screenshot. Requires SDK ≥8.0.0. |
|
|
115
|
+
| `tags` | `Record<string, string>` | `{}` | Additional tags to attach to every submitted feedback event. |
|
|
116
|
+
|
|
117
|
+
### Pre-fill User Information
|
|
118
|
+
|
|
119
|
+
```javascript
|
|
120
|
+
Sentry.init({
|
|
121
|
+
dsn: "___PUBLIC_DSN___",
|
|
122
|
+
integrations: [
|
|
123
|
+
Sentry.feedbackIntegration({
|
|
124
|
+
// Pre-fill form with logged-in user's details
|
|
125
|
+
}),
|
|
126
|
+
],
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// After authentication
|
|
130
|
+
Sentry.setUser({
|
|
131
|
+
email: "user@example.com",
|
|
132
|
+
name: "Jane Smith",
|
|
133
|
+
});
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
When `Sentry.setUser()` is called, the feedback form auto-populates name and email
|
|
137
|
+
fields.
|
|
138
|
+
|
|
139
|
+
### Manual Widget Control (Custom Button)
|
|
140
|
+
|
|
141
|
+
Disable auto-inject and open the widget programmatically from your own button:
|
|
142
|
+
|
|
143
|
+
```javascript
|
|
144
|
+
Sentry.init({
|
|
145
|
+
dsn: "___PUBLIC_DSN___",
|
|
146
|
+
integrations: [
|
|
147
|
+
Sentry.feedbackIntegration({
|
|
148
|
+
autoInject: false, // Don't render Sentry's trigger button
|
|
149
|
+
}),
|
|
150
|
+
],
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
// Open the widget from your own UI element
|
|
154
|
+
document.getElementById("my-feedback-btn").addEventListener("click", () => {
|
|
155
|
+
const feedback = Sentry.getFeedback();
|
|
156
|
+
if (feedback) {
|
|
157
|
+
feedback.openDialog();
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Approach 2: Programmatic Feedback (`captureFeedback`)
|
|
165
|
+
|
|
166
|
+
Use a completely custom form UI and submit feedback via the API:
|
|
167
|
+
|
|
168
|
+
```javascript
|
|
169
|
+
// Minimal — only message is required
|
|
170
|
+
Sentry.captureFeedback({
|
|
171
|
+
name: "Jane Smith",
|
|
172
|
+
email: "jane@example.com",
|
|
173
|
+
message: "The checkout button doesn't work on mobile.",
|
|
174
|
+
});
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### With Tags and Attachments
|
|
178
|
+
|
|
179
|
+
```javascript
|
|
180
|
+
// Attach a screenshot as a file
|
|
181
|
+
const screenshotDataUrl = "data:image/jpeg;base64,...";
|
|
182
|
+
const res = await fetch(screenshotDataUrl);
|
|
183
|
+
const buffer = await res.arrayBuffer();
|
|
184
|
+
|
|
185
|
+
Sentry.captureFeedback(
|
|
186
|
+
{
|
|
187
|
+
name: "Jane Smith",
|
|
188
|
+
email: "jane@example.com",
|
|
189
|
+
message: "The checkout button doesn't work on mobile.",
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
captureContext: {
|
|
193
|
+
tags: { page: "checkout", device: "mobile" },
|
|
194
|
+
},
|
|
195
|
+
attachments: [
|
|
196
|
+
{
|
|
197
|
+
filename: "screenshot.png",
|
|
198
|
+
data: new Uint8Array(buffer),
|
|
199
|
+
},
|
|
200
|
+
],
|
|
201
|
+
},
|
|
202
|
+
);
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Linking Feedback to a Specific Error
|
|
206
|
+
|
|
207
|
+
```javascript
|
|
208
|
+
try {
|
|
209
|
+
await submitOrder();
|
|
210
|
+
} catch (err) {
|
|
211
|
+
const eventId = Sentry.captureException(err);
|
|
212
|
+
|
|
213
|
+
Sentry.captureFeedback({
|
|
214
|
+
message: "Something went wrong during checkout.",
|
|
215
|
+
associatedEventId: eventId, // Links this feedback to the captured error
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### `captureFeedback` Parameters
|
|
221
|
+
|
|
222
|
+
| Parameter | Required | Description |
|
|
223
|
+
| ------------------- | -------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
224
|
+
| `message` | ✅ | The feedback text from the user |
|
|
225
|
+
| `name` | ❌ | User’s name |
|
|
226
|
+
| `email` | ❌ | User’s email |
|
|
227
|
+
| `associatedEventId` | ❌ | Links feedback to a specific Sentry event (use `Sentry.lastEventId()` or the return value of `captureException`) |
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Approach 3: Crash-Report Modal (`showReportDialog`)
|
|
232
|
+
|
|
233
|
+
Show a modal prompting users to describe what happened when an error occurs.
|
|
234
|
+
Ideal for “something went wrong” pages or after unhandled errors.
|
|
235
|
+
|
|
236
|
+
### Basic Setup
|
|
237
|
+
|
|
238
|
+
```javascript
|
|
239
|
+
Sentry.init({
|
|
240
|
+
dsn: "___PUBLIC_DSN___",
|
|
241
|
+
beforeSend(event) {
|
|
242
|
+
if (event.exception && event.event_id) {
|
|
243
|
+
Sentry.showReportDialog({ eventId: event.event_id });
|
|
244
|
+
}
|
|
245
|
+
return event;
|
|
246
|
+
},
|
|
247
|
+
});
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### On a 500 Error Page
|
|
251
|
+
|
|
252
|
+
```html
|
|
253
|
+
<script>
|
|
254
|
+
Sentry.init({ dsn: "___PUBLIC_DSN___" });
|
|
255
|
+
</script>
|
|
256
|
+
|
|
257
|
+
<script>
|
|
258
|
+
// eventId is provided by your server-side Sentry SDK after capturing the error
|
|
259
|
+
Sentry.showReportDialog({ eventId: "{{ sentry_event_id }}" });
|
|
260
|
+
</script>
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### After Manual `captureException`
|
|
264
|
+
|
|
265
|
+
```javascript
|
|
266
|
+
try {
|
|
267
|
+
await riskyOperation();
|
|
268
|
+
} catch (err) {
|
|
269
|
+
const eventId = Sentry.captureException(err);
|
|
270
|
+
Sentry.showReportDialog({ eventId });
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### `showReportDialog` Options
|
|
275
|
+
|
|
276
|
+
| Option | Required | Description |
|
|
277
|
+
| ------------- | -------- | -------------------------------------------------- |
|
|
278
|
+
| `eventId` | ✅ | The Sentry event ID to associate the feedback with |
|
|
279
|
+
| `user.name` | ❌ | Pre-fill user’s name |
|
|
280
|
+
| `user.email` | ❌ | Pre-fill user’s email |
|
|
281
|
+
| `lang` | ❌ | Dialog language code (e.g., `"de"`, `"fr"`) |
|
|
282
|
+
| `title` | ❌ | Override dialog title |
|
|
283
|
+
| `subtitle` | ❌ | Override dialog subtitle |
|
|
284
|
+
| `subtitle2` | ❌ | Override second subtitle line |
|
|
285
|
+
| `labelSubmit` | ❌ | Override submit button label |
|
|
286
|
+
|
|
287
|
+
The modal collects: **user name, email, and a description** — paired with the original
|
|
288
|
+
captured error event.
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## Screenshot Capture
|
|
293
|
+
|
|
294
|
+
- Available on SDK **v8.0.0+**
|
|
295
|
+
- Enabled by default via `enableScreenshot: true` on `feedbackIntegration()`
|
|
296
|
+
- Auto-hidden on mobile devices
|
|
297
|
+
- Screenshots count against your **attachment quota** (1GB standard)
|
|
298
|
+
|
|
299
|
+
```javascript
|
|
300
|
+
Sentry.feedbackIntegration({
|
|
301
|
+
enableScreenshot: true, // default — can set false to disable
|
|
302
|
+
});
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## Session Replay Integration
|
|
308
|
+
|
|
309
|
+
When Session Replay is configured alongside User Feedback, submitted feedback links to
|
|
310
|
+
the user’s replay:
|
|
311
|
+
|
|
312
|
+
```javascript
|
|
313
|
+
Sentry.init({
|
|
314
|
+
dsn: "___PUBLIC_DSN___",
|
|
315
|
+
replaysOnErrorSampleRate: 1.0, // Buffer replays for error sessions
|
|
316
|
+
integrations: [Sentry.replayIntegration(), Sentry.feedbackIntegration({ colorScheme: "system" })],
|
|
317
|
+
});
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
The system buffers up to **30 seconds** when the feedback widget opens.
|
|
321
|
+
This enables viewing the replay alongside the submitted feedback in Sentry.
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## Best Practices
|
|
326
|
+
|
|
327
|
+
- **Use `feedbackIntegration()` for proactive collection** — don’t wait for errors; a
|
|
328
|
+
persistent feedback button catches issues that never throw exceptions
|
|
329
|
+
- **Pre-fill user info** — call `Sentry.setUser()` after login so users don’t have to
|
|
330
|
+
type their email each time
|
|
331
|
+
- **Combine crash modal with `beforeSend`** — automatic prompting after errors maximizes
|
|
332
|
+
feedback capture
|
|
333
|
+
- **Link programmatic feedback to events** — use `associatedEventId` so feedback appears
|
|
334
|
+
alongside error context in Sentry
|
|
335
|
+
- **Set `autoInject: false`** for branded UI — implement your own trigger button to
|
|
336
|
+
match your design system
|
|
337
|
+
- **Keep `showReportDialog` for 500 pages** — server-rendered error pages are the
|
|
338
|
+
primary use case; pass the server-side event ID to the client
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## Troubleshooting
|
|
343
|
+
|
|
344
|
+
| Issue | Solution |
|
|
345
|
+
| --------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
|
|
346
|
+
| Widget doesn’t appear | Check that `feedbackIntegration()` is in the `integrations` array and SDK ≥7.85.0 |
|
|
347
|
+
| Widget appears but form won’t submit | Verify DSN is correct; check browser network tab for blocked requests |
|
|
348
|
+
| Screenshots not showing | Requires SDK ≥8.0.0; check `enableScreenshot` is not set to `false` |
|
|
349
|
+
| `showReportDialog` shows but feedback not linked to error | Ensure `eventId` is passed; use `captureException()` return value or `Sentry.lastEventId()` |
|
|
350
|
+
| Crash modal not appearing after error | `showReportDialog` must be called with a valid `eventId`; check `beforeSend` hook is executing |
|
|
351
|
+
| Feedback not appearing in Sentry | Check attachment quota; ensure self-hosted Sentry is version ≥24.4.2 |
|
|
352
|
+
| Form fields are empty (no pre-fill) | Call `Sentry.setUser({ name, email })` before the widget is opened |
|
|
353
|
+
| Replay not linked to feedback | Set `replaysOnErrorSampleRate > 0`; replay must be active when feedback is submitted |
|
|
354
|
+
| Widget conflicts with page z-index | Widget uses Shadow DOM — if still conflicting, use `autoInject: false` and position manually |
|