diff --git a/public/_platforms/_index.json b/public/_platforms/_index.json index 730d9f305872a..4ab6ac7fcd7e3 100644 --- a/public/_platforms/_index.json +++ b/public/_platforms/_index.json @@ -1 +1 @@ -{"platforms":{"android":{"_self":{"key":"android","type":"framework","details":"android.json","doc_link":"https://docs.sentry.io/platforms/android/","name":"Android","aliases":[],"categories":["mobile"]},"profiling-onboarding-1-install":{"key":"android.profiling-onboarding-1-install","type":"language","details":"android/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/android/profiling/","name":"Android","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"android.profiling-onboarding-2-configure-performance","type":"language","details":"android/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/android/profiling/","name":"Android","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"android.profiling-onboarding-3-configure-profiling","type":"language","details":"android/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/android/profiling/","name":"Android","aliases":[],"categories":[]},"profiling-onboarding-4-upload":{"key":"android.profiling-onboarding-4-upload","type":"language","details":"android/profiling-onboarding-4-upload.json","doc_link":"https://docs.sentry.io/platforms/android/profiling/","name":"Android","aliases":[],"categories":[]}},"apple":{"_self":{"key":"apple","type":"language","details":"apple.json","doc_link":"https://docs.sentry.io/platforms/apple/","name":"Apple","aliases":["cocoa"],"categories":["mobile","desktop"]},"ios":{"key":"apple.ios","type":"language","details":"apple/ios.json","doc_link":"https://docs.sentry.io/platforms/apple/","name":"iOS","aliases":[],"categories":["mobile"]},"macos":{"key":"apple.macos","type":"language","details":"apple/macos.json","doc_link":"https://docs.sentry.io/platforms/apple/","name":"macOS","aliases":[],"categories":["desktop"]},"ios-profiling-onboarding-1-install":{"key":"apple.ios-profiling-onboarding-1-install","type":"language","details":"apple/ios-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/apple/guides/ios/profiling/","name":"iOS","aliases":[],"categories":[]},"ios-profiling-onboarding-2-configure-performance":{"key":"apple.ios-profiling-onboarding-2-configure-performance","type":"language","details":"apple/ios-profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/apple/guides/ios/profiling/","name":"iOS","aliases":[],"categories":[]},"ios-profiling-onboarding-3-configure-profiling":{"key":"apple.ios-profiling-onboarding-3-configure-profiling","type":"language","details":"apple/ios-profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/apple/guides/ios/profiling/","name":"iOS","aliases":[],"categories":[]},"ios-profiling-onboarding-4-upload":{"key":"apple.ios-profiling-onboarding-4-upload","type":"language","details":"apple/ios-profiling-onboarding-4-upload.json","doc_link":"https://docs.sentry.io/platforms/apple/guides/ios/profiling/","name":"iOS","aliases":[],"categories":[]}},"capacitor":{"_self":{"key":"capacitor","type":"framework","details":"capacitor.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/capacitor/","name":"Capacitor","aliases":[],"categories":[]}},"cordova":{"_self":{"key":"cordova","type":"language","details":"cordova.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/cordova/","name":"Cordova","aliases":[],"categories":[]}},"dart":{"_self":{"key":"dart","type":"framework","details":"dart.json","doc_link":"https://docs.sentry.io/platforms/dart/","name":"Dart","aliases":[],"categories":["mobile","browser","server"]}},"dotnet":{"aspnet":{"key":"dotnet.aspnet","type":"framework","details":"dotnet/aspnet.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/aspnet/","name":"ASP.NET","aliases":[],"categories":[]},"aspnetcore":{"key":"dotnet.aspnetcore","type":"framework","details":"dotnet/aspnetcore.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/aspnetcore/","name":"ASP.NET Core","aliases":[],"categories":[]},"awslambda":{"key":"dotnet.awslambda","type":"framework","details":"dotnet/awslambda.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/aws-lambda/","name":"AWS Lambda (.NET)","aliases":[],"categories":[]},"gcpfunctions":{"key":"dotnet.gcpfunctions","type":"framework","details":"dotnet/gcpfunctions.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/google-cloud-functions/","name":"Google Cloud Functions (.NET)","aliases":[],"categories":[]},"_self":{"key":"dotnet","type":"language","details":"dotnet.json","doc_link":"https://docs.sentry.io/platforms/dotnet/","name":".NET","aliases":["C#"],"categories":[]},"maui":{"key":"dotnet.maui","type":"framework","details":"dotnet/maui.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/maui/","name":"Multi-platform App UI (MAUI)","aliases":[],"categories":[]},"uwp":{"key":"dotnet.uwp","type":"framework","details":"dotnet/uwp.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/uwp/","name":"UWP","aliases":[],"categories":[]},"winforms":{"key":"dotnet.winforms","type":"framework","details":"dotnet/winforms.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/winforms/","name":"Windows Forms","aliases":[],"categories":[]},"wpf":{"key":"dotnet.wpf","type":"framework","details":"dotnet/wpf.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/wpf/","name":"WPF","aliases":[],"categories":[]},"xamarin":{"key":"dotnet.xamarin","type":"framework","details":"dotnet/xamarin.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/xamarin/","name":"Xamarin","aliases":[],"categories":[]},"profiling-onboarding-0-alert":{"key":"dotnet.profiling-onboarding-0-alert","type":"language","details":"dotnet/profiling-onboarding-0-alert.json","doc_link":"https://docs.sentry.io/platforms/dotnet/profiling/","name":".NET","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"dotnet.profiling-onboarding-1-install","type":"language","details":"dotnet/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/dotnet/profiling/","name":".NET","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"dotnet.profiling-onboarding-2-configure-performance","type":"language","details":"dotnet/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/dotnet/profiling/","name":".NET","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"dotnet.profiling-onboarding-3-configure-profiling","type":"language","details":"dotnet/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/dotnet/profiling/","name":".NET","aliases":[],"categories":[]}},"electron":{"_self":{"key":"electron","type":"language","details":"electron.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/electron/","name":"Electron","aliases":[],"categories":[]}},"elixir":{"_self":{"key":"elixir","type":"language","details":"elixir.json","doc_link":"https://docs.sentry.io/platforms/elixir/","name":"Elixir","aliases":[],"categories":[]}},"flutter":{"_self":{"key":"flutter","type":"framework","details":"flutter.json","doc_link":"https://docs.sentry.io/platforms/flutter/","name":"Flutter","aliases":[],"categories":["mobile","browser","desktop"]},"profiling-onboarding-0-alert":{"key":"flutter.profiling-onboarding-0-alert","type":"language","details":"flutter/profiling-onboarding-0-alert.json","doc_link":"https://docs.sentry.io/platforms/flutter/profiling/","name":"Flutter","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"flutter.profiling-onboarding-1-install","type":"language","details":"flutter/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/flutter/profiling/","name":"Flutter","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"flutter.profiling-onboarding-2-configure-performance","type":"language","details":"flutter/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/flutter/profiling/","name":"Flutter","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"flutter.profiling-onboarding-3-configure-profiling","type":"language","details":"flutter/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/flutter/profiling/","name":"Flutter","aliases":[],"categories":[]}},"go":{"_self":{"key":"go","type":"language","details":"go.json","doc_link":"https://docs.sentry.io/platforms/go/","name":"Go","aliases":[],"categories":[]},"profiling-onboarding-0-alert":{"key":"go.profiling-onboarding-0-alert","type":"language","details":"go/profiling-onboarding-0-alert.json","doc_link":"https://docs.sentry.io/platforms/go/profiling/","name":"Go","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"go.profiling-onboarding-1-install","type":"language","details":"go/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/go/profiling/","name":"Go","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"go.profiling-onboarding-2-configure-performance","type":"language","details":"go/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/go/profiling/","name":"Go","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"go.profiling-onboarding-3-configure-profiling","type":"language","details":"go/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/go/profiling/","name":"Go","aliases":[],"categories":[]}},"ionic":{"_self":{"key":"ionic","type":"framework","details":"ionic.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/capacitor/","name":"Ionic","aliases":[],"categories":[]}},"java":{"_self":{"key":"java","type":"language","details":"java.json","doc_link":"https://docs.sentry.io/platforms/java/","name":"Java","aliases":[],"categories":["desktop","server"]},"log4j2":{"key":"java.log4j2","type":"framework","details":"java/log4j2.json","doc_link":"https://docs.sentry.io/platforms/java/guides/log4j2/","name":"Log4j 2.x","aliases":[],"categories":["desktop","server"]},"logback":{"key":"java.logback","type":"framework","details":"java/logback.json","doc_link":"https://docs.sentry.io/platforms/java/guides/logback/","name":"Logback","aliases":[],"categories":["desktop","server"]},"spring-boot":{"key":"java.spring-boot","type":"framework","details":"java/spring-boot.json","doc_link":"https://docs.sentry.io/platforms/java/guides/spring-boot/","name":"Spring Boot","aliases":[],"categories":["desktop","server"]},"spring":{"key":"java.spring","type":"framework","details":"java/spring.json","doc_link":"https://https://docs.sentry.io/platforms/java/guides/spring/","name":"Spring","aliases":[],"categories":["desktop","server"]}},"javascript":{"_self":{"key":"javascript","type":"language","details":"javascript.json","doc_link":"https://docs.sentry.io/platforms/javascript/","name":"Browser JavaScript","aliases":[],"categories":["browser"]},"with-error-monitoring-and-performance":{"key":"javascript.with-error-monitoring-and-performance","type":"language","details":"javascript/with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/","name":"Browser JavaScript","aliases":[],"categories":[]},"with-error-monitoring-and-replay":{"key":"javascript.with-error-monitoring-and-replay","type":"language","details":"javascript/with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/","name":"Browser JavaScript","aliases":[],"categories":[]},"with-error-monitoring-performance-and-replay":{"key":"javascript.with-error-monitoring-performance-and-replay","type":"language","details":"javascript/with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/","name":"Browser JavaScript","aliases":[],"categories":[]},"with-error-monitoring":{"key":"javascript.with-error-monitoring","type":"language","details":"javascript/with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/","name":"Browser JavaScript","aliases":[],"categories":[]},"angular":{"key":"javascript.angular","type":"framework","details":"javascript/angular.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/angular/","name":"Angular","aliases":[],"categories":["browser"]},"angular-with-error-monitoring-and-performance":{"key":"javascript.angular-with-error-monitoring-and-performance","type":"framework","details":"javascript/angular-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/angular/","name":"Angular","aliases":[],"categories":[]},"angular-with-error-monitoring-and-replay":{"key":"javascript.angular-with-error-monitoring-and-replay","type":"framework","details":"javascript/angular-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/angular/","name":"Angular","aliases":[],"categories":[]},"angular-with-error-monitoring-performance-and-replay":{"key":"javascript.angular-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/angular-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/angular/","name":"Angular","aliases":[],"categories":[]},"angular-with-error-monitoring":{"key":"javascript.angular-with-error-monitoring","type":"framework","details":"javascript/angular-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/angular/","name":"Angular","aliases":[],"categories":[]},"ember":{"key":"javascript.ember","type":"framework","details":"javascript/ember.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/ember/","name":"Ember","aliases":[],"categories":["browser"]},"ember-with-error-monitoring-and-performance":{"key":"javascript.ember-with-error-monitoring-and-performance","type":"framework","details":"javascript/ember-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/ember/","name":"Ember","aliases":[],"categories":[]},"ember-with-error-monitoring-and-replay":{"key":"javascript.ember-with-error-monitoring-and-replay","type":"framework","details":"javascript/ember-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/ember/","name":"Ember","aliases":[],"categories":[]},"ember-with-error-monitoring-performance-and-replay":{"key":"javascript.ember-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/ember-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/ember/","name":"Ember","aliases":[],"categories":[]},"ember-with-error-monitoring":{"key":"javascript.ember-with-error-monitoring","type":"framework","details":"javascript/ember-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/ember/","name":"Ember","aliases":[],"categories":[]},"gatsby":{"key":"javascript.gatsby","type":"framework","details":"javascript/gatsby.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/gatsby/","name":"Gatsby","aliases":[],"categories":["browser"]},"gatsby-with-error-monitoring-and-performance":{"key":"javascript.gatsby-with-error-monitoring-and-performance","type":"framework","details":"javascript/gatsby-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/gatsby/","name":"Gatsby","aliases":[],"categories":[]},"gatsby-with-error-monitoring-and-replay":{"key":"javascript.gatsby-with-error-monitoring-and-replay","type":"framework","details":"javascript/gatsby-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/gatsby/","name":"Gatsby","aliases":[],"categories":[]},"gatsby-with-error-monitoring-performance-and-replay":{"key":"javascript.gatsby-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/gatsby-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/gatsby/","name":"Gatsby","aliases":[],"categories":[]},"gatsby-with-error-monitoring":{"key":"javascript.gatsby-with-error-monitoring","type":"framework","details":"javascript/gatsby-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/gatsby/","name":"Gatsby","aliases":[],"categories":[]},"nextjs":{"key":"javascript.nextjs","type":"framework","details":"javascript/nextjs.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/nextjs/","name":"Next.js","aliases":[],"categories":["browser","server"]},"nextjs-with-error-monitoring-and-performance":{"key":"javascript.nextjs-with-error-monitoring-and-performance","type":"framework","details":"javascript/nextjs-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/nextjs/","name":"Next.js","aliases":[],"categories":[]},"nextjs-with-error-monitoring-and-replay":{"key":"javascript.nextjs-with-error-monitoring-and-replay","type":"framework","details":"javascript/nextjs-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/nextjs/","name":"Next.js","aliases":[],"categories":[]},"nextjs-with-error-monitoring-performance-and-replay":{"key":"javascript.nextjs-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/nextjs-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/nextjs/","name":"Next.js","aliases":[],"categories":[]},"nextjs-with-error-monitoring":{"key":"javascript.nextjs-with-error-monitoring","type":"framework","details":"javascript/nextjs-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/nextjs/","name":"Next.js","aliases":[],"categories":[]},"react":{"key":"javascript.react","type":"framework","details":"javascript/react.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/","name":"React","aliases":[],"categories":["browser"]},"react-with-error-monitoring-and-performance":{"key":"javascript.react-with-error-monitoring-and-performance","type":"framework","details":"javascript/react-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/","name":"React","aliases":[],"categories":[]},"react-with-error-monitoring-and-replay":{"key":"javascript.react-with-error-monitoring-and-replay","type":"framework","details":"javascript/react-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/","name":"React","aliases":[],"categories":[]},"react-with-error-monitoring-performance-and-replay":{"key":"javascript.react-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/react-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/","name":"React","aliases":[],"categories":[]},"react-with-error-monitoring":{"key":"javascript.react-with-error-monitoring","type":"framework","details":"javascript/react-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/","name":"React","aliases":[],"categories":[]},"remix":{"key":"javascript.remix","type":"framework","details":"javascript/remix.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/remix/","name":"Remix","aliases":[],"categories":["browser","server"]},"remix-with-error-monitoring-and-performance":{"key":"javascript.remix-with-error-monitoring-and-performance","type":"framework","details":"javascript/remix-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/remix/","name":"Remix","aliases":[],"categories":[]},"remix-with-error-monitoring-and-replay":{"key":"javascript.remix-with-error-monitoring-and-replay","type":"framework","details":"javascript/remix-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/remix/","name":"Remix","aliases":[],"categories":[]},"remix-with-error-monitoring-performance-and-replay":{"key":"javascript.remix-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/remix-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/remix/","name":"Remix","aliases":[],"categories":[]},"remix-with-error-monitoring":{"key":"javascript.remix-with-error-monitoring","type":"framework","details":"javascript/remix-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/remix/","name":"Remix","aliases":[],"categories":[]},"svelte":{"key":"javascript.svelte","type":"framework","details":"javascript/svelte.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/svelte/","name":"Svelte","aliases":[],"categories":["browser"]},"svelte-with-error-monitoring-and-performance":{"key":"javascript.svelte-with-error-monitoring-and-performance","type":"framework","details":"javascript/svelte-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/svelte/","name":"Svelte","aliases":[],"categories":[]},"svelte-with-error-monitoring-and-replay":{"key":"javascript.svelte-with-error-monitoring-and-replay","type":"framework","details":"javascript/svelte-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/svelte/","name":"Svelte","aliases":[],"categories":[]},"svelte-with-error-monitoring-performance-and-replay":{"key":"javascript.svelte-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/svelte-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/svelte/","name":"Svelte","aliases":[],"categories":[]},"svelte-with-error-monitoring":{"key":"javascript.svelte-with-error-monitoring","type":"framework","details":"javascript/svelte-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/svelte/","name":"Svelte","aliases":[],"categories":[]},"sveltekit":{"key":"javascript.sveltekit","type":"framework","details":"javascript/sveltekit.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/sveltekit/","name":"SvelteKit","aliases":[],"categories":["browser","server"]},"sveltekit-with-error-monitoring-and-performance":{"key":"javascript.sveltekit-with-error-monitoring-and-performance","type":"framework","details":"javascript/sveltekit-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/sveltekit/","name":"SvelteKit","aliases":[],"categories":[]},"sveltekit-with-error-monitoring-and-replay":{"key":"javascript.sveltekit-with-error-monitoring-and-replay","type":"framework","details":"javascript/sveltekit-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/sveltekit/","name":"SvelteKit","aliases":[],"categories":[]},"sveltekit-with-error-monitoring-performance-and-replay":{"key":"javascript.sveltekit-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/sveltekit-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/sveltekit/","name":"SvelteKit","aliases":[],"categories":[]},"sveltekit-with-error-monitoring":{"key":"javascript.sveltekit-with-error-monitoring","type":"framework","details":"javascript/sveltekit-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/sveltekit/","name":"SvelteKit","aliases":[],"categories":[]},"vue":{"key":"javascript.vue","type":"framework","details":"javascript/vue.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/","name":"Vue","aliases":[],"categories":["browser"]},"vue-with-error-monitoring-and-performance":{"key":"javascript.vue-with-error-monitoring-and-performance","type":"framework","details":"javascript/vue-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/","name":"Vue","aliases":[],"categories":[]},"vue-with-error-monitoring-and-replay":{"key":"javascript.vue-with-error-monitoring-and-replay","type":"framework","details":"javascript/vue-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/","name":"Vue","aliases":[],"categories":[]},"vue-with-error-monitoring-performance-and-replay":{"key":"javascript.vue-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/vue-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/","name":"Vue","aliases":[],"categories":[]},"vue-with-error-monitoring":{"key":"javascript.vue-with-error-monitoring","type":"framework","details":"javascript/vue-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/","name":"Vue","aliases":[],"categories":[]},"performance-onboarding-1-install":{"key":"javascript.performance-onboarding-1-install","type":"language","details":"javascript/performance-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/performance/","name":"JavaScript","aliases":[],"categories":[]},"performance-onboarding-2-configure":{"key":"javascript.performance-onboarding-2-configure","type":"language","details":"javascript/performance-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/performance/","name":"JavaScript","aliases":[],"categories":[]},"performance-onboarding-3-verify":{"key":"javascript.performance-onboarding-3-verify","type":"language","details":"javascript/performance-onboarding-3-verify.json","doc_link":"https://docs.sentry.io/platforms/javascript/performance/","name":"JavaScript","aliases":[],"categories":[]},"react-performance-onboarding-1-install":{"key":"javascript.react-performance-onboarding-1-install","type":"framework","details":"javascript/react-performance-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/performance/","name":"React","aliases":[],"categories":[]},"react-performance-onboarding-2-configure":{"key":"javascript.react-performance-onboarding-2-configure","type":"framework","details":"javascript/react-performance-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/performance/","name":"React","aliases":[],"categories":[]},"react-performance-onboarding-3-verify":{"key":"javascript.react-performance-onboarding-3-verify","type":"framework","details":"javascript/react-performance-onboarding-3-verify.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/performance/","name":"React","aliases":[],"categories":[]},"angular-profiling-onboarding-1-install":{"key":"javascript.angular-profiling-onboarding-1-install","type":"framework","details":"javascript/angular-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/profiling/","name":"Angular (JS Self Profiling)","aliases":[],"categories":[]},"angular-profiling-onboarding-2-configure-document-policy":{"key":"javascript.angular-profiling-onboarding-2-configure-document-policy","type":"framework","details":"javascript/angular-profiling-onboarding-2-configure-document-policy.json","doc_link":"https://docs.sentry.io/platforms/javascript/profiling/","name":"Browser (JS Self Profiling)","aliases":[],"categories":[]},"angular-profiling-onboarding-3-configure":{"key":"javascript.angular-profiling-onboarding-3-configure","type":"framework","details":"javascript/angular-profiling-onboarding-3-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/profiling/","name":"Browser (JS Self Profiling)","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"javascript.profiling-onboarding-1-install","type":"framework","details":"javascript/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/profiling/","name":"Browser (JS Self Profiling)","aliases":[],"categories":[]},"profiling-onboarding-2-configure-document-policy":{"key":"javascript.profiling-onboarding-2-configure-document-policy","type":"framework","details":"javascript/profiling-onboarding-2-configure-document-policy.json","doc_link":"https://docs.sentry.io/platforms/javascript/profiling/","name":"Browser (JS Self Profiling)","aliases":[],"categories":[]},"profiling-onboarding-3-configure":{"key":"javascript.profiling-onboarding-3-configure","type":"framework","details":"javascript/profiling-onboarding-3-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/profiling/","name":"Browser (JS Self Profiling)","aliases":[],"categories":[]},"react-profiling-onboarding-1-install":{"key":"javascript.react-profiling-onboarding-1-install","type":"framework","details":"javascript/react-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/profiling/","name":"React (JS Self Profiling)","aliases":[],"categories":[]},"react-profiling-onboarding-2-configure-document-policy":{"key":"javascript.react-profiling-onboarding-2-configure-document-policy","type":"framework","details":"javascript/react-profiling-onboarding-2-configure-document-policy.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/profiling/","name":"React (JS Self Profiling)","aliases":[],"categories":[]},"react-profiling-onboarding-3-configure":{"key":"javascript.react-profiling-onboarding-3-configure","type":"framework","details":"javascript/react-profiling-onboarding-3-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/profiling/","name":"React (JS Self Profiling)","aliases":[],"categories":[]},"vue-profiling-onboarding-1-install":{"key":"javascript.vue-profiling-onboarding-1-install","type":"framework","details":"javascript/vue-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/profiling/","name":"Vue (JS Self Profiling)","aliases":[],"categories":[]},"vue-profiling-onboarding-2-configure-document-policy":{"key":"javascript.vue-profiling-onboarding-2-configure-document-policy","type":"framework","details":"javascript/vue-profiling-onboarding-2-configure-document-policy.json","doc_link":"https://docs.sentry.io/platforms/javascript/profiling/","name":"Browser (JS Self Profiling)","aliases":[],"categories":[]},"vue-profiling-onboarding-3-configure":{"key":"javascript.vue-profiling-onboarding-3-configure","type":"framework","details":"javascript/vue-profiling-onboarding-3-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/profiling/","name":"Vue (JS Self Profiling)","aliases":[],"categories":[]},"astro-replay-onboarding-1-install":{"key":"javascript.astro-replay-onboarding-1-install","type":"language","details":"javascript/astro-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/astro/session-replay/","name":"Astro","aliases":[],"categories":[]},"astro-replay-onboarding-2-configure":{"key":"javascript.astro-replay-onboarding-2-configure","type":"language","details":"javascript/astro-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/astro/session-replay/","name":"Astro","aliases":[],"categories":[]},"angular-replay-onboarding-1-install":{"key":"javascript.angular-replay-onboarding-1-install","type":"language","details":"javascript/angular-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"angular-replay-onboarding-2-configure":{"key":"javascript.angular-replay-onboarding-2-configure","type":"language","details":"javascript/angular-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"capacitor-replay-onboarding-1-install":{"key":"javascript.capacitor-replay-onboarding-1-install","type":"language","details":"javascript/capacitor-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/capacitor/session-replay/","name":"Capacitor","aliases":[],"categories":[]},"capacitor-replay-onboarding-2-configure":{"key":"javascript.capacitor-replay-onboarding-2-configure","type":"language","details":"javascript/capacitor-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/capacitor/session-replay/","name":"JavaScript","aliases":[],"categories":[]},"electron-replay-onboarding-1-install":{"key":"javascript.electron-replay-onboarding-1-install","type":"framework","details":"javascript/electron-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/electron/session-replay/","name":"Electron","aliases":[],"categories":[]},"electron-replay-onboarding-2-configure":{"key":"javascript.electron-replay-onboarding-2-configure","type":"framework","details":"javascript/electron-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/electron/session-replay/","name":"Electron","aliases":[],"categories":[]},"ember-replay-onboarding-1-install":{"key":"javascript.ember-replay-onboarding-1-install","type":"language","details":"javascript/ember-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"ember-replay-onboarding-2-configure":{"key":"javascript.ember-replay-onboarding-2-configure","type":"language","details":"javascript/ember-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"gatsby-replay-onboarding-1-install":{"key":"javascript.gatsby-replay-onboarding-1-install","type":"language","details":"javascript/gatsby-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"gatsby-replay-onboarding-2-configure":{"key":"javascript.gatsby-replay-onboarding-2-configure","type":"language","details":"javascript/gatsby-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"replay-onboarding-1-install":{"key":"javascript.replay-onboarding-1-install","type":"language","details":"javascript/replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"replay-onboarding-2-configure":{"key":"javascript.replay-onboarding-2-configure","type":"language","details":"javascript/replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"nextjs-replay-onboarding-1-install":{"key":"javascript.nextjs-replay-onboarding-1-install","type":"language","details":"javascript/nextjs-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"nextjs-replay-onboarding-2-configure":{"key":"javascript.nextjs-replay-onboarding-2-configure","type":"language","details":"javascript/nextjs-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"react-replay-onboarding-1-install":{"key":"javascript.react-replay-onboarding-1-install","type":"language","details":"javascript/react-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"react-replay-onboarding-2-configure":{"key":"javascript.react-replay-onboarding-2-configure","type":"language","details":"javascript/react-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"remix-replay-onboarding-1-install":{"key":"javascript.remix-replay-onboarding-1-install","type":"language","details":"javascript/remix-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"remix-replay-onboarding-2-configure":{"key":"javascript.remix-replay-onboarding-2-configure","type":"language","details":"javascript/remix-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"svelte-replay-onboarding-1-install":{"key":"javascript.svelte-replay-onboarding-1-install","type":"language","details":"javascript/svelte-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"svelte-replay-onboarding-2-configure":{"key":"javascript.svelte-replay-onboarding-2-configure","type":"language","details":"javascript/svelte-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"sveltekit-replay-onboarding-1-install":{"key":"javascript.sveltekit-replay-onboarding-1-install","type":"language","details":"javascript/sveltekit-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"sveltekit-replay-onboarding-2-configure":{"key":"javascript.sveltekit-replay-onboarding-2-configure","type":"language","details":"javascript/sveltekit-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"vue-replay-onboarding-1-install":{"key":"javascript.vue-replay-onboarding-1-install","type":"language","details":"javascript/vue-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"vue-replay-onboarding-2-configure":{"key":"javascript.vue-replay-onboarding-2-configure","type":"language","details":"javascript/vue-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]}},"kotlin":{"_self":{"key":"kotlin","type":"language","details":"kotlin.json","doc_link":"https://docs.sentry.io/platforms/kotlin/","name":"Kotlin","aliases":[],"categories":["mobile","desktop","server"]}},"minidump":{"_self":{"key":"minidump","type":"framework","details":"minidump.json","doc_link":"https://docs.sentry.io/platforms/native/minidump/","name":"Minidump","aliases":[],"categories":[]}},"node":{"awslambda":{"key":"node.awslambda","type":"framework","details":"node/awslambda.json","doc_link":"https://docs.sentry.io/platforms/node/guides/aws-lambda/","name":"AWS Lambda (Node)","aliases":[],"categories":[]},"azurefunctions":{"key":"node.azurefunctions","type":"framework","details":"node/azurefunctions.json","doc_link":"https://docs.sentry.io/platforms/node/guides/azure-functions/","name":"Azure Functions (Node)","aliases":[],"categories":[]},"connect":{"key":"node.connect","type":"framework","details":"node/connect.json","doc_link":"https://docs.sentry.io/platforms/node/guides/connect/","name":"Connect","aliases":[],"categories":["browser"]},"express":{"key":"node.express","type":"framework","details":"node/express.json","doc_link":"https://docs.sentry.io/platforms/node/guides/express/","name":"Express","aliases":[],"categories":["browser"]},"gcpfunctions":{"key":"node.gcpfunctions","type":"framework","details":"node/gcpfunctions.json","doc_link":"https://docs.sentry.io/platforms/node/guides/gcp-functions/","name":"Google Cloud Functions (Node)","aliases":[],"categories":[]},"_self":{"key":"node","type":"language","details":"node.json","doc_link":"https://docs.sentry.io/platforms/node/","name":"Node.js","aliases":[],"categories":["browser"]},"koa":{"key":"node.koa","type":"framework","details":"node/koa.json","doc_link":"https://docs.sentry.io/platforms/node/guides/koa/","name":"Koa","aliases":[],"categories":["browser"]},"serverlesscloud":{"key":"node.serverlesscloud","type":"framework","details":"node/serverlesscloud.json","doc_link":"https://docs.sentry.io/platforms/node/guides/serverless-cloud/","name":"Serverless (Node)","aliases":[],"categories":[]},"tracing":{"key":"node.tracing","type":"framework","details":"node/tracing.json","doc_link":"https://docs.sentry.io/platforms/node/performance/instrumentation/custom-instrumentation/","name":"Node.js","aliases":[],"categories":[]},"javascript-nextjs-profiling-onboarding-1-install":{"key":"node.javascript-nextjs-profiling-onboarding-1-install","type":"language","details":"node/javascript-nextjs-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Next.js","aliases":[],"categories":[]},"javascript-nextjs-profiling-onboarding-2-configure-performance":{"key":"node.javascript-nextjs-profiling-onboarding-2-configure-performance","type":"language","details":"node/javascript-nextjs-profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Next.js","aliases":[],"categories":[]},"javascript-nextjs-profiling-onboarding-3-configure-profiling":{"key":"node.javascript-nextjs-profiling-onboarding-3-configure-profiling","type":"language","details":"node/javascript-nextjs-profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Next.js","aliases":[],"categories":[]},"javascript-remix-profiling-onboarding-1-install":{"key":"node.javascript-remix-profiling-onboarding-1-install","type":"language","details":"node/javascript-remix-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Remix","aliases":[],"categories":[]},"javascript-remix-profiling-onboarding-2-configure-performance":{"key":"node.javascript-remix-profiling-onboarding-2-configure-performance","type":"language","details":"node/javascript-remix-profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Remix","aliases":[],"categories":[]},"javascript-remix-profiling-onboarding-3-configure-profiling":{"key":"node.javascript-remix-profiling-onboarding-3-configure-profiling","type":"language","details":"node/javascript-remix-profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Remix","aliases":[],"categories":[]},"javascript-sveltekit-profiling-onboarding-1-install":{"key":"node.javascript-sveltekit-profiling-onboarding-1-install","type":"language","details":"node/javascript-sveltekit-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"SvelteKit","aliases":[],"categories":[]},"javascript-sveltekit-profiling-onboarding-2-configure-performance":{"key":"node.javascript-sveltekit-profiling-onboarding-2-configure-performance","type":"language","details":"node/javascript-sveltekit-profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"SvelteKit","aliases":[],"categories":[]},"javascript-sveltekit-profiling-onboarding-3-configure-profiling":{"key":"node.javascript-sveltekit-profiling-onboarding-3-configure-profiling","type":"language","details":"node/javascript-sveltekit-profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"SvelteKit","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"node.profiling-onboarding-1-install","type":"language","details":"node/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Node","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"node.profiling-onboarding-2-configure-performance","type":"language","details":"node/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Node","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"node.profiling-onboarding-3-configure-profiling","type":"language","details":"node/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Node","aliases":[],"categories":[]}},"native":{"_self":{"key":"native","type":"language","details":"native.json","doc_link":"https://docs.sentry.io/platforms/native/","name":"Native","aliases":[],"categories":["mobile","desktop"]},"qt":{"key":"native.qt","type":"framework","details":"native/qt.json","doc_link":"https://docs.sentry.io/platforms/native/guides/qt/","name":"Qt","aliases":[],"categories":["desktop","mobile"]}},"php":{"_self":{"key":"php","type":"language","details":"php.json","doc_link":"https://docs.sentry.io/platforms/php/","name":"PHP","aliases":[],"categories":[]},"laravel":{"key":"php.laravel","type":"framework","details":"php/laravel.json","doc_link":"https://docs.sentry.io/platforms/php/guides/laravel/","name":"Laravel","aliases":[],"categories":[]},"symfony":{"key":"php.symfony","type":"framework","details":"php/symfony.json","doc_link":"https://docs.sentry.io/platforms/php/guides/symfony/","name":"Symfony","aliases":[],"categories":[]},"laravel-profiling-onboarding-1-install":{"key":"php.laravel-profiling-onboarding-1-install","type":"language","details":"php/laravel-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/php/guides/laravel/profiling/","name":"PHP","aliases":[],"categories":[]},"laravel-profiling-onboarding-2-configure-performance":{"key":"php.laravel-profiling-onboarding-2-configure-performance","type":"language","details":"php/laravel-profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/php/guides/laravel/profiling/","name":"PHP","aliases":[],"categories":[]},"laravel-profiling-onboarding-3-configure-profiling":{"key":"php.laravel-profiling-onboarding-3-configure-profiling","type":"language","details":"php/laravel-profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/php/guides/laravel/profiling/","name":"PHP","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"php.profiling-onboarding-1-install","type":"language","details":"php/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/php/profiling/","name":"PHP","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"php.profiling-onboarding-2-configure-performance","type":"language","details":"php/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/php/profiling/","name":"PHP","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"php.profiling-onboarding-3-configure-profiling","type":"language","details":"php/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/php/profiling/","name":"PHP","aliases":[],"categories":[]},"symfony2-profiling-onboarding-1-install":{"key":"php.symfony2-profiling-onboarding-1-install","type":"language","details":"php/symfony2-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/php/guides/symfony/profiling/","name":"PHP","aliases":[],"categories":[]},"symfony2-profiling-onboarding-2-configure-performance":{"key":"php.symfony2-profiling-onboarding-2-configure-performance","type":"language","details":"php/symfony2-profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/php/guides/symfony/profiling/","name":"PHP","aliases":[],"categories":[]},"symfony2-profiling-onboarding-3-configure-profiling":{"key":"php.symfony2-profiling-onboarding-3-configure-profiling","type":"language","details":"php/symfony2-profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/php/guides/symfony/profiling/","name":"PHP","aliases":[],"categories":[]}},"python":{"aiohttp":{"key":"python.aiohttp","type":"framework","details":"python/aiohttp.json","doc_link":"https://docs.sentry.io/platforms/python/guides/aiohttp/","name":"AIOHTTP","aliases":[],"categories":[]},"asgi":{"key":"python.asgi","type":"framework","details":"python/asgi.json","doc_link":"https://docs.sentry.io/platforms/python/guides/asgi/","name":"ASGI","aliases":[],"categories":[]},"awslambda":{"key":"python.awslambda","type":"framework","details":"python/awslambda.json","doc_link":"https://docs.sentry.io/platforms/python/guides/aws-lambda/","name":"AWS Lambda (Python)","aliases":[],"categories":[]},"bottle":{"key":"python.bottle","type":"framework","details":"python/bottle.json","doc_link":"https://docs.sentry.io/platforms/python/guides/bottle/","name":"Bottle","aliases":[],"categories":[]},"celery":{"key":"python.celery","type":"library","details":"python/celery.json","doc_link":"https://docs.sentry.io/platforms/python/guides/celery/","name":"Celery","aliases":[],"categories":[]},"chalice":{"key":"python.chalice","type":"framework","details":"python/chalice.json","doc_link":"https://docs.sentry.io/platforms/python/guides/chalice/","name":"Chalice","aliases":[],"categories":[]},"django":{"key":"python.django","type":"framework","details":"python/django.json","doc_link":"https://docs.sentry.io/platforms/python/guides/django/","name":"Django","aliases":[],"categories":[]},"falcon":{"key":"python.falcon","type":"framework","details":"python/falcon.json","doc_link":"https://docs.sentry.io/platforms/python/guides/falcon/","name":"Falcon","aliases":[],"categories":[]},"fastapi":{"key":"python.fastapi","type":"framework","details":"python/fastapi.json","doc_link":"https://docs.sentry.io/platforms/python/guides/fastapi/","name":"FastAPI","aliases":[],"categories":[]},"flask":{"key":"python.flask","type":"framework","details":"python/flask.json","doc_link":"https://docs.sentry.io/platforms/python/guides/flask/","name":"Flask","aliases":[],"categories":[]},"gcpfunctions":{"key":"python.gcpfunctions","type":"framework","details":"python/gcpfunctions.json","doc_link":"https://docs.sentry.io/platforms/python/guides/gcp-functions/","name":"Google Cloud Functions (Python)","aliases":[],"categories":[]},"_self":{"key":"python","type":"language","details":"python.json","doc_link":"https://docs.sentry.io/platforms/python/","name":"Python","aliases":[],"categories":[]},"pylons":{"key":"python.pylons","type":"framework","details":"python/pylons.json","doc_link":"https://docs.sentry.io/platforms/python/legacy-sdk/integrations/pylons/","name":"Pylons","aliases":[],"categories":[]},"pymongo":{"key":"python.pymongo","type":"library","details":"python/pymongo.json","doc_link":"https://docs.sentry.io/platforms/python/guides/pymongo/","name":"PyMongo","aliases":[],"categories":[]},"pyramid":{"key":"python.pyramid","type":"framework","details":"python/pyramid.json","doc_link":"https://docs.sentry.io/platforms/python/pyramid/","name":"Pyramid","aliases":[],"categories":[]},"quart":{"key":"python.quart","type":"framework","details":"python/quart.json","doc_link":"https://docs.sentry.io/platforms/python/guides/quart/","name":"Quart","aliases":[],"categories":[]},"rq":{"key":"python.rq","type":"library","details":"python/rq.json","doc_link":"https://docs.sentry.io/platforms/python/guides/rq/","name":"RQ (Redis Queue)","aliases":[],"categories":[]},"sanic":{"key":"python.sanic","type":"framework","details":"python/sanic.json","doc_link":"https://docs.sentry.io/platforms/python/guides/sanic/","name":"Sanic","aliases":[],"categories":[]},"serverless":{"key":"python.serverless","type":"framework","details":"python/serverless.json","doc_link":"https://docs.sentry.io/platforms/python/guides/serverless/","name":"Serverless (Python)","aliases":[],"categories":[]},"starlette":{"key":"python.starlette","type":"framework","details":"python/starlette.json","doc_link":"https://docs.sentry.io/platforms/python/guides/starlette/","name":"Starlette","aliases":[],"categories":[]},"tornado":{"key":"python.tornado","type":"framework","details":"python/tornado.json","doc_link":"https://docs.sentry.io/platforms/python/guides/tornado/","name":"Tornado","aliases":[],"categories":[]},"tracing":{"key":"python.tracing","type":"language","details":"python/tracing.json","doc_link":"https://docs.sentry.io/platforms/python/performance/","name":"Python","aliases":[],"categories":[]},"tryton":{"key":"python.tryton","type":"framework","details":"python/tryton.json","doc_link":"https://docs.sentry.io/platforms/python/guides/tryton/","name":"Tryton","aliases":[],"categories":[]},"wsgi":{"key":"python.wsgi","type":"framework","details":"python/wsgi.json","doc_link":"https://docs.sentry.io/platforms/python/guides/wsgi/","name":"WSGI","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"python.profiling-onboarding-1-install","type":"language","details":"python/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/python/profiling/","name":"Python","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"python.profiling-onboarding-2-configure-performance","type":"language","details":"python/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/python/profiling/","name":"Python","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"python.profiling-onboarding-3-configure-profiling","type":"language","details":"python/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/python/profiling/","name":"Python","aliases":[],"categories":[]}},"react-native":{"_self":{"key":"react-native","type":"language","details":"react-native.json","doc_link":"https://docs.sentry.io/platforms/react-native/","name":"React Native","aliases":[],"categories":["mobile"]},"tracing":{"key":"react-native.tracing","type":"language","details":"react-native/tracing.json","doc_link":"https://docs.sentry.io/platforms/react-native/performance/instrumentation/custom-instrumentation/","name":"React-Native","aliases":[],"categories":[]},"profiling-onboarding-0-alert":{"key":"react-native.profiling-onboarding-0-alert","type":"language","details":"react-native/profiling-onboarding-0-alert.json","doc_link":"https://docs.sentry.io/platforms/react-native/profiling/","name":"React Native","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"react-native.profiling-onboarding-1-install","type":"language","details":"react-native/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/react-native/profiling/","name":"React Native","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"react-native.profiling-onboarding-2-configure-performance","type":"language","details":"react-native/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/react-native/profiling/","name":"React Native","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"react-native.profiling-onboarding-3-configure-profiling","type":"language","details":"react-native/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/react-native/profiling/","name":"React Native","aliases":[],"categories":[]}},"ruby":{"_self":{"key":"ruby","type":"language","details":"ruby.json","doc_link":"https://docs.sentry.io/platforms/ruby/","name":"Ruby","aliases":[],"categories":[]},"rack":{"key":"ruby.rack","type":"framework","details":"ruby/rack.json","doc_link":"https://docs.sentry.io/platforms/ruby/guides/rack/","name":"Rack Middleware","aliases":[],"categories":[]},"rails":{"key":"ruby.rails","type":"framework","details":"ruby/rails.json","doc_link":"https://docs.sentry.io/platforms/ruby/guides/rails/","name":"Rails","aliases":[],"categories":[]},"profiling-onboarding-0-alert":{"key":"ruby.profiling-onboarding-0-alert","type":"language","details":"ruby/profiling-onboarding-0-alert.json","doc_link":"https://docs.sentry.io/platforms/ruby/profiling/","name":"Ruby","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"ruby.profiling-onboarding-1-install","type":"language","details":"ruby/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/ruby/profiling/","name":"Ruby","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"ruby.profiling-onboarding-2-configure-performance","type":"language","details":"ruby/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/ruby/profiling/","name":"Ruby","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"ruby.profiling-onboarding-3-configure-profiling","type":"language","details":"ruby/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/ruby/profiling/","name":"Ruby","aliases":[],"categories":[]}},"rust":{"_self":{"key":"rust","type":"language","details":"rust.json","doc_link":"https://docs.sentry.io/platforms/rust/","name":"Rust","aliases":[],"categories":[]}},"unity":{"_self":{"key":"unity","type":"framework","details":"unity.json","doc_link":"https://docs.sentry.io/platforms/unity/","name":"Unity","aliases":[],"categories":["mobile","browser","desktop","console","gaming"]}},"unreal":{"_self":{"key":"unreal","type":"framework","details":"unreal.json","doc_link":"https://docs.sentry.io/platforms/unreal/","name":"Unreal Engine","aliases":[],"categories":["mobile","desktop","console","gaming"]}}}} \ No newline at end of file +{"platforms":{"android":{"_self":{"key":"android","type":"framework","details":"android.json","doc_link":"https://docs.sentry.io/platforms/android/","name":"Android","aliases":[],"categories":["mobile"]},"profiling-onboarding-1-install":{"key":"android.profiling-onboarding-1-install","type":"language","details":"android/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/android/profiling/","name":"Android","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"android.profiling-onboarding-2-configure-performance","type":"language","details":"android/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/android/profiling/","name":"Android","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"android.profiling-onboarding-3-configure-profiling","type":"language","details":"android/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/android/profiling/","name":"Android","aliases":[],"categories":[]},"profiling-onboarding-4-upload":{"key":"android.profiling-onboarding-4-upload","type":"language","details":"android/profiling-onboarding-4-upload.json","doc_link":"https://docs.sentry.io/platforms/android/profiling/","name":"Android","aliases":[],"categories":[]}},"apple":{"_self":{"key":"apple","type":"language","details":"apple.json","doc_link":"https://docs.sentry.io/platforms/apple/","name":"Apple","aliases":["cocoa"],"categories":["mobile","desktop"]},"ios":{"key":"apple.ios","type":"language","details":"apple/ios.json","doc_link":"https://docs.sentry.io/platforms/apple/","name":"iOS","aliases":[],"categories":["mobile"]},"macos":{"key":"apple.macos","type":"language","details":"apple/macos.json","doc_link":"https://docs.sentry.io/platforms/apple/","name":"macOS","aliases":[],"categories":["desktop"]},"ios-profiling-onboarding-1-install":{"key":"apple.ios-profiling-onboarding-1-install","type":"language","details":"apple/ios-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/apple/guides/ios/profiling/","name":"iOS","aliases":[],"categories":[]},"ios-profiling-onboarding-2-configure-performance":{"key":"apple.ios-profiling-onboarding-2-configure-performance","type":"language","details":"apple/ios-profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/apple/guides/ios/profiling/","name":"iOS","aliases":[],"categories":[]},"ios-profiling-onboarding-3-configure-profiling":{"key":"apple.ios-profiling-onboarding-3-configure-profiling","type":"language","details":"apple/ios-profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/apple/guides/ios/profiling/","name":"iOS","aliases":[],"categories":[]},"ios-profiling-onboarding-4-upload":{"key":"apple.ios-profiling-onboarding-4-upload","type":"language","details":"apple/ios-profiling-onboarding-4-upload.json","doc_link":"https://docs.sentry.io/platforms/apple/guides/ios/profiling/","name":"iOS","aliases":[],"categories":[]}},"capacitor":{"_self":{"key":"capacitor","type":"framework","details":"capacitor.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/capacitor/","name":"Capacitor","aliases":[],"categories":[]}},"cordova":{"_self":{"key":"cordova","type":"language","details":"cordova.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/cordova/","name":"Cordova","aliases":[],"categories":[]}},"dart":{"_self":{"key":"dart","type":"framework","details":"dart.json","doc_link":"https://docs.sentry.io/platforms/dart/","name":"Dart","aliases":[],"categories":["mobile","browser","server"]}},"dotnet":{"aspnet":{"key":"dotnet.aspnet","type":"framework","details":"dotnet/aspnet.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/aspnet/","name":"ASP.NET","aliases":[],"categories":[]},"aspnetcore":{"key":"dotnet.aspnetcore","type":"framework","details":"dotnet/aspnetcore.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/aspnetcore/","name":"ASP.NET Core","aliases":[],"categories":[]},"awslambda":{"key":"dotnet.awslambda","type":"framework","details":"dotnet/awslambda.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/aws-lambda/","name":"AWS Lambda (.NET)","aliases":[],"categories":[]},"gcpfunctions":{"key":"dotnet.gcpfunctions","type":"framework","details":"dotnet/gcpfunctions.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/google-cloud-functions/","name":"Google Cloud Functions (.NET)","aliases":[],"categories":[]},"_self":{"key":"dotnet","type":"language","details":"dotnet.json","doc_link":"https://docs.sentry.io/platforms/dotnet/","name":".NET","aliases":["C#"],"categories":[]},"maui":{"key":"dotnet.maui","type":"framework","details":"dotnet/maui.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/maui/","name":"Multi-platform App UI (MAUI)","aliases":[],"categories":[]},"uwp":{"key":"dotnet.uwp","type":"framework","details":"dotnet/uwp.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/uwp/","name":"UWP","aliases":[],"categories":[]},"winforms":{"key":"dotnet.winforms","type":"framework","details":"dotnet/winforms.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/winforms/","name":"Windows Forms","aliases":[],"categories":[]},"wpf":{"key":"dotnet.wpf","type":"framework","details":"dotnet/wpf.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/wpf/","name":"WPF","aliases":[],"categories":[]},"xamarin":{"key":"dotnet.xamarin","type":"framework","details":"dotnet/xamarin.json","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/xamarin/","name":"Xamarin","aliases":[],"categories":[]},"profiling-onboarding-0-alert":{"key":"dotnet.profiling-onboarding-0-alert","type":"language","details":"dotnet/profiling-onboarding-0-alert.json","doc_link":"https://docs.sentry.io/platforms/dotnet/profiling/","name":".NET","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"dotnet.profiling-onboarding-1-install","type":"language","details":"dotnet/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/dotnet/profiling/","name":".NET","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"dotnet.profiling-onboarding-2-configure-performance","type":"language","details":"dotnet/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/dotnet/profiling/","name":".NET","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"dotnet.profiling-onboarding-3-configure-profiling","type":"language","details":"dotnet/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/dotnet/profiling/","name":".NET","aliases":[],"categories":[]}},"electron":{"_self":{"key":"electron","type":"language","details":"electron.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/electron/","name":"Electron","aliases":[],"categories":[]}},"elixir":{"_self":{"key":"elixir","type":"language","details":"elixir.json","doc_link":"https://docs.sentry.io/platforms/elixir/","name":"Elixir","aliases":[],"categories":[]}},"flutter":{"_self":{"key":"flutter","type":"framework","details":"flutter.json","doc_link":"https://docs.sentry.io/platforms/flutter/","name":"Flutter","aliases":[],"categories":["mobile","browser","desktop"]},"profiling-onboarding-0-alert":{"key":"flutter.profiling-onboarding-0-alert","type":"language","details":"flutter/profiling-onboarding-0-alert.json","doc_link":"https://docs.sentry.io/platforms/flutter/profiling/","name":"Flutter","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"flutter.profiling-onboarding-1-install","type":"language","details":"flutter/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/flutter/profiling/","name":"Flutter","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"flutter.profiling-onboarding-2-configure-performance","type":"language","details":"flutter/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/flutter/profiling/","name":"Flutter","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"flutter.profiling-onboarding-3-configure-profiling","type":"language","details":"flutter/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/flutter/profiling/","name":"Flutter","aliases":[],"categories":[]}},"go":{"_self":{"key":"go","type":"language","details":"go.json","doc_link":"https://docs.sentry.io/platforms/go/","name":"Go","aliases":[],"categories":[]},"profiling-onboarding-0-alert":{"key":"go.profiling-onboarding-0-alert","type":"language","details":"go/profiling-onboarding-0-alert.json","doc_link":"https://docs.sentry.io/platforms/go/profiling/","name":"Go","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"go.profiling-onboarding-1-install","type":"language","details":"go/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/go/profiling/","name":"Go","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"go.profiling-onboarding-2-configure-performance","type":"language","details":"go/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/go/profiling/","name":"Go","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"go.profiling-onboarding-3-configure-profiling","type":"language","details":"go/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/go/profiling/","name":"Go","aliases":[],"categories":[]}},"ionic":{"_self":{"key":"ionic","type":"framework","details":"ionic.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/capacitor/","name":"Ionic","aliases":[],"categories":[]}},"java":{"_self":{"key":"java","type":"language","details":"java.json","doc_link":"https://docs.sentry.io/platforms/java/","name":"Java","aliases":[],"categories":["desktop","server"]},"log4j2":{"key":"java.log4j2","type":"framework","details":"java/log4j2.json","doc_link":"https://docs.sentry.io/platforms/java/guides/log4j2/","name":"Log4j 2.x","aliases":[],"categories":["desktop","server"]},"logback":{"key":"java.logback","type":"framework","details":"java/logback.json","doc_link":"https://docs.sentry.io/platforms/java/guides/logback/","name":"Logback","aliases":[],"categories":["desktop","server"]},"spring-boot":{"key":"java.spring-boot","type":"framework","details":"java/spring-boot.json","doc_link":"https://docs.sentry.io/platforms/java/guides/spring-boot/","name":"Spring Boot","aliases":[],"categories":["desktop","server"]},"spring":{"key":"java.spring","type":"framework","details":"java/spring.json","doc_link":"https://https://docs.sentry.io/platforms/java/guides/spring/","name":"Spring","aliases":[],"categories":["desktop","server"]}},"javascript":{"_self":{"key":"javascript","type":"language","details":"javascript.json","doc_link":"https://docs.sentry.io/platforms/javascript/","name":"Browser JavaScript","aliases":[],"categories":["browser"]},"with-error-monitoring-and-performance":{"key":"javascript.with-error-monitoring-and-performance","type":"language","details":"javascript/with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/","name":"Browser JavaScript","aliases":[],"categories":[]},"with-error-monitoring-and-replay":{"key":"javascript.with-error-monitoring-and-replay","type":"language","details":"javascript/with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/","name":"Browser JavaScript","aliases":[],"categories":[]},"with-error-monitoring-performance-and-replay":{"key":"javascript.with-error-monitoring-performance-and-replay","type":"language","details":"javascript/with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/","name":"Browser JavaScript","aliases":[],"categories":[]},"with-error-monitoring":{"key":"javascript.with-error-monitoring","type":"language","details":"javascript/with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/","name":"Browser JavaScript","aliases":[],"categories":[]},"angular":{"key":"javascript.angular","type":"framework","details":"javascript/angular.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/angular/","name":"Angular","aliases":[],"categories":["browser"]},"angular-with-error-monitoring-and-performance":{"key":"javascript.angular-with-error-monitoring-and-performance","type":"framework","details":"javascript/angular-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/angular/","name":"Angular","aliases":[],"categories":[]},"angular-with-error-monitoring-and-replay":{"key":"javascript.angular-with-error-monitoring-and-replay","type":"framework","details":"javascript/angular-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/angular/","name":"Angular","aliases":[],"categories":[]},"angular-with-error-monitoring-performance-and-replay":{"key":"javascript.angular-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/angular-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/angular/","name":"Angular","aliases":[],"categories":[]},"angular-with-error-monitoring":{"key":"javascript.angular-with-error-monitoring","type":"framework","details":"javascript/angular-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/angular/","name":"Angular","aliases":[],"categories":[]},"ember":{"key":"javascript.ember","type":"framework","details":"javascript/ember.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/ember/","name":"Ember","aliases":[],"categories":["browser"]},"ember-with-error-monitoring-and-performance":{"key":"javascript.ember-with-error-monitoring-and-performance","type":"framework","details":"javascript/ember-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/ember/","name":"Ember","aliases":[],"categories":[]},"ember-with-error-monitoring-and-replay":{"key":"javascript.ember-with-error-monitoring-and-replay","type":"framework","details":"javascript/ember-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/ember/","name":"Ember","aliases":[],"categories":[]},"ember-with-error-monitoring-performance-and-replay":{"key":"javascript.ember-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/ember-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/ember/","name":"Ember","aliases":[],"categories":[]},"ember-with-error-monitoring":{"key":"javascript.ember-with-error-monitoring","type":"framework","details":"javascript/ember-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/ember/","name":"Ember","aliases":[],"categories":[]},"gatsby":{"key":"javascript.gatsby","type":"framework","details":"javascript/gatsby.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/gatsby/","name":"Gatsby","aliases":[],"categories":["browser"]},"gatsby-with-error-monitoring-and-performance":{"key":"javascript.gatsby-with-error-monitoring-and-performance","type":"framework","details":"javascript/gatsby-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/gatsby/","name":"Gatsby","aliases":[],"categories":[]},"gatsby-with-error-monitoring-and-replay":{"key":"javascript.gatsby-with-error-monitoring-and-replay","type":"framework","details":"javascript/gatsby-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/gatsby/","name":"Gatsby","aliases":[],"categories":[]},"gatsby-with-error-monitoring-performance-and-replay":{"key":"javascript.gatsby-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/gatsby-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/gatsby/","name":"Gatsby","aliases":[],"categories":[]},"gatsby-with-error-monitoring":{"key":"javascript.gatsby-with-error-monitoring","type":"framework","details":"javascript/gatsby-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/gatsby/","name":"Gatsby","aliases":[],"categories":[]},"nextjs":{"key":"javascript.nextjs","type":"framework","details":"javascript/nextjs.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/nextjs/","name":"Next.js","aliases":[],"categories":["browser","server"]},"nextjs-with-error-monitoring-and-performance":{"key":"javascript.nextjs-with-error-monitoring-and-performance","type":"framework","details":"javascript/nextjs-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/nextjs/","name":"Next.js","aliases":[],"categories":[]},"nextjs-with-error-monitoring-and-replay":{"key":"javascript.nextjs-with-error-monitoring-and-replay","type":"framework","details":"javascript/nextjs-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/nextjs/","name":"Next.js","aliases":[],"categories":[]},"nextjs-with-error-monitoring-performance-and-replay":{"key":"javascript.nextjs-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/nextjs-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/nextjs/","name":"Next.js","aliases":[],"categories":[]},"nextjs-with-error-monitoring":{"key":"javascript.nextjs-with-error-monitoring","type":"framework","details":"javascript/nextjs-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/nextjs/","name":"Next.js","aliases":[],"categories":[]},"react":{"key":"javascript.react","type":"framework","details":"javascript/react.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/","name":"React","aliases":[],"categories":["browser"]},"react-with-error-monitoring-and-performance":{"key":"javascript.react-with-error-monitoring-and-performance","type":"framework","details":"javascript/react-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/","name":"React","aliases":[],"categories":[]},"react-with-error-monitoring-and-replay":{"key":"javascript.react-with-error-monitoring-and-replay","type":"framework","details":"javascript/react-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/","name":"React","aliases":[],"categories":[]},"react-with-error-monitoring-performance-and-replay":{"key":"javascript.react-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/react-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/","name":"React","aliases":[],"categories":[]},"react-with-error-monitoring":{"key":"javascript.react-with-error-monitoring","type":"framework","details":"javascript/react-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/","name":"React","aliases":[],"categories":[]},"remix":{"key":"javascript.remix","type":"framework","details":"javascript/remix.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/remix/","name":"Remix","aliases":[],"categories":["browser","server"]},"remix-with-error-monitoring-and-performance":{"key":"javascript.remix-with-error-monitoring-and-performance","type":"framework","details":"javascript/remix-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/remix/","name":"Remix","aliases":[],"categories":[]},"remix-with-error-monitoring-and-replay":{"key":"javascript.remix-with-error-monitoring-and-replay","type":"framework","details":"javascript/remix-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/remix/","name":"Remix","aliases":[],"categories":[]},"remix-with-error-monitoring-performance-and-replay":{"key":"javascript.remix-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/remix-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/remix/","name":"Remix","aliases":[],"categories":[]},"remix-with-error-monitoring":{"key":"javascript.remix-with-error-monitoring","type":"framework","details":"javascript/remix-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/remix/","name":"Remix","aliases":[],"categories":[]},"svelte":{"key":"javascript.svelte","type":"framework","details":"javascript/svelte.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/svelte/","name":"Svelte","aliases":[],"categories":["browser"]},"svelte-with-error-monitoring-and-performance":{"key":"javascript.svelte-with-error-monitoring-and-performance","type":"framework","details":"javascript/svelte-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/svelte/","name":"Svelte","aliases":[],"categories":[]},"svelte-with-error-monitoring-and-replay":{"key":"javascript.svelte-with-error-monitoring-and-replay","type":"framework","details":"javascript/svelte-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/svelte/","name":"Svelte","aliases":[],"categories":[]},"svelte-with-error-monitoring-performance-and-replay":{"key":"javascript.svelte-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/svelte-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/svelte/","name":"Svelte","aliases":[],"categories":[]},"svelte-with-error-monitoring":{"key":"javascript.svelte-with-error-monitoring","type":"framework","details":"javascript/svelte-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/svelte/","name":"Svelte","aliases":[],"categories":[]},"sveltekit":{"key":"javascript.sveltekit","type":"framework","details":"javascript/sveltekit.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/sveltekit/","name":"SvelteKit","aliases":[],"categories":["browser","server"]},"sveltekit-with-error-monitoring-and-performance":{"key":"javascript.sveltekit-with-error-monitoring-and-performance","type":"framework","details":"javascript/sveltekit-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/sveltekit/","name":"SvelteKit","aliases":[],"categories":[]},"sveltekit-with-error-monitoring-and-replay":{"key":"javascript.sveltekit-with-error-monitoring-and-replay","type":"framework","details":"javascript/sveltekit-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/sveltekit/","name":"SvelteKit","aliases":[],"categories":[]},"sveltekit-with-error-monitoring-performance-and-replay":{"key":"javascript.sveltekit-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/sveltekit-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/sveltekit/","name":"SvelteKit","aliases":[],"categories":[]},"sveltekit-with-error-monitoring":{"key":"javascript.sveltekit-with-error-monitoring","type":"framework","details":"javascript/sveltekit-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/sveltekit/","name":"SvelteKit","aliases":[],"categories":[]},"vue":{"key":"javascript.vue","type":"framework","details":"javascript/vue.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/","name":"Vue","aliases":[],"categories":["browser"]},"vue-with-error-monitoring-and-performance":{"key":"javascript.vue-with-error-monitoring-and-performance","type":"framework","details":"javascript/vue-with-error-monitoring-and-performance.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/","name":"Vue","aliases":[],"categories":[]},"vue-with-error-monitoring-and-replay":{"key":"javascript.vue-with-error-monitoring-and-replay","type":"framework","details":"javascript/vue-with-error-monitoring-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/","name":"Vue","aliases":[],"categories":[]},"vue-with-error-monitoring-performance-and-replay":{"key":"javascript.vue-with-error-monitoring-performance-and-replay","type":"framework","details":"javascript/vue-with-error-monitoring-performance-and-replay.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/","name":"Vue","aliases":[],"categories":[]},"vue-with-error-monitoring":{"key":"javascript.vue-with-error-monitoring","type":"framework","details":"javascript/vue-with-error-monitoring.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/","name":"Vue","aliases":[],"categories":[]},"performance-onboarding-1-install":{"key":"javascript.performance-onboarding-1-install","type":"language","details":"javascript/performance-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/tracing/","name":"JavaScript","aliases":[],"categories":[]},"performance-onboarding-2-configure":{"key":"javascript.performance-onboarding-2-configure","type":"language","details":"javascript/performance-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/tracing/","name":"JavaScript","aliases":[],"categories":[]},"performance-onboarding-3-verify":{"key":"javascript.performance-onboarding-3-verify","type":"language","details":"javascript/performance-onboarding-3-verify.json","doc_link":"https://docs.sentry.io/platforms/javascript/tracing/","name":"JavaScript","aliases":[],"categories":[]},"react-performance-onboarding-1-install":{"key":"javascript.react-performance-onboarding-1-install","type":"framework","details":"javascript/react-performance-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/tracing/","name":"React","aliases":[],"categories":[]},"react-performance-onboarding-2-configure":{"key":"javascript.react-performance-onboarding-2-configure","type":"framework","details":"javascript/react-performance-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/tracing/","name":"React","aliases":[],"categories":[]},"react-performance-onboarding-3-verify":{"key":"javascript.react-performance-onboarding-3-verify","type":"framework","details":"javascript/react-performance-onboarding-3-verify.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/tracing/","name":"React","aliases":[],"categories":[]},"angular-profiling-onboarding-1-install":{"key":"javascript.angular-profiling-onboarding-1-install","type":"framework","details":"javascript/angular-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/profiling/","name":"Angular (JS Self Profiling)","aliases":[],"categories":[]},"angular-profiling-onboarding-2-configure-document-policy":{"key":"javascript.angular-profiling-onboarding-2-configure-document-policy","type":"framework","details":"javascript/angular-profiling-onboarding-2-configure-document-policy.json","doc_link":"https://docs.sentry.io/platforms/javascript/profiling/","name":"Browser (JS Self Profiling)","aliases":[],"categories":[]},"angular-profiling-onboarding-3-configure":{"key":"javascript.angular-profiling-onboarding-3-configure","type":"framework","details":"javascript/angular-profiling-onboarding-3-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/profiling/","name":"Browser (JS Self Profiling)","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"javascript.profiling-onboarding-1-install","type":"framework","details":"javascript/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/profiling/","name":"Browser (JS Self Profiling)","aliases":[],"categories":[]},"profiling-onboarding-2-configure-document-policy":{"key":"javascript.profiling-onboarding-2-configure-document-policy","type":"framework","details":"javascript/profiling-onboarding-2-configure-document-policy.json","doc_link":"https://docs.sentry.io/platforms/javascript/profiling/","name":"Browser (JS Self Profiling)","aliases":[],"categories":[]},"profiling-onboarding-3-configure":{"key":"javascript.profiling-onboarding-3-configure","type":"framework","details":"javascript/profiling-onboarding-3-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/profiling/","name":"Browser (JS Self Profiling)","aliases":[],"categories":[]},"react-profiling-onboarding-1-install":{"key":"javascript.react-profiling-onboarding-1-install","type":"framework","details":"javascript/react-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/profiling/","name":"React (JS Self Profiling)","aliases":[],"categories":[]},"react-profiling-onboarding-2-configure-document-policy":{"key":"javascript.react-profiling-onboarding-2-configure-document-policy","type":"framework","details":"javascript/react-profiling-onboarding-2-configure-document-policy.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/profiling/","name":"React (JS Self Profiling)","aliases":[],"categories":[]},"react-profiling-onboarding-3-configure":{"key":"javascript.react-profiling-onboarding-3-configure","type":"framework","details":"javascript/react-profiling-onboarding-3-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/profiling/","name":"React (JS Self Profiling)","aliases":[],"categories":[]},"vue-profiling-onboarding-1-install":{"key":"javascript.vue-profiling-onboarding-1-install","type":"framework","details":"javascript/vue-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/vue/profiling/","name":"Vue (JS Self Profiling)","aliases":[],"categories":[]},"vue-profiling-onboarding-2-configure-document-policy":{"key":"javascript.vue-profiling-onboarding-2-configure-document-policy","type":"framework","details":"javascript/vue-profiling-onboarding-2-configure-document-policy.json","doc_link":"https://docs.sentry.io/platforms/javascript/profiling/","name":"Browser (JS Self Profiling)","aliases":[],"categories":[]},"vue-profiling-onboarding-3-configure":{"key":"javascript.vue-profiling-onboarding-3-configure","type":"framework","details":"javascript/vue-profiling-onboarding-3-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/profiling/","name":"Vue (JS Self Profiling)","aliases":[],"categories":[]},"astro-replay-onboarding-1-install":{"key":"javascript.astro-replay-onboarding-1-install","type":"language","details":"javascript/astro-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/astro/session-replay/","name":"Astro","aliases":[],"categories":[]},"astro-replay-onboarding-2-configure":{"key":"javascript.astro-replay-onboarding-2-configure","type":"language","details":"javascript/astro-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/astro/session-replay/","name":"Astro","aliases":[],"categories":[]},"angular-replay-onboarding-1-install":{"key":"javascript.angular-replay-onboarding-1-install","type":"language","details":"javascript/angular-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"angular-replay-onboarding-2-configure":{"key":"javascript.angular-replay-onboarding-2-configure","type":"language","details":"javascript/angular-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"capacitor-replay-onboarding-1-install":{"key":"javascript.capacitor-replay-onboarding-1-install","type":"language","details":"javascript/capacitor-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/capacitor/session-replay/","name":"Capacitor","aliases":[],"categories":[]},"capacitor-replay-onboarding-2-configure":{"key":"javascript.capacitor-replay-onboarding-2-configure","type":"language","details":"javascript/capacitor-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/capacitor/session-replay/","name":"JavaScript","aliases":[],"categories":[]},"electron-replay-onboarding-1-install":{"key":"javascript.electron-replay-onboarding-1-install","type":"framework","details":"javascript/electron-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/electron/session-replay/","name":"Electron","aliases":[],"categories":[]},"electron-replay-onboarding-2-configure":{"key":"javascript.electron-replay-onboarding-2-configure","type":"framework","details":"javascript/electron-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/guides/electron/session-replay/","name":"Electron","aliases":[],"categories":[]},"ember-replay-onboarding-1-install":{"key":"javascript.ember-replay-onboarding-1-install","type":"language","details":"javascript/ember-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"ember-replay-onboarding-2-configure":{"key":"javascript.ember-replay-onboarding-2-configure","type":"language","details":"javascript/ember-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"gatsby-replay-onboarding-1-install":{"key":"javascript.gatsby-replay-onboarding-1-install","type":"language","details":"javascript/gatsby-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"gatsby-replay-onboarding-2-configure":{"key":"javascript.gatsby-replay-onboarding-2-configure","type":"language","details":"javascript/gatsby-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"replay-onboarding-1-install":{"key":"javascript.replay-onboarding-1-install","type":"language","details":"javascript/replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"replay-onboarding-2-configure":{"key":"javascript.replay-onboarding-2-configure","type":"language","details":"javascript/replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"nextjs-replay-onboarding-1-install":{"key":"javascript.nextjs-replay-onboarding-1-install","type":"language","details":"javascript/nextjs-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"nextjs-replay-onboarding-2-configure":{"key":"javascript.nextjs-replay-onboarding-2-configure","type":"language","details":"javascript/nextjs-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"react-replay-onboarding-1-install":{"key":"javascript.react-replay-onboarding-1-install","type":"language","details":"javascript/react-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"react-replay-onboarding-2-configure":{"key":"javascript.react-replay-onboarding-2-configure","type":"language","details":"javascript/react-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"remix-replay-onboarding-1-install":{"key":"javascript.remix-replay-onboarding-1-install","type":"language","details":"javascript/remix-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"remix-replay-onboarding-2-configure":{"key":"javascript.remix-replay-onboarding-2-configure","type":"language","details":"javascript/remix-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"svelte-replay-onboarding-1-install":{"key":"javascript.svelte-replay-onboarding-1-install","type":"language","details":"javascript/svelte-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"svelte-replay-onboarding-2-configure":{"key":"javascript.svelte-replay-onboarding-2-configure","type":"language","details":"javascript/svelte-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"sveltekit-replay-onboarding-1-install":{"key":"javascript.sveltekit-replay-onboarding-1-install","type":"language","details":"javascript/sveltekit-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"sveltekit-replay-onboarding-2-configure":{"key":"javascript.sveltekit-replay-onboarding-2-configure","type":"language","details":"javascript/sveltekit-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"vue-replay-onboarding-1-install":{"key":"javascript.vue-replay-onboarding-1-install","type":"language","details":"javascript/vue-replay-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]},"vue-replay-onboarding-2-configure":{"key":"javascript.vue-replay-onboarding-2-configure","type":"language","details":"javascript/vue-replay-onboarding-2-configure.json","doc_link":"https://docs.sentry.io/platforms/javascript/replay/","name":"JavaScript","aliases":[],"categories":[]}},"kotlin":{"_self":{"key":"kotlin","type":"language","details":"kotlin.json","doc_link":"https://docs.sentry.io/platforms/kotlin/","name":"Kotlin","aliases":[],"categories":["mobile","desktop","server"]}},"minidump":{"_self":{"key":"minidump","type":"framework","details":"minidump.json","doc_link":"https://docs.sentry.io/platforms/native/minidump/","name":"Minidump","aliases":[],"categories":[]}},"node":{"awslambda":{"key":"node.awslambda","type":"framework","details":"node/awslambda.json","doc_link":"https://docs.sentry.io/platforms/node/guides/aws-lambda/","name":"AWS Lambda (Node)","aliases":[],"categories":[]},"azurefunctions":{"key":"node.azurefunctions","type":"framework","details":"node/azurefunctions.json","doc_link":"https://docs.sentry.io/platforms/node/guides/azure-functions/","name":"Azure Functions (Node)","aliases":[],"categories":[]},"connect":{"key":"node.connect","type":"framework","details":"node/connect.json","doc_link":"https://docs.sentry.io/platforms/node/guides/connect/","name":"Connect","aliases":[],"categories":["browser"]},"express":{"key":"node.express","type":"framework","details":"node/express.json","doc_link":"https://docs.sentry.io/platforms/node/guides/express/","name":"Express","aliases":[],"categories":["browser"]},"gcpfunctions":{"key":"node.gcpfunctions","type":"framework","details":"node/gcpfunctions.json","doc_link":"https://docs.sentry.io/platforms/node/guides/gcp-functions/","name":"Google Cloud Functions (Node)","aliases":[],"categories":[]},"_self":{"key":"node","type":"language","details":"node.json","doc_link":"https://docs.sentry.io/platforms/node/","name":"Node.js","aliases":[],"categories":["browser"]},"koa":{"key":"node.koa","type":"framework","details":"node/koa.json","doc_link":"https://docs.sentry.io/platforms/node/guides/koa/","name":"Koa","aliases":[],"categories":["browser"]},"serverlesscloud":{"key":"node.serverlesscloud","type":"framework","details":"node/serverlesscloud.json","doc_link":"https://docs.sentry.io/platforms/node/guides/serverless-cloud/","name":"Serverless (Node)","aliases":[],"categories":[]},"tracing":{"key":"node.tracing","type":"framework","details":"node/tracing.json","doc_link":"https://docs.sentry.io/platforms/node/tracing/instrumentation/custom-instrumentation/","name":"Node.js","aliases":[],"categories":[]},"javascript-nextjs-profiling-onboarding-1-install":{"key":"node.javascript-nextjs-profiling-onboarding-1-install","type":"language","details":"node/javascript-nextjs-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Next.js","aliases":[],"categories":[]},"javascript-nextjs-profiling-onboarding-2-configure-performance":{"key":"node.javascript-nextjs-profiling-onboarding-2-configure-performance","type":"language","details":"node/javascript-nextjs-profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Next.js","aliases":[],"categories":[]},"javascript-nextjs-profiling-onboarding-3-configure-profiling":{"key":"node.javascript-nextjs-profiling-onboarding-3-configure-profiling","type":"language","details":"node/javascript-nextjs-profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Next.js","aliases":[],"categories":[]},"javascript-remix-profiling-onboarding-1-install":{"key":"node.javascript-remix-profiling-onboarding-1-install","type":"language","details":"node/javascript-remix-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Remix","aliases":[],"categories":[]},"javascript-remix-profiling-onboarding-2-configure-performance":{"key":"node.javascript-remix-profiling-onboarding-2-configure-performance","type":"language","details":"node/javascript-remix-profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Remix","aliases":[],"categories":[]},"javascript-remix-profiling-onboarding-3-configure-profiling":{"key":"node.javascript-remix-profiling-onboarding-3-configure-profiling","type":"language","details":"node/javascript-remix-profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Remix","aliases":[],"categories":[]},"javascript-sveltekit-profiling-onboarding-1-install":{"key":"node.javascript-sveltekit-profiling-onboarding-1-install","type":"language","details":"node/javascript-sveltekit-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"SvelteKit","aliases":[],"categories":[]},"javascript-sveltekit-profiling-onboarding-2-configure-performance":{"key":"node.javascript-sveltekit-profiling-onboarding-2-configure-performance","type":"language","details":"node/javascript-sveltekit-profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"SvelteKit","aliases":[],"categories":[]},"javascript-sveltekit-profiling-onboarding-3-configure-profiling":{"key":"node.javascript-sveltekit-profiling-onboarding-3-configure-profiling","type":"language","details":"node/javascript-sveltekit-profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"SvelteKit","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"node.profiling-onboarding-1-install","type":"language","details":"node/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Node","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"node.profiling-onboarding-2-configure-performance","type":"language","details":"node/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Node","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"node.profiling-onboarding-3-configure-profiling","type":"language","details":"node/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/node/profiling/","name":"Node","aliases":[],"categories":[]}},"native":{"_self":{"key":"native","type":"language","details":"native.json","doc_link":"https://docs.sentry.io/platforms/native/","name":"Native","aliases":[],"categories":["mobile","desktop"]},"qt":{"key":"native.qt","type":"framework","details":"native/qt.json","doc_link":"https://docs.sentry.io/platforms/native/guides/qt/","name":"Qt","aliases":[],"categories":["desktop","mobile"]}},"php":{"_self":{"key":"php","type":"language","details":"php.json","doc_link":"https://docs.sentry.io/platforms/php/","name":"PHP","aliases":[],"categories":[]},"laravel":{"key":"php.laravel","type":"framework","details":"php/laravel.json","doc_link":"https://docs.sentry.io/platforms/php/guides/laravel/","name":"Laravel","aliases":[],"categories":[]},"symfony":{"key":"php.symfony","type":"framework","details":"php/symfony.json","doc_link":"https://docs.sentry.io/platforms/php/guides/symfony/","name":"Symfony","aliases":[],"categories":[]},"laravel-profiling-onboarding-1-install":{"key":"php.laravel-profiling-onboarding-1-install","type":"language","details":"php/laravel-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/php/guides/laravel/profiling/","name":"PHP","aliases":[],"categories":[]},"laravel-profiling-onboarding-2-configure-performance":{"key":"php.laravel-profiling-onboarding-2-configure-performance","type":"language","details":"php/laravel-profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/php/guides/laravel/profiling/","name":"PHP","aliases":[],"categories":[]},"laravel-profiling-onboarding-3-configure-profiling":{"key":"php.laravel-profiling-onboarding-3-configure-profiling","type":"language","details":"php/laravel-profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/php/guides/laravel/profiling/","name":"PHP","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"php.profiling-onboarding-1-install","type":"language","details":"php/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/php/profiling/","name":"PHP","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"php.profiling-onboarding-2-configure-performance","type":"language","details":"php/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/php/profiling/","name":"PHP","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"php.profiling-onboarding-3-configure-profiling","type":"language","details":"php/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/php/profiling/","name":"PHP","aliases":[],"categories":[]},"symfony2-profiling-onboarding-1-install":{"key":"php.symfony2-profiling-onboarding-1-install","type":"language","details":"php/symfony2-profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/php/guides/symfony/profiling/","name":"PHP","aliases":[],"categories":[]},"symfony2-profiling-onboarding-2-configure-performance":{"key":"php.symfony2-profiling-onboarding-2-configure-performance","type":"language","details":"php/symfony2-profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/php/guides/symfony/profiling/","name":"PHP","aliases":[],"categories":[]},"symfony2-profiling-onboarding-3-configure-profiling":{"key":"php.symfony2-profiling-onboarding-3-configure-profiling","type":"language","details":"php/symfony2-profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/php/guides/symfony/profiling/","name":"PHP","aliases":[],"categories":[]}},"python":{"aiohttp":{"key":"python.aiohttp","type":"framework","details":"python/aiohttp.json","doc_link":"https://docs.sentry.io/platforms/python/guides/aiohttp/","name":"AIOHTTP","aliases":[],"categories":[]},"asgi":{"key":"python.asgi","type":"framework","details":"python/asgi.json","doc_link":"https://docs.sentry.io/platforms/python/guides/asgi/","name":"ASGI","aliases":[],"categories":[]},"awslambda":{"key":"python.awslambda","type":"framework","details":"python/awslambda.json","doc_link":"https://docs.sentry.io/platforms/python/guides/aws-lambda/","name":"AWS Lambda (Python)","aliases":[],"categories":[]},"bottle":{"key":"python.bottle","type":"framework","details":"python/bottle.json","doc_link":"https://docs.sentry.io/platforms/python/guides/bottle/","name":"Bottle","aliases":[],"categories":[]},"celery":{"key":"python.celery","type":"library","details":"python/celery.json","doc_link":"https://docs.sentry.io/platforms/python/guides/celery/","name":"Celery","aliases":[],"categories":[]},"chalice":{"key":"python.chalice","type":"framework","details":"python/chalice.json","doc_link":"https://docs.sentry.io/platforms/python/guides/chalice/","name":"Chalice","aliases":[],"categories":[]},"django":{"key":"python.django","type":"framework","details":"python/django.json","doc_link":"https://docs.sentry.io/platforms/python/guides/django/","name":"Django","aliases":[],"categories":[]},"falcon":{"key":"python.falcon","type":"framework","details":"python/falcon.json","doc_link":"https://docs.sentry.io/platforms/python/guides/falcon/","name":"Falcon","aliases":[],"categories":[]},"fastapi":{"key":"python.fastapi","type":"framework","details":"python/fastapi.json","doc_link":"https://docs.sentry.io/platforms/python/guides/fastapi/","name":"FastAPI","aliases":[],"categories":[]},"flask":{"key":"python.flask","type":"framework","details":"python/flask.json","doc_link":"https://docs.sentry.io/platforms/python/guides/flask/","name":"Flask","aliases":[],"categories":[]},"gcpfunctions":{"key":"python.gcpfunctions","type":"framework","details":"python/gcpfunctions.json","doc_link":"https://docs.sentry.io/platforms/python/guides/gcp-functions/","name":"Google Cloud Functions (Python)","aliases":[],"categories":[]},"_self":{"key":"python","type":"language","details":"python.json","doc_link":"https://docs.sentry.io/platforms/python/","name":"Python","aliases":[],"categories":[]},"pylons":{"key":"python.pylons","type":"framework","details":"python/pylons.json","doc_link":"https://docs.sentry.io/platforms/python/legacy-sdk/integrations/pylons/","name":"Pylons","aliases":[],"categories":[]},"pymongo":{"key":"python.pymongo","type":"library","details":"python/pymongo.json","doc_link":"https://docs.sentry.io/platforms/python/guides/pymongo/","name":"PyMongo","aliases":[],"categories":[]},"pyramid":{"key":"python.pyramid","type":"framework","details":"python/pyramid.json","doc_link":"https://docs.sentry.io/platforms/python/pyramid/","name":"Pyramid","aliases":[],"categories":[]},"quart":{"key":"python.quart","type":"framework","details":"python/quart.json","doc_link":"https://docs.sentry.io/platforms/python/guides/quart/","name":"Quart","aliases":[],"categories":[]},"rq":{"key":"python.rq","type":"library","details":"python/rq.json","doc_link":"https://docs.sentry.io/platforms/python/guides/rq/","name":"RQ (Redis Queue)","aliases":[],"categories":[]},"sanic":{"key":"python.sanic","type":"framework","details":"python/sanic.json","doc_link":"https://docs.sentry.io/platforms/python/guides/sanic/","name":"Sanic","aliases":[],"categories":[]},"serverless":{"key":"python.serverless","type":"framework","details":"python/serverless.json","doc_link":"https://docs.sentry.io/platforms/python/guides/serverless/","name":"Serverless (Python)","aliases":[],"categories":[]},"starlette":{"key":"python.starlette","type":"framework","details":"python/starlette.json","doc_link":"https://docs.sentry.io/platforms/python/guides/starlette/","name":"Starlette","aliases":[],"categories":[]},"tornado":{"key":"python.tornado","type":"framework","details":"python/tornado.json","doc_link":"https://docs.sentry.io/platforms/python/guides/tornado/","name":"Tornado","aliases":[],"categories":[]},"tracing":{"key":"python.tracing","type":"language","details":"python/tracing.json","doc_link":"https://docs.sentry.io/platforms/python/tracing/","name":"Python","aliases":[],"categories":[]},"tryton":{"key":"python.tryton","type":"framework","details":"python/tryton.json","doc_link":"https://docs.sentry.io/platforms/python/guides/tryton/","name":"Tryton","aliases":[],"categories":[]},"wsgi":{"key":"python.wsgi","type":"framework","details":"python/wsgi.json","doc_link":"https://docs.sentry.io/platforms/python/guides/wsgi/","name":"WSGI","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"python.profiling-onboarding-1-install","type":"language","details":"python/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/python/profiling/","name":"Python","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"python.profiling-onboarding-2-configure-performance","type":"language","details":"python/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/python/profiling/","name":"Python","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"python.profiling-onboarding-3-configure-profiling","type":"language","details":"python/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/python/profiling/","name":"Python","aliases":[],"categories":[]}},"react-native":{"_self":{"key":"react-native","type":"language","details":"react-native.json","doc_link":"https://docs.sentry.io/platforms/react-native/","name":"React Native","aliases":[],"categories":["mobile"]},"tracing":{"key":"react-native.tracing","type":"language","details":"react-native/tracing.json","doc_link":"https://docs.sentry.io/platforms/react-native/tracing/instrumentation/custom-instrumentation/","name":"React-Native","aliases":[],"categories":[]},"profiling-onboarding-0-alert":{"key":"react-native.profiling-onboarding-0-alert","type":"language","details":"react-native/profiling-onboarding-0-alert.json","doc_link":"https://docs.sentry.io/platforms/react-native/profiling/","name":"React Native","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"react-native.profiling-onboarding-1-install","type":"language","details":"react-native/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/react-native/profiling/","name":"React Native","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"react-native.profiling-onboarding-2-configure-performance","type":"language","details":"react-native/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/react-native/profiling/","name":"React Native","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"react-native.profiling-onboarding-3-configure-profiling","type":"language","details":"react-native/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/react-native/profiling/","name":"React Native","aliases":[],"categories":[]}},"ruby":{"_self":{"key":"ruby","type":"language","details":"ruby.json","doc_link":"https://docs.sentry.io/platforms/ruby/","name":"Ruby","aliases":[],"categories":[]},"rack":{"key":"ruby.rack","type":"framework","details":"ruby/rack.json","doc_link":"https://docs.sentry.io/platforms/ruby/guides/rack/","name":"Rack Middleware","aliases":[],"categories":[]},"rails":{"key":"ruby.rails","type":"framework","details":"ruby/rails.json","doc_link":"https://docs.sentry.io/platforms/ruby/guides/rails/","name":"Rails","aliases":[],"categories":[]},"profiling-onboarding-0-alert":{"key":"ruby.profiling-onboarding-0-alert","type":"language","details":"ruby/profiling-onboarding-0-alert.json","doc_link":"https://docs.sentry.io/platforms/ruby/profiling/","name":"Ruby","aliases":[],"categories":[]},"profiling-onboarding-1-install":{"key":"ruby.profiling-onboarding-1-install","type":"language","details":"ruby/profiling-onboarding-1-install.json","doc_link":"https://docs.sentry.io/platforms/ruby/profiling/","name":"Ruby","aliases":[],"categories":[]},"profiling-onboarding-2-configure-performance":{"key":"ruby.profiling-onboarding-2-configure-performance","type":"language","details":"ruby/profiling-onboarding-2-configure-performance.json","doc_link":"https://docs.sentry.io/platforms/ruby/profiling/","name":"Ruby","aliases":[],"categories":[]},"profiling-onboarding-3-configure-profiling":{"key":"ruby.profiling-onboarding-3-configure-profiling","type":"language","details":"ruby/profiling-onboarding-3-configure-profiling.json","doc_link":"https://docs.sentry.io/platforms/ruby/profiling/","name":"Ruby","aliases":[],"categories":[]}},"rust":{"_self":{"key":"rust","type":"language","details":"rust.json","doc_link":"https://docs.sentry.io/platforms/rust/","name":"Rust","aliases":[],"categories":[]}},"unity":{"_self":{"key":"unity","type":"framework","details":"unity.json","doc_link":"https://docs.sentry.io/platforms/unity/","name":"Unity","aliases":[],"categories":["mobile","browser","desktop","console","gaming"]}},"unreal":{"_self":{"key":"unreal","type":"framework","details":"unreal.json","doc_link":"https://docs.sentry.io/platforms/unreal/","name":"Unreal Engine","aliases":[],"categories":["mobile","desktop","console","gaming"]}}}} diff --git a/public/_platforms/apple.json b/public/_platforms/apple.json index dcb03cb48d2cf..37ae319a02269 100644 --- a/public/_platforms/apple.json +++ b/public/_platforms/apple.json @@ -1 +1 @@ -{"key":"apple","type":"language","doc_link":"https://docs.sentry.io/platforms/apple/","name":"Apple","aliases":["cocoa"],"categories":["mobile","desktop"],"body":"
We support installing the SDK with CocoaPods, Swift Package Manager, and Carthage.
\nTo integrate Sentry into your Xcode
Podfile
:\nplatform :ios, '11.0'\nuse_frameworks! # This is important\n\ntarget 'YourApp' do\n pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '8.19.0'\nend
Afterwards run pod install
. For more information visit the docs.
To integrate Sentry into your Xcode
https://github.com/getsentry/sentry-cocoa.git
Alternatively, when your project uses a Package.swift
file to manage dependencies, you can specify the target with:
.package(url: \"https://github.com/getsentry/sentry-cocoa\", from: \"8.19.0\"),
For more information visit the docs.
\nTo integrate Sentry into your Xcode
github \"getsentry/sentry-cocoa\" \"8.19.0\"
Run carthage update
to download the framework and drag the built Sentry.framework into your Xcode project. For more information visit the docs.
Make sure you initialize the SDK as soon as possible in your application lifecycle e.g. in your AppDelegate application:didFinishLaunchingWithOptions
method:
import Sentry\n\n// ....\n\nfunc application(_ application: UIApplication,\n didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n\n SentrySDK.start { options in\n options.dsn = \"___PUBLIC_DSN___\"\n options.debug = true // Enabled debug when first installing is always helpful\n\n // This will capture 100% of transactions for performance monitoring.\n // If you want to control the percentage of captured events, we recommend using `options.tracesSampleRate`.\n options.enableTracing = true\n }\n\n return true\n}
To capture crashes, you need to provide debug information to Sentry. You can also use our source context feature to display code snippets next to the event stack traces by enabling the include-sources
option when uploading your debug information files. Debug information is provided by uploading dSYM files.
You can measure the performance of your code by capturing transactions and spans.
\nimport Sentry // Make sure you import Sentry\n\n// Transaction can be started by providing, at minimum, the name and the operation\nlet transaction = SentrySDK.startTransaction(name: \"Update Repos\", operation: \"db\")\n// Transactions can have child spans (and those spans can have child spans as well)\nlet span = transaction.startChild(operation: \"db\", description: \"Update first repo\")\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.finish() // Mark the span as finished\ntransaction.finish() // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
"} \ No newline at end of file +{"key":"apple","type":"language","doc_link":"https://docs.sentry.io/platforms/apple/","name":"Apple","aliases":["cocoa"],"categories":["mobile","desktop"],"body":"We support installing the SDK with CocoaPods, Swift Package Manager, and Carthage.
\nTo integrate Sentry into your Xcode
Podfile
:\nplatform :ios, '11.0'\nuse_frameworks! # This is important\n\ntarget 'YourApp' do\n pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '8.19.0'\nend
Afterwards run pod install
. For more information visit the docs.
To integrate Sentry into your Xcode
https://github.com/getsentry/sentry-cocoa.git
Alternatively, when your project uses a Package.swift
file to manage dependencies, you can specify the target with:
.package(url: \"https://github.com/getsentry/sentry-cocoa\", from: \"8.19.0\"),
For more information visit the docs.
\nTo integrate Sentry into your Xcode
github \"getsentry/sentry-cocoa\" \"8.19.0\"
Run carthage update
to download the framework and drag the built Sentry.framework into your Xcode project. For more information visit the docs.
Make sure you initialize the SDK as soon as possible in your application lifecycle e.g. in your AppDelegate application:didFinishLaunchingWithOptions
method:
import Sentry\n\n// ....\n\nfunc application(_ application: UIApplication,\n didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n\n SentrySDK.start { options in\n options.dsn = \"___PUBLIC_DSN___\"\n options.debug = true // Enabled debug when first installing is always helpful\n\n // This will capture 100% of transactions for performance monitoring.\n // If you want to control the percentage of captured events, we recommend using `options.tracesSampleRate`.\n options.enableTracing = true\n }\n\n return true\n}
To capture crashes, you need to provide debug information to Sentry. You can also use our source context feature to display code snippets next to the event stack traces by enabling the include-sources
option when uploading your debug information files. Debug information is provided by uploading dSYM files.
You can measure the performance of your code by capturing transactions and spans.
\nimport Sentry // Make sure you import Sentry\n\n// Transaction can be started by providing, at minimum, the name and the operation\nlet transaction = SentrySDK.startTransaction(name: \"Update Repos\", operation: \"db\")\n// Transactions can have child spans (and those spans can have child spans as well)\nlet span = transaction.startChild(operation: \"db\", description: \"Update first repo\")\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.finish() // Mark the span as finished\ntransaction.finish() // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
"} diff --git a/public/_platforms/apple/ios.json b/public/_platforms/apple/ios.json index 2a611fb13f28b..3d55f5434eb44 100644 --- a/public/_platforms/apple/ios.json +++ b/public/_platforms/apple/ios.json @@ -1 +1 @@ -{"key":"apple.ios","type":"language","doc_link":"https://docs.sentry.io/platforms/apple/","name":"iOS","aliases":[],"categories":["mobile"],"body":"We recommend installing the SDK with Swift Package Manager (SPM), but we also support alternate installation methods. To integrate Sentry into your Xcode
https://github.com/getsentry/sentry-cocoa.git
Alternatively, when your project uses a Package.swift
file to manage dependencies, you can specify the target with:
.package(url: \"https://github.com/getsentry/sentry-cocoa\", from: \"8.19.0\"),
Make sure you initialize the SDK as soon as possible in your application lifecycle e.g. in your AppDelegate application:didFinishLaunchingWithOptions
method:
import Sentry\n\n// ....\n\nfunc application(_ application: UIApplication,\n didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n\n SentrySDK.start { options in\n options.dsn = \"___PUBLIC_DSN___\"\n options.debug = true // Enabled debug when first installing is always helpful\n\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0\n }\n\n return true\n}
When using SwiftUI and your app doesn't implement an app delegate, initialize the SDK within the App conformer's initializer:
\nimport Sentry\n\n@main\nstruct SwiftUIApp: App {\n init() {\n SentrySDK.start { options in\n options.dsn = \"___PUBLIC_DSN___\"\n options.debug = true // Enabled debug when first installing is always helpful\n\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0\n }\n }\n}
This snippet contains an intentional error you can use to test that errors are uploaded to Sentry correctly. You can add it to your main ViewController
.
let button = UIButton(type: .roundedRect)\nbutton.frame = CGRect(x: 20, y: 50, width: 100, height: 30)\nbutton.setTitle(\"Break the world\", for: [])\nbutton.addTarget(self, action: #selector(self.breakTheWorld(_:)), for: .touchUpInside)\nview.addSubview(button)\n\n@IBAction func breakTheWorld(_ sender: AnyObject) {\n fatalError(\"Break the world\")\n}
\n\nWant to play with some new features? Try out our experimental features for View Hierarchy, Time to Full Display (TTFD), MetricKit, Prewarmed App Start Tracing, and Swift Async Stacktraces. Experimental features are still a work-in-progress and may have bugs. We recognize the irony.
\nLet us know if you have feedback through GitHub issues.
\n
import Sentry\n\nSentrySDK.start { options in\n // ...\n\n // Enable all experimental features\n options.attachViewHierarchy = true\n options.enablePreWarmedAppStartTracing = true\n options.enableMetricKit = true\n options.enableTimeToFullDisplayTracing = true\n options.swiftAsyncStacktraces = true\n}
We recommend installing the SDK with Swift Package Manager (SPM), but we also support alternate installation methods. To integrate Sentry into your Xcode
https://github.com/getsentry/sentry-cocoa.git
Alternatively, when your project uses a Package.swift
file to manage dependencies, you can specify the target with:
.package(url: \"https://github.com/getsentry/sentry-cocoa\", from: \"8.19.0\"),
Make sure you initialize the SDK as soon as possible in your application lifecycle e.g. in your AppDelegate application:didFinishLaunchingWithOptions
method:
import Sentry\n\n// ....\n\nfunc application(_ application: UIApplication,\n didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n\n SentrySDK.start { options in\n options.dsn = \"___PUBLIC_DSN___\"\n options.debug = true // Enabled debug when first installing is always helpful\n\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0\n }\n\n return true\n}
When using SwiftUI and your app doesn't implement an app delegate, initialize the SDK within the App conformer's initializer:
\nimport Sentry\n\n@main\nstruct SwiftUIApp: App {\n init() {\n SentrySDK.start { options in\n options.dsn = \"___PUBLIC_DSN___\"\n options.debug = true // Enabled debug when first installing is always helpful\n\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0\n }\n }\n}
This snippet contains an intentional error you can use to test that errors are uploaded to Sentry correctly. You can add it to your main ViewController
.
let button = UIButton(type: .roundedRect)\nbutton.frame = CGRect(x: 20, y: 50, width: 100, height: 30)\nbutton.setTitle(\"Break the world\", for: [])\nbutton.addTarget(self, action: #selector(self.breakTheWorld(_:)), for: .touchUpInside)\nview.addSubview(button)\n\n@IBAction func breakTheWorld(_ sender: AnyObject) {\n fatalError(\"Break the world\")\n}
\n\nWant to play with some new features? Try out our experimental features for View Hierarchy, Time to Full Display (TTFD), MetricKit, Prewarmed App Start Tracing, and Swift Async Stacktraces. Experimental features are still a work-in-progress and may have bugs. We recognize the irony.
\nLet us know if you have feedback through GitHub issues.
\n
import Sentry\n\nSentrySDK.start { options in\n // ...\n\n // Enable all experimental features\n options.attachViewHierarchy = true\n options.enablePreWarmedAppStartTracing = true\n options.enableMetricKit = true\n options.enableTimeToFullDisplayTracing = true\n options.swiftAsyncStacktraces = true\n}
We support installing the SDK with CocoaPods, Swift Package Manager, and Carthage.
\nTo integrate Sentry into your Xcode
Podfile
:\nplatform :ios, '11.0'\nuse_frameworks! # This is important\n\ntarget 'YourApp' do\n pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '8.19.0'\nend
Afterwards run pod install
. For more information visit the docs.
To integrate Sentry into your Xcode
https://github.com/getsentry/sentry-cocoa.git
Alternatively, when your project uses a Package.swift
file to manage dependencies, you can specify the target with:
.package(url: \"https://github.com/getsentry/sentry-cocoa\", from: \"8.19.0\"),
For more information visit the docs.
\nTo integrate Sentry into your Xcode
Cartfile
:\ngithub \"getsentry/sentry-cocoa\" \"8.19.0\"
Run carthage update
to download the framework and drag the built Sentry.framework
into your Xcode project. For more information visit the docs.
Make sure you initialize the SDK as soon as possible in your application lifecycle e.g. in your AppDelegate application:didFinishLaunchingWithOptions
method:
import Sentry\n\n// ....\n\nfunc application(_ application: UIApplication,\n didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n\n SentrySDK.start { options in\n options.dsn = \"___PUBLIC_DSN___\"\n options.debug = true // Enabled debug when first installing is always helpful\n\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0\n }\n\n return true\n}
When using SwiftUI and your app doesn't implement an app delegate, initialize the SDK within the App conformer's initializer:
\nimport Sentry\n\n@main\nstruct SwiftUIApp: App {\n init() {\n SentrySDK.start { options in\n options.dsn = \"___PUBLIC_DSN___\"\n options.debug = true // Enabled debug when first installing is always helpful\n\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0\n }\n }\n}
To capture crashes, you need to provide debug information to Sentry. You can also use our source context feature to display code snippets next to the event stack traces by enabling the include-sources
option when uploading your debug information files. Debug information is provided by uploading dSYM files.
You can measure the performance of your code by capturing transactions and spans.
\nimport Sentry // Make sure you import Sentry\n\n// Transaction can be started by providing, at minimum, the name and the operation\nlet transaction = SentrySDK.startTransaction(name: \"Update Repos\", operation: \"db\")\n// Transactions can have child spans (and those spans can have child spans as well)\nlet span = transaction.startChild(operation: \"db\", description: \"Update first repo\")\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.finish() // Mark the span as finished\ntransaction.finish() // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
"} \ No newline at end of file +{"key":"apple.macos","type":"language","doc_link":"https://docs.sentry.io/platforms/apple/","name":"macOS","aliases":[],"categories":["desktop"],"body":"We support installing the SDK with CocoaPods, Swift Package Manager, and Carthage.
\nTo integrate Sentry into your Xcode
Podfile
:\nplatform :ios, '11.0'\nuse_frameworks! # This is important\n\ntarget 'YourApp' do\n pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '8.19.0'\nend
Afterwards run pod install
. For more information visit the docs.
To integrate Sentry into your Xcode
https://github.com/getsentry/sentry-cocoa.git
Alternatively, when your project uses a Package.swift
file to manage dependencies, you can specify the target with:
.package(url: \"https://github.com/getsentry/sentry-cocoa\", from: \"8.19.0\"),
For more information visit the docs.
\nTo integrate Sentry into your Xcode
Cartfile
:\ngithub \"getsentry/sentry-cocoa\" \"8.19.0\"
Run carthage update
to download the framework and drag the built Sentry.framework
into your Xcode project. For more information visit the docs.
Make sure you initialize the SDK as soon as possible in your application lifecycle e.g. in your AppDelegate application:didFinishLaunchingWithOptions
method:
import Sentry\n\n// ....\n\nfunc application(_ application: UIApplication,\n didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n\n SentrySDK.start { options in\n options.dsn = \"___PUBLIC_DSN___\"\n options.debug = true // Enabled debug when first installing is always helpful\n\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0\n }\n\n return true\n}
When using SwiftUI and your app doesn't implement an app delegate, initialize the SDK within the App conformer's initializer:
\nimport Sentry\n\n@main\nstruct SwiftUIApp: App {\n init() {\n SentrySDK.start { options in\n options.dsn = \"___PUBLIC_DSN___\"\n options.debug = true // Enabled debug when first installing is always helpful\n\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0\n }\n }\n}
To capture crashes, you need to provide debug information to Sentry. You can also use our source context feature to display code snippets next to the event stack traces by enabling the include-sources
option when uploading your debug information files. Debug information is provided by uploading dSYM files.
You can measure the performance of your code by capturing transactions and spans.
\nimport Sentry // Make sure you import Sentry\n\n// Transaction can be started by providing, at minimum, the name and the operation\nlet transaction = SentrySDK.startTransaction(name: \"Update Repos\", operation: \"db\")\n// Transactions can have child spans (and those spans can have child spans as well)\nlet span = transaction.startChild(operation: \"db\", description: \"Update first repo\")\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.finish() // Mark the span as finished\ntransaction.finish() // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
"} diff --git a/public/_platforms/dart.json b/public/_platforms/dart.json index 3f948fefadc63..711cd8c69dbfe 100644 --- a/public/_platforms/dart.json +++ b/public/_platforms/dart.json @@ -1 +1 @@ -{"key":"dart","type":"framework","doc_link":"https://docs.sentry.io/platforms/dart/","name":"Dart","aliases":[],"categories":["mobile","browser","server"],"body":"Sentry captures data by using an SDK within your application’s runtime. Add the following to your pubspec.yaml
:
dependencies:\n sentry: ^7.15.0
Import sentry
and initialize it:
import 'package:sentry/sentry.dart';\n\nFuture<void> main() async {\n await Sentry.init((options) {\n options.dsn = '___PUBLIC_DSN___';\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0;\n });\n\n // or define SENTRY_DSN via Dart environment variable (--dart-define)\n}
You can configure the SENTRY_DSN
, SENTRY_RELEASE
, SENTRY_DIST
, and SENTRY_ENVIRONMENT
via the Dart environment variables passing the --dart-define
flag to the compiler, as noted in the code sample.
Then create an intentional error, so you can test that everything is working:
\nimport 'package:sentry/sentry.dart';\n\ntry {\n aMethodThatMightFail();\n} catch (exception, stackTrace) {\n await Sentry.captureException(\n exception,\n stackTrace: stackTrace,\n );\n}
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nYou'll be able to monitor the performance of your app using the SDK.\nFor example:
\nimport 'package:sentry/sentry.dart';\n\nfinal transaction = Sentry.startTransaction('processOrderBatch()', 'task');\n\ntry {\n await processOrderBatch(transaction);\n} catch (exception) {\n transaction.throwable = exception;\n transaction.status = SpanStatus.internalError();\n} finally {\n await transaction.finish();\n}\n\nFuture<void> processOrderBatch(ISentrySpan span) async {\n // span operation: task, span description: operation\n final innerSpan = span.startChild('task', description: 'operation');\n\n try {\n // omitted code\n } catch (exception) {\n innerSpan.throwable = exception;\n innerSpan.status = SpanStatus.notFound();\n } finally {\n await innerSpan.finish();\n }\n}
Check out the documentation to learn more about the API and automatic instrumentations.
"} \ No newline at end of file +{"key":"dart","type":"framework","doc_link":"https://docs.sentry.io/platforms/dart/","name":"Dart","aliases":[],"categories":["mobile","browser","server"],"body":"Sentry captures data by using an SDK within your application’s runtime. Add the following to your pubspec.yaml
:
dependencies:\n sentry: ^7.15.0
Import sentry
and initialize it:
import 'package:sentry/sentry.dart';\n\nFuture<void> main() async {\n await Sentry.init((options) {\n options.dsn = '___PUBLIC_DSN___';\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0;\n });\n\n // or define SENTRY_DSN via Dart environment variable (--dart-define)\n}
You can configure the SENTRY_DSN
, SENTRY_RELEASE
, SENTRY_DIST
, and SENTRY_ENVIRONMENT
via the Dart environment variables passing the --dart-define
flag to the compiler, as noted in the code sample.
Then create an intentional error, so you can test that everything is working:
\nimport 'package:sentry/sentry.dart';\n\ntry {\n aMethodThatMightFail();\n} catch (exception, stackTrace) {\n await Sentry.captureException(\n exception,\n stackTrace: stackTrace,\n );\n}
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nYou'll be able to monitor the performance of your app using the SDK.\nFor example:
\nimport 'package:sentry/sentry.dart';\n\nfinal transaction = Sentry.startTransaction('processOrderBatch()', 'task');\n\ntry {\n await processOrderBatch(transaction);\n} catch (exception) {\n transaction.throwable = exception;\n transaction.status = SpanStatus.internalError();\n} finally {\n await transaction.finish();\n}\n\nFuture<void> processOrderBatch(ISentrySpan span) async {\n // span operation: task, span description: operation\n final innerSpan = span.startChild('task', description: 'operation');\n\n try {\n // omitted code\n } catch (exception) {\n innerSpan.throwable = exception;\n innerSpan.status = SpanStatus.notFound();\n } finally {\n await innerSpan.finish();\n }\n}
Check out the documentation to learn more about the API and automatic instrumentations.
"} diff --git a/public/_platforms/dotnet.json b/public/_platforms/dotnet.json index 99576a39b8bf5..a72ccfb1bb772 100644 --- a/public/_platforms/dotnet.json +++ b/public/_platforms/dotnet.json @@ -1 +1 @@ -{"key":"dotnet","type":"language","doc_link":"https://docs.sentry.io/platforms/dotnet/","name":".NET","aliases":["C#"],"categories":[],"body":"Install the NuGet package:
\n# Using Package Manager\nInstall-Package Sentry -Version 3.41.4\n\n# Or using .NET Core CLI\ndotnet add package Sentry -v 3.41.4
Initialize the SDK as early as possible. For example, call SentrySdk.Init
in your Program.cs
file:
using Sentry;\n\nSentrySdk.Init(options =>\n{\n // A Sentry Data Source Name (DSN) is required.\n // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/\n // You can set it in the SENTRY_DSN environment variable, or you can set it in code here.\n options.Dsn = \"___PUBLIC_DSN___\";\n\n // When debug is enabled, the Sentry client will emit detailed debugging information to the console.\n // This might be helpful, or might interfere with the normal operation of your application.\n // We enable it here for demonstration purposes when first trying Sentry.\n // You shouldn't do this in your applications unless you're troubleshooting issues with Sentry.\n options.Debug = true;\n\n // This option is recommended. It enables Sentry's \"Release Health\" feature.\n options.AutoSessionTracking = true;\n\n // This option is recommended for client applications only. It ensures all threads use the same global scope.\n // If you're writing a background service of any kind, you should remove this.\n options.IsGlobalModeEnabled = true;\n\n // This option will enable Sentry's tracing features. You still need to start transactions and spans.\n options.EnableTracing = true;\n});
Verify Sentry is correctly configured by sending a message:
\nSentrySdk.CaptureMessage(\"Something went wrong\");
You can measure the performance of your code by capturing transactions and spans.
\n// Transaction can be started by providing, at minimum, the name and the operation\nvar transaction = SentrySdk.StartTransaction(\n \"test-transaction-name\",\n \"test-transaction-operation\"\n);\n\n// Transactions can have child spans (and those spans can have child spans as well)\nvar span = transaction.StartChild(\"test-child-operation\");\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.Finish(); // Mark the span as finished\ntransaction.Finish(); // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
\nYou can find an example ASP.NET MVC 5 app with Sentry integrated on this GitHub repository.
\nIn addition, these examples demonstrate how to integrate Sentry with various frameworks:
\ndotnet
SDK repository (C#)Install the NuGet package:
\n# Using Package Manager\nInstall-Package Sentry -Version 3.41.4\n\n# Or using .NET Core CLI\ndotnet add package Sentry -v 3.41.4
Initialize the SDK as early as possible. For example, call SentrySdk.Init
in your Program.cs
file:
using Sentry;\n\nSentrySdk.Init(options =>\n{\n // A Sentry Data Source Name (DSN) is required.\n // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/\n // You can set it in the SENTRY_DSN environment variable, or you can set it in code here.\n options.Dsn = \"___PUBLIC_DSN___\";\n\n // When debug is enabled, the Sentry client will emit detailed debugging information to the console.\n // This might be helpful, or might interfere with the normal operation of your application.\n // We enable it here for demonstration purposes when first trying Sentry.\n // You shouldn't do this in your applications unless you're troubleshooting issues with Sentry.\n options.Debug = true;\n\n // This option is recommended. It enables Sentry's \"Release Health\" feature.\n options.AutoSessionTracking = true;\n\n // This option is recommended for client applications only. It ensures all threads use the same global scope.\n // If you're writing a background service of any kind, you should remove this.\n options.IsGlobalModeEnabled = true;\n\n // This option will enable Sentry's tracing features. You still need to start transactions and spans.\n options.EnableTracing = true;\n});
Verify Sentry is correctly configured by sending a message:
\nSentrySdk.CaptureMessage(\"Something went wrong\");
You can measure the performance of your code by capturing transactions and spans.
\n// Transaction can be started by providing, at minimum, the name and the operation\nvar transaction = SentrySdk.StartTransaction(\n \"test-transaction-name\",\n \"test-transaction-operation\"\n);\n\n// Transactions can have child spans (and those spans can have child spans as well)\nvar span = transaction.StartChild(\"test-child-operation\");\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.Finish(); // Mark the span as finished\ntransaction.Finish(); // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
\nYou can find an example ASP.NET MVC 5 app with Sentry integrated on this GitHub repository.
\nIn addition, these examples demonstrate how to integrate Sentry with various frameworks:
\ndotnet
SDK repository (C#)Install the NuGet package:
\ndotnet add package Sentry.Maui -v 3.41.4
Install-Package Sentry.Maui -Version 3.41.4
Then add Sentry to MauiProgram.cs
through the MauiAppBuilder
:
public static MauiApp CreateMauiApp()\n{\n var builder = MauiApp.CreateBuilder();\n builder\n .UseMauiApp<App>()\n\n // Add this section anywhere on the builder:\n .UseSentry(options =>\n {\n // The DSN is the only required setting.\n options.Dsn = \"___PUBLIC_DSN___\";\n\n // Use debug mode if you want to see what the SDK is doing.\n // Debug messages are written to stdout with Console.Writeline,\n // and are viewable in your IDE's debug console or with 'adb logcat', etc.\n // This option is not recommended when deploying your application.\n options.Debug = true;\n\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.TracesSampleRate = 1.0;\n\n // Other Sentry options can be set here.\n })\n\n // ... the remainder of your MAUI app setup\n\n return builder.Build();\n}
To verify your set up, you can capture a message with the SDK, anywhere in your code after the application is built, such as in a page constructor or button click event handler:
\nSentrySdk.CaptureMessage(\"Hello Sentry\");
We do not yet have automatic performance instrumentation for .NET MAUI. We will be adding that in a future release.\nHowever, if desired you can still manually instrument parts of your application.
\nFor some parts of your code, automatic instrumentation is available across all of our .NET SDKs, and can be used with MAUI as well:
\nHttpClient
, you can instrument your HTTP calls by passing our HTTP message handler:\nvar httpHandler = new SentryHttpMessageHandler();\nvar httpClient = new HttpClient(httpHandler);
For other parts of your code, you can use custom instrumentation, such as in the following example:
\n// Transaction can be started by providing, at minimum, the name and the operation\nvar transaction = SentrySdk.StartTransaction(\n \"test-transaction-name\",\n \"test-transaction-operation\"\n);\n\n// Transactions can have child spans (and those spans can have child spans as well)\nvar span = transaction.StartChild(\"test-child-operation\");\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.Finish(); // Mark the span as finished\ntransaction.Finish(); // Mark the transaction as finished and send it to Sentry
See the MAUI Sample in the sentry-dotnet
repository.
Install the NuGet package:
\ndotnet add package Sentry.Maui -v 3.41.4
Install-Package Sentry.Maui -Version 3.41.4
Then add Sentry to MauiProgram.cs
through the MauiAppBuilder
:
public static MauiApp CreateMauiApp()\n{\n var builder = MauiApp.CreateBuilder();\n builder\n .UseMauiApp<App>()\n\n // Add this section anywhere on the builder:\n .UseSentry(options =>\n {\n // The DSN is the only required setting.\n options.Dsn = \"___PUBLIC_DSN___\";\n\n // Use debug mode if you want to see what the SDK is doing.\n // Debug messages are written to stdout with Console.Writeline,\n // and are viewable in your IDE's debug console or with 'adb logcat', etc.\n // This option is not recommended when deploying your application.\n options.Debug = true;\n\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.TracesSampleRate = 1.0;\n\n // Other Sentry options can be set here.\n })\n\n // ... the remainder of your MAUI app setup\n\n return builder.Build();\n}
To verify your set up, you can capture a message with the SDK, anywhere in your code after the application is built, such as in a page constructor or button click event handler:
\nSentrySdk.CaptureMessage(\"Hello Sentry\");
We do not yet have automatic performance instrumentation for .NET MAUI. We will be adding that in a future release.\nHowever, if desired you can still manually instrument parts of your application.
\nFor some parts of your code, automatic instrumentation is available across all of our .NET SDKs, and can be used with MAUI as well:
\nHttpClient
, you can instrument your HTTP calls by passing our HTTP message handler:\nvar httpHandler = new SentryHttpMessageHandler();\nvar httpClient = new HttpClient(httpHandler);
For other parts of your code, you can use custom instrumentation, such as in the following example:
\n// Transaction can be started by providing, at minimum, the name and the operation\nvar transaction = SentrySdk.StartTransaction(\n \"test-transaction-name\",\n \"test-transaction-operation\"\n);\n\n// Transactions can have child spans (and those spans can have child spans as well)\nvar span = transaction.StartChild(\"test-child-operation\");\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.Finish(); // Mark the span as finished\ntransaction.Finish(); // Mark the transaction as finished and send it to Sentry
See the MAUI Sample in the sentry-dotnet
repository.
# Using Package Manager\nInstall-Package Sentry -Version 3.41.4\n\n# Or using .NET Core CLI\ndotnet add package Sentry -v 3.41.4
Initialize the SDK as early as possible, like in the constructor of the App
:
using System.Windows;\nusing Sentry.Protocol;\nusing Sentry;\n\nsealed partial class App : Application\n{\n protected override void OnLaunched(LaunchActivatedEventArgs e)\n {\n SentrySdk.Init(o =>\n {\n // Tells which project in Sentry to send events to:\n o.Dsn = \"___PUBLIC_DSN___\";\n // When configuring for the first time, to see what the SDK is doing:\n o.Debug = true;\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n o.TracesSampleRate = 1.0;\n });\n Current.UnhandledException += UnhandledExceptionHandler;\n }\n\n [HandleProcessCorruptedStateExceptions, SecurityCritical]\n internal void ExceptionHandler(object sender, Windows.UI.Xaml.UnhandledExceptionEventArgs e)\n {\n // We need to hold the reference, because the Exception property is cleared when accessed.\n var exception = e.Exception;\n if (exception != null)\n {\n // Tells Sentry this was an Unhandled Exception\n exception.Data[Mechanism.HandledKey] = false;\n exception.Data[Mechanism.MechanismKey] = \"Application.UnhandledException\";\n SentrySdk.CaptureException(exception);\n // Make sure the event is flushed to disk or to Sentry\n SentrySdk.FlushAsync(TimeSpan.FromSeconds(3)).Wait();\n }\n }\n}
To verify your set up, you can capture a message with the SDK:
\nSentrySdk.CaptureMessage(\"Hello Sentry\");
If you don't want to depend on the static class, the SDK registers a client in the DI container. In this case, you can take IHub
as a dependency.
You can measure the performance of your code by capturing transactions and spans.
\n// Transaction can be started by providing, at minimum, the name and the operation\nvar transaction = SentrySdk.StartTransaction(\n \"test-transaction-name\",\n \"test-transaction-operation\"\n);\n\n// Transactions can have child spans (and those spans can have child spans as well)\nvar span = transaction.StartChild(\"test-child-operation\");\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.Finish(); // Mark the span as finished\ntransaction.Finish(); // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
\nOnce you've verified the package is initialized properly and sent a test event, consider visiting our complete UWP docs.
\nYou can find an example UWP app with Sentry integrated on this GitHub repository.
\nSee the following examples that demonstrate how to integrate Sentry with various frameworks.
\ndotnet
SDK repository (C#)# Using Package Manager\nInstall-Package Sentry -Version 3.41.4\n\n# Or using .NET Core CLI\ndotnet add package Sentry -v 3.41.4
Initialize the SDK as early as possible, like in the constructor of the App
:
using System.Windows;\nusing Sentry.Protocol;\nusing Sentry;\n\nsealed partial class App : Application\n{\n protected override void OnLaunched(LaunchActivatedEventArgs e)\n {\n SentrySdk.Init(o =>\n {\n // Tells which project in Sentry to send events to:\n o.Dsn = \"___PUBLIC_DSN___\";\n // When configuring for the first time, to see what the SDK is doing:\n o.Debug = true;\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n o.TracesSampleRate = 1.0;\n });\n Current.UnhandledException += UnhandledExceptionHandler;\n }\n\n [HandleProcessCorruptedStateExceptions, SecurityCritical]\n internal void ExceptionHandler(object sender, Windows.UI.Xaml.UnhandledExceptionEventArgs e)\n {\n // We need to hold the reference, because the Exception property is cleared when accessed.\n var exception = e.Exception;\n if (exception != null)\n {\n // Tells Sentry this was an Unhandled Exception\n exception.Data[Mechanism.HandledKey] = false;\n exception.Data[Mechanism.MechanismKey] = \"Application.UnhandledException\";\n SentrySdk.CaptureException(exception);\n // Make sure the event is flushed to disk or to Sentry\n SentrySdk.FlushAsync(TimeSpan.FromSeconds(3)).Wait();\n }\n }\n}
To verify your set up, you can capture a message with the SDK:
\nSentrySdk.CaptureMessage(\"Hello Sentry\");
If you don't want to depend on the static class, the SDK registers a client in the DI container. In this case, you can take IHub
as a dependency.
You can measure the performance of your code by capturing transactions and spans.
\n// Transaction can be started by providing, at minimum, the name and the operation\nvar transaction = SentrySdk.StartTransaction(\n \"test-transaction-name\",\n \"test-transaction-operation\"\n);\n\n// Transactions can have child spans (and those spans can have child spans as well)\nvar span = transaction.StartChild(\"test-child-operation\");\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.Finish(); // Mark the span as finished\ntransaction.Finish(); // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
\nOnce you've verified the package is initialized properly and sent a test event, consider visiting our complete UWP docs.
\nYou can find an example UWP app with Sentry integrated on this GitHub repository.
\nSee the following examples that demonstrate how to integrate Sentry with various frameworks.
\ndotnet
SDK repository (C#)# Using Package Manager\nInstall-Package Sentry -Version 3.41.4\n\n# Or using .NET Core CLI\ndotnet add package Sentry -v 3.41.4
Initialize the SDK as early as possible, like in the constructor of the App
:
using System;\nusing System.Windows.Forms;\nusing Sentry;\n\nstatic class Program\n{\n [STAThread]\n static void Main()\n {\n // Init the Sentry SDK\n SentrySdk.Init(o =>\n {\n // Tells which project in Sentry to send events to:\n o.Dsn = \"___PUBLIC_DSN___\";\n // When configuring for the first time, to see what the SDK is doing:\n o.Debug = true;\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n o.TracesSampleRate = 1.0;\n });\n // Configure WinForms to throw exceptions so Sentry can capture them.\n Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);\n\n // Any other configuration you might have goes here...\n\n Application.Run(new Form1());\n }\n}
To verify your set up, you can capture a message with the SDK:
\nSentrySdk.CaptureMessage(\"Hello Sentry\");
You can measure the performance of your code by capturing transactions and spans.
\n// Transaction can be started by providing, at minimum, the name and the operation\nvar transaction = SentrySdk.StartTransaction(\n \"test-transaction-name\",\n \"test-transaction-operation\"\n);\n\n// Transactions can have child spans (and those spans can have child spans as well)\nvar span = transaction.StartChild(\"test-child-operation\");\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.Finish(); // Mark the span as finished\ntransaction.Finish(); // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
\nOnce you've verified the package is initialized properly and sent a test event, consider visiting our complete WinForms docs.
\nYou can find an example WinForms app with Sentry integrated on this GitHub repository.
\nSee the following examples that demonstrate how to integrate Sentry with various frameworks:
\ndotnet
SDK repository (C#)# Using Package Manager\nInstall-Package Sentry -Version 3.41.4\n\n# Or using .NET Core CLI\ndotnet add package Sentry -v 3.41.4
Initialize the SDK as early as possible, like in the constructor of the App
:
using System;\nusing System.Windows.Forms;\nusing Sentry;\n\nstatic class Program\n{\n [STAThread]\n static void Main()\n {\n // Init the Sentry SDK\n SentrySdk.Init(o =>\n {\n // Tells which project in Sentry to send events to:\n o.Dsn = \"___PUBLIC_DSN___\";\n // When configuring for the first time, to see what the SDK is doing:\n o.Debug = true;\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n o.TracesSampleRate = 1.0;\n });\n // Configure WinForms to throw exceptions so Sentry can capture them.\n Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);\n\n // Any other configuration you might have goes here...\n\n Application.Run(new Form1());\n }\n}
To verify your set up, you can capture a message with the SDK:
\nSentrySdk.CaptureMessage(\"Hello Sentry\");
You can measure the performance of your code by capturing transactions and spans.
\n// Transaction can be started by providing, at minimum, the name and the operation\nvar transaction = SentrySdk.StartTransaction(\n \"test-transaction-name\",\n \"test-transaction-operation\"\n);\n\n// Transactions can have child spans (and those spans can have child spans as well)\nvar span = transaction.StartChild(\"test-child-operation\");\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.Finish(); // Mark the span as finished\ntransaction.Finish(); // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
\nOnce you've verified the package is initialized properly and sent a test event, consider visiting our complete WinForms docs.
\nYou can find an example WinForms app with Sentry integrated on this GitHub repository.
\nSee the following examples that demonstrate how to integrate Sentry with various frameworks:
\ndotnet
SDK repository (C#)# Using Package Manager\nInstall-Package Sentry -Version 3.41.4\n\n# Or using .NET Core CLI\ndotnet add package Sentry -v 3.41.4
Initialize the SDK as early as possible, like in the constructor of the App
:
using System.Windows.Threading;\nusing System.Windows;\nusing Sentry;\n\npublic partial class App : Application\n{\n public App()\n {\n DispatcherUnhandledException += App_DispatcherUnhandledException;\n SentrySdk.Init(o =>\n {\n // Tells which project in Sentry to send events to:\n o.Dsn = \"___PUBLIC_DSN___\";\n // When configuring for the first time, to see what the SDK is doing:\n o.Debug = true;\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n o.TracesSampleRate = 1.0;\n });\n }\n\n void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)\n {\n SentrySdk.CaptureException(e.Exception);\n\n // If you want to avoid the application from crashing:\n e.Handled = true;\n }\n}
To verify your set up, you can capture a message with the SDK:
\nSentrySdk.CaptureMessage(\"Hello Sentry\");
You can measure the performance of your code by capturing transactions and spans.
\n// Transaction can be started by providing, at minimum, the name and the operation\nvar transaction = SentrySdk.StartTransaction(\n \"test-transaction-name\",\n \"test-transaction-operation\"\n);\n\n// Transactions can have child spans (and those spans can have child spans as well)\nvar span = transaction.StartChild(\"test-child-operation\");\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.Finish(); // Mark the span as finished\ntransaction.Finish(); // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
\nIf you don't want to depend on the static class, the SDK registers a client in the DI container. In this case, you can take IHub
as a dependency.
Once you've verified the package is initialized properly and sent a test event, consider visiting our complete WPF docs.
\nYou can find an example WPF app with Sentry integrated on this GitHub repository.
\nSee the following examples that demonstrate how to integrate Sentry with various frameworks.
\ndotnet
SDK repository (C#)# Using Package Manager\nInstall-Package Sentry -Version 3.41.4\n\n# Or using .NET Core CLI\ndotnet add package Sentry -v 3.41.4
Initialize the SDK as early as possible, like in the constructor of the App
:
using System.Windows.Threading;\nusing System.Windows;\nusing Sentry;\n\npublic partial class App : Application\n{\n public App()\n {\n DispatcherUnhandledException += App_DispatcherUnhandledException;\n SentrySdk.Init(o =>\n {\n // Tells which project in Sentry to send events to:\n o.Dsn = \"___PUBLIC_DSN___\";\n // When configuring for the first time, to see what the SDK is doing:\n o.Debug = true;\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n o.TracesSampleRate = 1.0;\n });\n }\n\n void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)\n {\n SentrySdk.CaptureException(e.Exception);\n\n // If you want to avoid the application from crashing:\n e.Handled = true;\n }\n}
To verify your set up, you can capture a message with the SDK:
\nSentrySdk.CaptureMessage(\"Hello Sentry\");
You can measure the performance of your code by capturing transactions and spans.
\n// Transaction can be started by providing, at minimum, the name and the operation\nvar transaction = SentrySdk.StartTransaction(\n \"test-transaction-name\",\n \"test-transaction-operation\"\n);\n\n// Transactions can have child spans (and those spans can have child spans as well)\nvar span = transaction.StartChild(\"test-child-operation\");\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.Finish(); // Mark the span as finished\ntransaction.Finish(); // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
\nIf you don't want to depend on the static class, the SDK registers a client in the DI container. In this case, you can take IHub
as a dependency.
Once you've verified the package is initialized properly and sent a test event, consider visiting our complete WPF docs.
\nYou can find an example WPF app with Sentry integrated on this GitHub repository.
\nSee the following examples that demonstrate how to integrate Sentry with various frameworks.
\ndotnet
SDK repository (C#)# For Xamarin.Forms\nInstall-Package Sentry.Xamarin.Forms -Version 1.5.2\n\n# If you are not using Xamarin.Forms, but only Xamarin:\nInstall-Package Sentry.Xamarin -Version 1.5.2\n
Initialize the SDK as early as possible, like in the constructor of the App
, and Add SentryXamarinFormsIntegration
as a new Integration to SentryXamarinOptions
if you are going to run your app with Xamarin Forms:
Initialize the SDK on your MainActivity
.
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity\n{\n protected override void OnCreate(Bundle savedInstanceState)\n {\n SentryXamarin.Init(options =>\n {\n // Tells which project in Sentry to send events to:\n options.Dsn = \"___PUBLIC_DSN___\";\n // When configuring for the first time, to see what the SDK is doing:\n options.Debug = true;\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.TracesSampleRate = 1.0;\n // If you installed Sentry.Xamarin.Forms:\n options.AddXamarinFormsIntegration();\n });
Initialize the SDK on your AppDelegate.cs
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate\n{\n public override bool FinishedLaunching(UIApplication app, NSDictionary options)\n {\n SentryXamarin.Init(options =>\n {\n options.Dsn = \"___PUBLIC_DSN___\";\n // When configuring for the first time, to see what the SDK is doing:\n options.Debug = true;\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.TracesSampleRate = 1.0;\n options.AddXamarinFormsIntegration();\n });
Initialize the SDK on App.xaml.cs
.
NOTE: It's recommended to not setup the CacheDirectory for UWP.
\nsealed partial class App : Application\n{\n protected override void OnLaunched(LaunchActivatedEventArgs e)\n {\n SentryXamarin.Init(options =>\n {\n options.Dsn = \"___PUBLIC_DSN___\";\n // When configuring for the first time, to see what the SDK is doing:\n options.Debug = true;\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.TracesSampleRate = 1.0;\n options.AddXamarinFormsIntegration();\n });
To verify your set up, you can capture a message with the SDK:
\nSentrySdk.CaptureMessage(\"Hello Sentry\");
You might need to open the app again for the crash report to be sent to the server.
\nYou can measure the performance of your code by capturing transactions and spans.
\n// Transaction can be started by providing, at minimum, the name and the operation\nvar transaction = SentrySdk.StartTransaction(\n \"test-transaction-name\",\n \"test-transaction-operation\"\n);\n\n// Transactions can have child spans (and those spans can have child spans as well)\nvar span = transaction.StartChild(\"test-child-operation\");\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.Finish(); // Mark the span as finished\ntransaction.Finish(); // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
\nOnce you've verified the package is initialized properly and sent a test event, consider visiting our complete Xamarin Forms docs.
\nThere are no line numbers on stack traces for UWP and in release builds for Android and iOS.
\nYou can find an example of a Xamarin Forms app with Sentry integrated on this GitHub repository.
"} \ No newline at end of file +{"key":"dotnet.xamarin","type":"framework","doc_link":"https://docs.sentry.io/platforms/dotnet/guides/xamarin/","name":"Xamarin","aliases":[],"categories":[],"body":"# For Xamarin.Forms\nInstall-Package Sentry.Xamarin.Forms -Version 1.5.2\n\n# If you are not using Xamarin.Forms, but only Xamarin:\nInstall-Package Sentry.Xamarin -Version 1.5.2\n
Initialize the SDK as early as possible, like in the constructor of the App
, and Add SentryXamarinFormsIntegration
as a new Integration to SentryXamarinOptions
if you are going to run your app with Xamarin Forms:
Initialize the SDK on your MainActivity
.
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity\n{\n protected override void OnCreate(Bundle savedInstanceState)\n {\n SentryXamarin.Init(options =>\n {\n // Tells which project in Sentry to send events to:\n options.Dsn = \"___PUBLIC_DSN___\";\n // When configuring for the first time, to see what the SDK is doing:\n options.Debug = true;\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.TracesSampleRate = 1.0;\n // If you installed Sentry.Xamarin.Forms:\n options.AddXamarinFormsIntegration();\n });
Initialize the SDK on your AppDelegate.cs
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate\n{\n public override bool FinishedLaunching(UIApplication app, NSDictionary options)\n {\n SentryXamarin.Init(options =>\n {\n options.Dsn = \"___PUBLIC_DSN___\";\n // When configuring for the first time, to see what the SDK is doing:\n options.Debug = true;\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.TracesSampleRate = 1.0;\n options.AddXamarinFormsIntegration();\n });
Initialize the SDK on App.xaml.cs
.
NOTE: It's recommended to not setup the CacheDirectory for UWP.
\nsealed partial class App : Application\n{\n protected override void OnLaunched(LaunchActivatedEventArgs e)\n {\n SentryXamarin.Init(options =>\n {\n options.Dsn = \"___PUBLIC_DSN___\";\n // When configuring for the first time, to see what the SDK is doing:\n options.Debug = true;\n // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.TracesSampleRate = 1.0;\n options.AddXamarinFormsIntegration();\n });
To verify your set up, you can capture a message with the SDK:
\nSentrySdk.CaptureMessage(\"Hello Sentry\");
You might need to open the app again for the crash report to be sent to the server.
\nYou can measure the performance of your code by capturing transactions and spans.
\n// Transaction can be started by providing, at minimum, the name and the operation\nvar transaction = SentrySdk.StartTransaction(\n \"test-transaction-name\",\n \"test-transaction-operation\"\n);\n\n// Transactions can have child spans (and those spans can have child spans as well)\nvar span = transaction.StartChild(\"test-child-operation\");\n\n// ...\n// (Perform the operation represented by the span/transaction)\n// ...\n\nspan.Finish(); // Mark the span as finished\ntransaction.Finish(); // Mark the transaction as finished and send it to Sentry
Check out the documentation to learn more about the API and automatic instrumentations.
\nOnce you've verified the package is initialized properly and sent a test event, consider visiting our complete Xamarin Forms docs.
\nThere are no line numbers on stack traces for UWP and in release builds for Android and iOS.
\nYou can find an example of a Xamarin Forms app with Sentry integrated on this GitHub repository.
"} diff --git a/public/_platforms/flutter.json b/public/_platforms/flutter.json index 0aedc8cf59df5..306b959ba57a5 100644 --- a/public/_platforms/flutter.json +++ b/public/_platforms/flutter.json @@ -1 +1 @@ -{"key":"flutter","type":"framework","doc_link":"https://docs.sentry.io/platforms/flutter/","name":"Flutter","aliases":[],"categories":["mobile","browser","desktop"],"body":"Sentry captures data by using an SDK within your application’s runtime. Add the following to your pubspec.yaml
:
dependencies:\n sentry_flutter: ^7.15.0
Import sentry_flutter
and initialize it:
import 'package:flutter/widgets.dart';\nimport 'package:sentry_flutter/sentry_flutter.dart';\n\nFuture<void> main() async {\n await SentryFlutter.init(\n (options) {\n options.dsn = '___PUBLIC_DSN___';\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0;\n },\n appRunner: () => runApp(MyApp()),\n );\n\n // or define SENTRY_DSN via Dart environment variable (--dart-define)\n}
You can configure the SENTRY_DSN
, SENTRY_RELEASE
, SENTRY_DIST
, and SENTRY_ENVIRONMENT
via the Dart environment variables passing the --dart-define
flag to the compiler, as noted in the code sample.
Then create an intentional error, so you can test that everything is working:
\nimport 'package:sentry/sentry.dart';\n\ntry {\n aMethodThatMightFail();\n} catch (exception, stackTrace) {\n await Sentry.captureException(\n exception,\n stackTrace: stackTrace,\n );\n}
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nYou'll be able to monitor the performance of your app using the SDK.\nFor example:
\nimport 'package:sentry/sentry.dart';\n\nfinal transaction = Sentry.startTransaction('processOrderBatch()', 'task');\n\ntry {\n await processOrderBatch(transaction);\n} catch (exception) {\n transaction.throwable = exception;\n transaction.status = SpanStatus.internalError();\n} finally {\n await transaction.finish();\n}\n\nFuture<void> processOrderBatch(ISentrySpan span) async {\n // span operation: task, span description: operation\n final innerSpan = span.startChild('task', description: 'operation');\n\n try {\n // omitted code\n } catch (exception) {\n innerSpan.throwable = exception;\n innerSpan.status = SpanStatus.notFound();\n } finally {\n await innerSpan.finish();\n }\n}
To learn more about the API and automatic instrumentations, check out the performance documentation .
\nWe offer a range of methods to provide Sentry with debug symbols so that you can see symbolicated stack traces and triage issues faster.
\nComplete stack traces will be shown for your Dart error by default, but if you use split-debug-info
and obfuscate
, you'll need to upload the debug information files generated by the flutter
build.
You'll also need to upload the debug information files generated by the flutter
build for iOS, macOS, and Android NDK native crashes.
If Sentry has access to your application's source code, it can show snippets of code (source context) around the location of stack frames, which helps to quickly pinpoint problematic code.
\nTo enable source context, you'll need to upload debug symbols to Sentry by following the Uploading Source Code Context for Flutter Android, iOS, and macOS guide.
"} \ No newline at end of file +{"key":"flutter","type":"framework","doc_link":"https://docs.sentry.io/platforms/flutter/","name":"Flutter","aliases":[],"categories":["mobile","browser","desktop"],"body":"Sentry captures data by using an SDK within your application’s runtime. Add the following to your pubspec.yaml
:
dependencies:\n sentry_flutter: ^7.15.0
Import sentry_flutter
and initialize it:
import 'package:flutter/widgets.dart';\nimport 'package:sentry_flutter/sentry_flutter.dart';\n\nFuture<void> main() async {\n await SentryFlutter.init(\n (options) {\n options.dsn = '___PUBLIC_DSN___';\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0;\n },\n appRunner: () => runApp(MyApp()),\n );\n\n // or define SENTRY_DSN via Dart environment variable (--dart-define)\n}
You can configure the SENTRY_DSN
, SENTRY_RELEASE
, SENTRY_DIST
, and SENTRY_ENVIRONMENT
via the Dart environment variables passing the --dart-define
flag to the compiler, as noted in the code sample.
Then create an intentional error, so you can test that everything is working:
\nimport 'package:sentry/sentry.dart';\n\ntry {\n aMethodThatMightFail();\n} catch (exception, stackTrace) {\n await Sentry.captureException(\n exception,\n stackTrace: stackTrace,\n );\n}
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nYou'll be able to monitor the performance of your app using the SDK.\nFor example:
\nimport 'package:sentry/sentry.dart';\n\nfinal transaction = Sentry.startTransaction('processOrderBatch()', 'task');\n\ntry {\n await processOrderBatch(transaction);\n} catch (exception) {\n transaction.throwable = exception;\n transaction.status = SpanStatus.internalError();\n} finally {\n await transaction.finish();\n}\n\nFuture<void> processOrderBatch(ISentrySpan span) async {\n // span operation: task, span description: operation\n final innerSpan = span.startChild('task', description: 'operation');\n\n try {\n // omitted code\n } catch (exception) {\n innerSpan.throwable = exception;\n innerSpan.status = SpanStatus.notFound();\n } finally {\n await innerSpan.finish();\n }\n}
To learn more about the API and automatic instrumentations, check out the performance documentation .
\nWe offer a range of methods to provide Sentry with debug symbols so that you can see symbolicated stack traces and triage issues faster.
\nComplete stack traces will be shown for your Dart error by default, but if you use split-debug-info
and obfuscate
, you'll need to upload the debug information files generated by the flutter
build.
You'll also need to upload the debug information files generated by the flutter
build for iOS, macOS, and Android NDK native crashes.
If Sentry has access to your application's source code, it can show snippets of code (source context) around the location of stack frames, which helps to quickly pinpoint problematic code.
\nTo enable source context, you'll need to upload debug symbols to Sentry by following the Uploading Source Code Context for Flutter Android, iOS, and macOS guide.
"} diff --git a/public/_platforms/java.json b/public/_platforms/java.json index 2145829455365..71ac9ec47e16f 100644 --- a/public/_platforms/java.json +++ b/public/_platforms/java.json @@ -1 +1 @@ -{"key":"java","type":"language","doc_link":"https://docs.sentry.io/platforms/java/","name":"Java","aliases":[],"categories":["desktop","server"],"body":"Install the SDK via Gradle, Maven, or SBT:
\nFor Gradle, add to your build.gradle
file:
// Make sure mavenCentral is there.\nrepositories {\n mavenCentral()\n}\n\n// Add Sentry's SDK as a dependency.\ndependencies {\n implementation 'io.sentry:sentry:7.3.0'\n}
To upload your source code to Sentry so it can be shown in stack traces, use our Gradle plugin.
\nbuildscript {\n repositories {\n mavenCentral()\n }\n}\n\nplugins {\n id \"io.sentry.jvm.gradle\" version \"4.2.0\"\n}\n\nsentry {\n // Generates a JVM (Java, Kotlin, etc.) source bundle and uploads your source code to Sentry.\n // This enables source context, allowing you to see your source\n // code as part of your stack traces in Sentry.\n includeSourceContext = true\n\n org = \"___ORG_SLUG___\"\n projectName = \"___PROJECT_SLUG___\"\n authToken = \"your-sentry-auth-token\"\n}
For Maven, add to your pom.xml
file:
<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry</artifactId>\n <version>7.3.0</version>\n</dependency>
To upload your source code to Sentry so it can be shown in stack traces, use our Maven plugin.
\n<build>\n <plugins>\n <plugin>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-maven-plugin</artifactId>\n <version>0.0.2</version>\n <configuration>\n <!-- for showing output of sentry-cli -->\n <debugSentryCli>true</debugSentryCli>\n\n <!-- download the latest sentry-cli and provide path to it here -->\n <!-- download it here: https://github.com/getsentry/sentry-cli/releases -->\n <!-- minimum required version is 2.17.3 -->\n <sentryCliExecutablePath>/path/to/sentry-cli</sentryCliExecutablePath>\n\n <org>___ORG_SLUG___</org>\n\n <project>___PROJECT_SLUG___</project>\n\n <!-- in case you're self hosting, provide the URL here -->\n <!--<url>http://localhost:8000/</url>-->\n\n <!-- provide your auth token via SENTRY_AUTH_TOKEN environment variable -->\n <!-- you can find it in Sentry UI: Settings > Account > API > Auth Tokens -->\n <authToken>${env.SENTRY_AUTH_TOKEN}</authToken>\n </configuration>\n <executions>\n <execution>\n <phase>generate-resources</phase>\n <goals>\n <goal>uploadSourceBundle</goal>\n </goals>\n </execution>\n </executions>\n </plugin>\n </plugins>\n ...\n</build>
For SBT:
\nlibraryDependencies += \"io.sentry\" % \"sentry\" % \"7.3.0\"
To upload your source code to Sentry so it can be shown in stack traces, please refer to Manually Uploading Source Context.
\nConfigure Sentry as soon as possible in your application's lifecycle:
\nimport io.sentry.Sentry;\n\nSentry.init(options -> {\n options.setDsn(\"___PUBLIC_DSN___\");\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.setTracesSampleRate(1.0);\n // When first trying Sentry it's good to see what the SDK is doing:\n options.setDebug(true);\n});
Trigger your first event from your development environment by intentionally creating an error with the Sentry#captureException
method, to test that everything is working:
import java.lang.Exception;\nimport io.sentry.Sentry;\n\ntry {\n throw new Exception(\"This is a test.\");\n} catch (Exception e) {\n Sentry.captureException(e);\n}
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nYou can capture transactions using the SDK. For example:
\nimport io.sentry.ITransaction;\nimport io.sentry.Sentry;\nimport io.sentry.SpanStatus;\n\n// A good name for the transaction is key, to help identify what this is about\nITransaction transaction = Sentry.startTransaction(\"processOrderBatch()\", \"task\");\ntry {\n processOrderBatch();\n} catch (Exception e) {\n transaction.setThrowable(e);\n transaction.setStatus(SpanStatus.INTERNAL_ERROR);\n throw e;\n} finally {\n transaction.finish();\n}
For more information about the API and automatic instrumentations included in the SDK, visit the docs.
"} \ No newline at end of file +{"key":"java","type":"language","doc_link":"https://docs.sentry.io/platforms/java/","name":"Java","aliases":[],"categories":["desktop","server"],"body":"Install the SDK via Gradle, Maven, or SBT:
\nFor Gradle, add to your build.gradle
file:
// Make sure mavenCentral is there.\nrepositories {\n mavenCentral()\n}\n\n// Add Sentry's SDK as a dependency.\ndependencies {\n implementation 'io.sentry:sentry:7.3.0'\n}
To upload your source code to Sentry so it can be shown in stack traces, use our Gradle plugin.
\nbuildscript {\n repositories {\n mavenCentral()\n }\n}\n\nplugins {\n id \"io.sentry.jvm.gradle\" version \"4.2.0\"\n}\n\nsentry {\n // Generates a JVM (Java, Kotlin, etc.) source bundle and uploads your source code to Sentry.\n // This enables source context, allowing you to see your source\n // code as part of your stack traces in Sentry.\n includeSourceContext = true\n\n org = \"___ORG_SLUG___\"\n projectName = \"___PROJECT_SLUG___\"\n authToken = \"your-sentry-auth-token\"\n}
For Maven, add to your pom.xml
file:
<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry</artifactId>\n <version>7.3.0</version>\n</dependency>
To upload your source code to Sentry so it can be shown in stack traces, use our Maven plugin.
\n<build>\n <plugins>\n <plugin>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-maven-plugin</artifactId>\n <version>0.0.2</version>\n <configuration>\n <!-- for showing output of sentry-cli -->\n <debugSentryCli>true</debugSentryCli>\n\n <!-- download the latest sentry-cli and provide path to it here -->\n <!-- download it here: https://github.com/getsentry/sentry-cli/releases -->\n <!-- minimum required version is 2.17.3 -->\n <sentryCliExecutablePath>/path/to/sentry-cli</sentryCliExecutablePath>\n\n <org>___ORG_SLUG___</org>\n\n <project>___PROJECT_SLUG___</project>\n\n <!-- in case you're self hosting, provide the URL here -->\n <!--<url>http://localhost:8000/</url>-->\n\n <!-- provide your auth token via SENTRY_AUTH_TOKEN environment variable -->\n <!-- you can find it in Sentry UI: Settings > Account > API > Auth Tokens -->\n <authToken>${env.SENTRY_AUTH_TOKEN}</authToken>\n </configuration>\n <executions>\n <execution>\n <phase>generate-resources</phase>\n <goals>\n <goal>uploadSourceBundle</goal>\n </goals>\n </execution>\n </executions>\n </plugin>\n </plugins>\n ...\n</build>
For SBT:
\nlibraryDependencies += \"io.sentry\" % \"sentry\" % \"7.3.0\"
To upload your source code to Sentry so it can be shown in stack traces, please refer to Manually Uploading Source Context.
\nConfigure Sentry as soon as possible in your application's lifecycle:
\nimport io.sentry.Sentry;\n\nSentry.init(options -> {\n options.setDsn(\"___PUBLIC_DSN___\");\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.setTracesSampleRate(1.0);\n // When first trying Sentry it's good to see what the SDK is doing:\n options.setDebug(true);\n});
Trigger your first event from your development environment by intentionally creating an error with the Sentry#captureException
method, to test that everything is working:
import java.lang.Exception;\nimport io.sentry.Sentry;\n\ntry {\n throw new Exception(\"This is a test.\");\n} catch (Exception e) {\n Sentry.captureException(e);\n}
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nYou can capture transactions using the SDK. For example:
\nimport io.sentry.ITransaction;\nimport io.sentry.Sentry;\nimport io.sentry.SpanStatus;\n\n// A good name for the transaction is key, to help identify what this is about\nITransaction transaction = Sentry.startTransaction(\"processOrderBatch()\", \"task\");\ntry {\n processOrderBatch();\n} catch (Exception e) {\n transaction.setThrowable(e);\n transaction.setStatus(SpanStatus.INTERNAL_ERROR);\n throw e;\n} finally {\n transaction.finish();\n}
For more information about the API and automatic instrumentations included in the SDK, visit the docs.
"} diff --git a/public/_platforms/java/spring-boot.json b/public/_platforms/java/spring-boot.json index 3c0272eb60f1f..23b9f092dfff2 100644 --- a/public/_platforms/java/spring-boot.json +++ b/public/_platforms/java/spring-boot.json @@ -1 +1 @@ -{"key":"java.spring-boot","type":"framework","doc_link":"https://docs.sentry.io/platforms/java/guides/spring-boot/","name":"Spring Boot","aliases":[],"categories":["desktop","server"],"body":"Install using either Maven or Gradle:
\n<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-spring-boot-starter</artifactId>\n <version>7.3.0</version>\n</dependency>
<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-spring-boot-starter-jakarta</artifactId>\n <version>7.3.0</version>\n</dependency>
implementation 'io.sentry:sentry-spring-boot-starter:7.3.0'
implementation 'io.sentry:sentry-spring-boot-starter-jakarta:7.3.0'
Open up src/main/application.properties
(or src/main/application.yml
) and configure the
Modify src/main/application.properties
:
sentry.dsn=___PUBLIC_DSN___\n# Set traces-sample-rate to 1.0 to capture 100% of transactions for performance monitoring.\n# We recommend adjusting this value in production.\nsentry.traces-sample-rate=1.0
Or, modify src/main/application.yml
:
sentry:\n dsn: ___PUBLIC_DSN___\n # Set traces-sample-rate to 1.0 to capture 100% of transactions for performance monitoring.\n # We recommend adjusting this value in production.\n traces-sample-rate: 1.0
If you use Logback for logging you may also want to send error logs to Sentry. Add a dependency to the sentry-logback
module using either Maven or Gradle. Sentry Spring Boot Starter will auto-configure SentryAppender
.
<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-logback</artifactId>\n <version>7.3.0</version>\n</dependency>
To upload your source code to Sentry so it can be shown in stack traces, use our Maven plugin.
\n<build>\n <plugins>\n <plugin>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-maven-plugin</artifactId>\n <version>0.0.2</version>\n <configuration>\n <!-- for showing output of sentry-cli -->\n <debugSentryCli>true</debugSentryCli>\n\n <!-- download the latest sentry-cli and provide path to it here -->\n <!-- download it here: https://github.com/getsentry/sentry-cli/releases -->\n <!-- minimum required version is 2.17.3 -->\n <sentryCliExecutablePath>/path/to/sentry-cli</sentryCliExecutablePath>\n\n <org>___ORG_SLUG___</org>\n\n <project>___PROJECT_SLUG___</project>\n\n <!-- in case you're self hosting, provide the URL here -->\n <!--<url>http://localhost:8000/</url>-->\n\n <!-- provide your auth token via SENTRY_AUTH_TOKEN environment variable -->\n <!-- you can find it in Sentry UI: Settings > Account > API > Auth Tokens -->\n <authToken>${env.SENTRY_AUTH_TOKEN}</authToken>\n </configuration>\n <executions>\n <execution>\n <phase>generate-resources</phase>\n <goals>\n <goal>uploadSourceBundle</goal>\n </goals>\n </execution>\n </executions>\n </plugin>\n </plugins>\n ...\n</build>
implementation 'io.sentry:sentry-logback:7.3.0'
To upload your source code to Sentry so it can be shown in stack traces, use our Gradle plugin.
\nbuildscript {\n repositories {\n mavenCentral()\n }\n}\n\nplugins {\n id \"io.sentry.jvm.gradle\" version \"4.2.0\"\n}\n\nsentry {\n // Generates a JVM (Java, Kotlin, etc.) source bundle and uploads your source code to Sentry.\n // This enables source context, allowing you to see your source\n // code as part of your stack traces in Sentry.\n includeSourceContext = true\n\n org = \"___ORG_SLUG___\"\n projectName = \"___PROJECT_SLUG___\"\n authToken = \"your-sentry-auth-token\"\n}
Then create an intentional error, so you can test that everything is working using either Java or Kotlin:
\nimport java.lang.Exception;\nimport io.sentry.Sentry;\n\ntry {\n throw new Exception(\"This is a test.\");\n} catch (Exception e) {\n Sentry.captureException(e);\n}
import java.lang.Exception\nimport io.sentry.Sentry\n\ntry {\n throw Exception(\"This is a test.\")\n} catch (e: Exception) {\n Sentry.captureException(e)\n}
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nEach incoming Spring MVC HTTP request is automatically turned into a transaction. To create spans around bean method executions, annotate bean method with @SentrySpan
annotation:
import org.springframework.stereotype.Component;\nimport io.sentry.spring.tracing.SentrySpan;\n\n@Component\nclass PersonService {\n\n @SentrySpan\n Person findById(Long id) {\n ...\n }\n}
import org.springframework.stereotype.Component;\nimport io.sentry.spring.jakarta.tracing.SentrySpan;\n\n@Component\nclass PersonService {\n\n @SentrySpan\n Person findById(Long id) {\n ...\n }\n}
import org.springframework.stereotype.Component\nimport io.sentry.spring.tracing.SentrySpan\n\n@Component\nclass PersonService {\n\n @SentrySpan(operation = \"task\")\n fun findById(id: Long): Person {\n ...\n }\n}
import org.springframework.stereotype.Component\nimport io.sentry.spring.jakarta.tracing.SentrySpan\n\n@Component\nclass PersonService {\n\n @SentrySpan(operation = \"task\")\n fun findById(id: Long): Person {\n ...\n }\n}
Check out the documentation to learn more about the API and integrated instrumentations.
"} \ No newline at end of file +{"key":"java.spring-boot","type":"framework","doc_link":"https://docs.sentry.io/platforms/java/guides/spring-boot/","name":"Spring Boot","aliases":[],"categories":["desktop","server"],"body":"Install using either Maven or Gradle:
\n<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-spring-boot-starter</artifactId>\n <version>7.3.0</version>\n</dependency>
<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-spring-boot-starter-jakarta</artifactId>\n <version>7.3.0</version>\n</dependency>
implementation 'io.sentry:sentry-spring-boot-starter:7.3.0'
implementation 'io.sentry:sentry-spring-boot-starter-jakarta:7.3.0'
Open up src/main/application.properties
(or src/main/application.yml
) and configure the
Modify src/main/application.properties
:
sentry.dsn=___PUBLIC_DSN___\n# Set traces-sample-rate to 1.0 to capture 100% of transactions for performance monitoring.\n# We recommend adjusting this value in production.\nsentry.traces-sample-rate=1.0
Or, modify src/main/application.yml
:
sentry:\n dsn: ___PUBLIC_DSN___\n # Set traces-sample-rate to 1.0 to capture 100% of transactions for performance monitoring.\n # We recommend adjusting this value in production.\n traces-sample-rate: 1.0
If you use Logback for logging you may also want to send error logs to Sentry. Add a dependency to the sentry-logback
module using either Maven or Gradle. Sentry Spring Boot Starter will auto-configure SentryAppender
.
<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-logback</artifactId>\n <version>7.3.0</version>\n</dependency>
To upload your source code to Sentry so it can be shown in stack traces, use our Maven plugin.
\n<build>\n <plugins>\n <plugin>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-maven-plugin</artifactId>\n <version>0.0.2</version>\n <configuration>\n <!-- for showing output of sentry-cli -->\n <debugSentryCli>true</debugSentryCli>\n\n <!-- download the latest sentry-cli and provide path to it here -->\n <!-- download it here: https://github.com/getsentry/sentry-cli/releases -->\n <!-- minimum required version is 2.17.3 -->\n <sentryCliExecutablePath>/path/to/sentry-cli</sentryCliExecutablePath>\n\n <org>___ORG_SLUG___</org>\n\n <project>___PROJECT_SLUG___</project>\n\n <!-- in case you're self hosting, provide the URL here -->\n <!--<url>http://localhost:8000/</url>-->\n\n <!-- provide your auth token via SENTRY_AUTH_TOKEN environment variable -->\n <!-- you can find it in Sentry UI: Settings > Account > API > Auth Tokens -->\n <authToken>${env.SENTRY_AUTH_TOKEN}</authToken>\n </configuration>\n <executions>\n <execution>\n <phase>generate-resources</phase>\n <goals>\n <goal>uploadSourceBundle</goal>\n </goals>\n </execution>\n </executions>\n </plugin>\n </plugins>\n ...\n</build>
implementation 'io.sentry:sentry-logback:7.3.0'
To upload your source code to Sentry so it can be shown in stack traces, use our Gradle plugin.
\nbuildscript {\n repositories {\n mavenCentral()\n }\n}\n\nplugins {\n id \"io.sentry.jvm.gradle\" version \"4.2.0\"\n}\n\nsentry {\n // Generates a JVM (Java, Kotlin, etc.) source bundle and uploads your source code to Sentry.\n // This enables source context, allowing you to see your source\n // code as part of your stack traces in Sentry.\n includeSourceContext = true\n\n org = \"___ORG_SLUG___\"\n projectName = \"___PROJECT_SLUG___\"\n authToken = \"your-sentry-auth-token\"\n}
Then create an intentional error, so you can test that everything is working using either Java or Kotlin:
\nimport java.lang.Exception;\nimport io.sentry.Sentry;\n\ntry {\n throw new Exception(\"This is a test.\");\n} catch (Exception e) {\n Sentry.captureException(e);\n}
import java.lang.Exception\nimport io.sentry.Sentry\n\ntry {\n throw Exception(\"This is a test.\")\n} catch (e: Exception) {\n Sentry.captureException(e)\n}
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nEach incoming Spring MVC HTTP request is automatically turned into a transaction. To create spans around bean method executions, annotate bean method with @SentrySpan
annotation:
import org.springframework.stereotype.Component;\nimport io.sentry.spring.tracing.SentrySpan;\n\n@Component\nclass PersonService {\n\n @SentrySpan\n Person findById(Long id) {\n ...\n }\n}
import org.springframework.stereotype.Component;\nimport io.sentry.spring.jakarta.tracing.SentrySpan;\n\n@Component\nclass PersonService {\n\n @SentrySpan\n Person findById(Long id) {\n ...\n }\n}
import org.springframework.stereotype.Component\nimport io.sentry.spring.tracing.SentrySpan\n\n@Component\nclass PersonService {\n\n @SentrySpan(operation = \"task\")\n fun findById(id: Long): Person {\n ...\n }\n}
import org.springframework.stereotype.Component\nimport io.sentry.spring.jakarta.tracing.SentrySpan\n\n@Component\nclass PersonService {\n\n @SentrySpan(operation = \"task\")\n fun findById(id: Long): Person {\n ...\n }\n}
Check out the documentation to learn more about the API and integrated instrumentations.
"} diff --git a/public/_platforms/java/spring.json b/public/_platforms/java/spring.json index 577f63ec2a337..13a3d576cb679 100644 --- a/public/_platforms/java/spring.json +++ b/public/_platforms/java/spring.json @@ -1 +1 @@ -{"key":"java.spring","type":"framework","doc_link":"https://https://docs.sentry.io/platforms/java/guides/spring/","name":"Spring","aliases":[],"categories":["desktop","server"],"body":"Install Sentry's integration with Spring using either Maven or Gradle:
\n<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-spring</artifactId>\n <version>7.3.0</version>\n</dependency>
<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-spring-jakarta</artifactId>\n <version>7.3.0</version>\n</dependency>
To upload your source code to Sentry so it can be shown in stack traces, use our Maven plugin.
\n<build>\n <plugins>\n <plugin>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-maven-plugin</artifactId>\n <version>0.0.2</version>\n <configuration>\n <!-- for showing output of sentry-cli -->\n <debugSentryCli>true</debugSentryCli>\n\n <!-- download the latest sentry-cli and provide path to it here -->\n <!-- download it here: https://github.com/getsentry/sentry-cli/releases -->\n <!-- minimum required version is 2.17.3 -->\n <sentryCliExecutablePath>/path/to/sentry-cli</sentryCliExecutablePath>\n\n <org>___ORG_SLUG___</org>\n\n <project>___PROJECT_SLUG___</project>\n\n <!-- in case you're self hosting, provide the URL here -->\n <!--<url>http://localhost:8000/</url>-->\n\n <!-- provide your auth token via SENTRY_AUTH_TOKEN environment variable -->\n <!-- you can find it in Sentry UI: Settings > Account > API > Auth Tokens -->\n <authToken>${env.SENTRY_AUTH_TOKEN}</authToken>\n </configuration>\n <executions>\n <execution>\n <phase>generate-resources</phase>\n <goals>\n <goal>uploadSourceBundle</goal>\n </goals>\n </execution>\n </executions>\n </plugin>\n </plugins>\n ...\n</build>
implementation 'io.sentry:sentry-spring:7.3.0'
implementation 'io.sentry:sentry-spring-jakarta:7.3.0'
To upload your source code to Sentry so it can be shown in stack traces, use our Gradle plugin.
\nbuildscript {\n repositories {\n mavenCentral()\n }\n}\n\nplugins {\n id \"io.sentry.jvm.gradle\" version \"4.2.0\"\n}\n\nsentry {\n // Generates a JVM (Java, Kotlin, etc.) source bundle and uploads your source code to Sentry.\n // This enables source context, allowing you to see your source\n // code as part of your stack traces in Sentry.\n includeSourceContext = true\n\n org = \"___ORG_SLUG___\"\n projectName = \"___PROJECT_SLUG___\"\n authToken = \"your-sentry-auth-token\"\n}
For other dependency managers see the central Maven repository (Spring 5) and central Maven repository (Spring 6).
\nConfigure Sentry as soon as possible in your application's lifecycle:
\nThe sentry-spring
and sentry-spring-jakarta
libraries provide an @EnableSentry
annotation that registers all required Spring beans. @EnableSentry
can be placed on any class annotated with @Configuration including the main entry class in Spring Boot applications annotated with @SpringBootApplication.
import io.sentry.spring.EnableSentry;\n\n@EnableSentry(dsn = \"___PUBLIC_DSN___\")\n@Configuration\nclass SentryConfiguration {\n}
import io.sentry.spring.jakarta.EnableSentry;\n\n@EnableSentry(dsn = \"___PUBLIC_DSN___\")\n@Configuration\nclass SentryConfiguration {\n}
import io.sentry.spring.EnableSentry\nimport org.springframework.core.Ordered\n\n@EnableSentry(\n dsn = \"___PUBLIC_DSN___\",\n exceptionResolverOrder = Ordered.LOWEST_PRECEDENCE\n)
import io.sentry.spring.jakarta.EnableSentry\nimport org.springframework.core.Ordered\n\n@EnableSentry(\n dsn = \"___PUBLIC_DSN___\",\n exceptionResolverOrder = Ordered.LOWEST_PRECEDENCE\n)
Last, create an intentional error, so you can test that everything is working:
\nimport java.lang.Exception;\nimport io.sentry.Sentry;\n\ntry {\n throw new Exception(\"This is a test.\");\n} catch (Exception e) {\n Sentry.captureException(e);\n}
import java.lang.Exception\nimport io.sentry.Sentry\n\ntry {\n throw Exception(\"This is a test.\")\n} catch (e: Exception) {\n Sentry.captureException(e)\n}
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nCheck out the documentation to learn how to configure and use Sentry Performance Monitoring with Spring.
"} \ No newline at end of file +{"key":"java.spring","type":"framework","doc_link":"https://https://docs.sentry.io/platforms/java/guides/spring/","name":"Spring","aliases":[],"categories":["desktop","server"],"body":"Install Sentry's integration with Spring using either Maven or Gradle:
\n<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-spring</artifactId>\n <version>7.3.0</version>\n</dependency>
<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-spring-jakarta</artifactId>\n <version>7.3.0</version>\n</dependency>
To upload your source code to Sentry so it can be shown in stack traces, use our Maven plugin.
\n<build>\n <plugins>\n <plugin>\n <groupId>io.sentry</groupId>\n <artifactId>sentry-maven-plugin</artifactId>\n <version>0.0.2</version>\n <configuration>\n <!-- for showing output of sentry-cli -->\n <debugSentryCli>true</debugSentryCli>\n\n <!-- download the latest sentry-cli and provide path to it here -->\n <!-- download it here: https://github.com/getsentry/sentry-cli/releases -->\n <!-- minimum required version is 2.17.3 -->\n <sentryCliExecutablePath>/path/to/sentry-cli</sentryCliExecutablePath>\n\n <org>___ORG_SLUG___</org>\n\n <project>___PROJECT_SLUG___</project>\n\n <!-- in case you're self hosting, provide the URL here -->\n <!--<url>http://localhost:8000/</url>-->\n\n <!-- provide your auth token via SENTRY_AUTH_TOKEN environment variable -->\n <!-- you can find it in Sentry UI: Settings > Account > API > Auth Tokens -->\n <authToken>${env.SENTRY_AUTH_TOKEN}</authToken>\n </configuration>\n <executions>\n <execution>\n <phase>generate-resources</phase>\n <goals>\n <goal>uploadSourceBundle</goal>\n </goals>\n </execution>\n </executions>\n </plugin>\n </plugins>\n ...\n</build>
implementation 'io.sentry:sentry-spring:7.3.0'
implementation 'io.sentry:sentry-spring-jakarta:7.3.0'
To upload your source code to Sentry so it can be shown in stack traces, use our Gradle plugin.
\nbuildscript {\n repositories {\n mavenCentral()\n }\n}\n\nplugins {\n id \"io.sentry.jvm.gradle\" version \"4.2.0\"\n}\n\nsentry {\n // Generates a JVM (Java, Kotlin, etc.) source bundle and uploads your source code to Sentry.\n // This enables source context, allowing you to see your source\n // code as part of your stack traces in Sentry.\n includeSourceContext = true\n\n org = \"___ORG_SLUG___\"\n projectName = \"___PROJECT_SLUG___\"\n authToken = \"your-sentry-auth-token\"\n}
For other dependency managers see the central Maven repository (Spring 5) and central Maven repository (Spring 6).
\nConfigure Sentry as soon as possible in your application's lifecycle:
\nThe sentry-spring
and sentry-spring-jakarta
libraries provide an @EnableSentry
annotation that registers all required Spring beans. @EnableSentry
can be placed on any class annotated with @Configuration including the main entry class in Spring Boot applications annotated with @SpringBootApplication.
import io.sentry.spring.EnableSentry;\n\n@EnableSentry(dsn = \"___PUBLIC_DSN___\")\n@Configuration\nclass SentryConfiguration {\n}
import io.sentry.spring.jakarta.EnableSentry;\n\n@EnableSentry(dsn = \"___PUBLIC_DSN___\")\n@Configuration\nclass SentryConfiguration {\n}
import io.sentry.spring.EnableSentry\nimport org.springframework.core.Ordered\n\n@EnableSentry(\n dsn = \"___PUBLIC_DSN___\",\n exceptionResolverOrder = Ordered.LOWEST_PRECEDENCE\n)
import io.sentry.spring.jakarta.EnableSentry\nimport org.springframework.core.Ordered\n\n@EnableSentry(\n dsn = \"___PUBLIC_DSN___\",\n exceptionResolverOrder = Ordered.LOWEST_PRECEDENCE\n)
Last, create an intentional error, so you can test that everything is working:
\nimport java.lang.Exception;\nimport io.sentry.Sentry;\n\ntry {\n throw new Exception(\"This is a test.\");\n} catch (Exception e) {\n Sentry.captureException(e);\n}
import java.lang.Exception\nimport io.sentry.Sentry\n\ntry {\n throw Exception(\"This is a test.\")\n} catch (e: Exception) {\n Sentry.captureException(e)\n}
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nCheck out the documentation to learn how to configure and use Sentry Performance Monitoring with Spring.
"} diff --git a/public/_platforms/javascript/angular-with-error-monitoring-and-replay.json b/public/_platforms/javascript/angular-with-error-monitoring-and-replay.json index 910037bb7fb73..68273a407d4bc 100644 --- a/public/_platforms/javascript/angular-with-error-monitoring-and-replay.json +++ b/public/_platforms/javascript/angular-with-error-monitoring-and-replay.json @@ -1 +1 @@ -{"key":"javascript.angular-with-error-monitoring-and-replay","type":"framework","doc_link":"https://docs.sentry.io/platforms/javascript/guides/angular/","name":"Angular","aliases":[],"categories":[],"body":"To use Sentry with your Angular application, you'll need @sentry/angular-ivy
or @sentry/angular
, Sentry’s Browser Angular SDKs:
@sentry/angular-ivy
@sentry/angular
Add the Sentry SDK as a dependency using yarn
or npm
:
# Using yarn (Angular 12+)\nyarn add @sentry/angular-ivy\n# Using yarn (Angular 10 and 11)\nyarn add @sentry/angular\n\n# Using npm (Angular 12+)\nnpm install --save @sentry/angular-ivy\n# Using npm (Angular 10 and 11)\nnpm install --save @sentry/angular
You should init
the Sentry browser SDK in your main.ts
file as soon as possible during application load up, before initializing Angular:
import { enableProdMode } from \"@angular/core\";\nimport { platformBrowserDynamic } from \"@angular/platform-browser-dynamic\";\n// import * as Sentry from \"@sentry/angular\" // for Angular 10/11 instead\nimport * as Sentry from \"@sentry/angular-ivy\";\n\nimport { AppModule } from \"./app/app.module\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});\n\nenableProdMode();\nplatformBrowserDynamic()\n .bootstrapModule(AppModule)\n .then((success) => console.log(`Bootstrap success`))\n .catch((err) => console.error(err));
The Sentry Angular SDK exports a function to instantiate ErrorHandler
provider that will automatically send JavaScript errors captured by the Angular's error handler.
import { APP_INITIALIZER, ErrorHandler, NgModule } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n// import * as Sentry from \"@sentry/angular\" // for Angular 10/11 instead\nimport * as Sentry from \"@sentry/angular-ivy\";\n\n@NgModule({\n // ...\n providers: [\n {\n provide: ErrorHandler,\n useValue: Sentry.createErrorHandler({\n showDialog: true,\n }),\n },\n ],\n // ...\n})\nexport class AppModule {}
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
To use Sentry with your Angular application, you'll need @sentry/angular-ivy
or @sentry/angular
, Sentry’s Browser Angular SDKs:
@sentry/angular-ivy
@sentry/angular
Add the Sentry SDK as a dependency using yarn
or npm
:
# Using yarn (Angular 12+)\nyarn add @sentry/angular-ivy\n# Using yarn (Angular 10 and 11)\nyarn add @sentry/angular\n\n# Using npm (Angular 12+)\nnpm install --save @sentry/angular-ivy\n# Using npm (Angular 10 and 11)\nnpm install --save @sentry/angular
You should init
the Sentry browser SDK in your main.ts
file as soon as possible during application load up, before initializing Angular:
import { enableProdMode } from \"@angular/core\";\nimport { platformBrowserDynamic } from \"@angular/platform-browser-dynamic\";\n// import * as Sentry from \"@sentry/angular\" // for Angular 10/11 instead\nimport * as Sentry from \"@sentry/angular-ivy\";\n\nimport { AppModule } from \"./app/app.module\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});\n\nenableProdMode();\nplatformBrowserDynamic()\n .bootstrapModule(AppModule)\n .then((success) => console.log(`Bootstrap success`))\n .catch((err) => console.error(err));
The Sentry Angular SDK exports a function to instantiate ErrorHandler
provider that will automatically send JavaScript errors captured by the Angular's error handler.
import { APP_INITIALIZER, ErrorHandler, NgModule } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n// import * as Sentry from \"@sentry/angular\" // for Angular 10/11 instead\nimport * as Sentry from \"@sentry/angular-ivy\";\n\n@NgModule({\n // ...\n providers: [\n {\n provide: ErrorHandler,\n useValue: Sentry.createErrorHandler({\n showDialog: true,\n }),\n },\n ],\n // ...\n})\nexport class AppModule {}
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
To use Sentry with your Angular application, you'll need @sentry/angular-ivy
or @sentry/angular
, Sentry’s Browser Angular SDKs:
@sentry/angular-ivy
@sentry/angular
Add the Sentry SDK as a dependency using yarn
or npm
:
# Using yarn (Angular 12+)\nyarn add @sentry/angular-ivy\n# Using yarn (Angular 10 and 11)\nyarn add @sentry/angular\n\n# Using npm (Angular 12+)\nnpm install --save @sentry/angular-ivy\n# Using npm (Angular 10 and 11)\nnpm install --save @sentry/angular
You should init
the Sentry browser SDK in your main.ts
file as soon as possible during application load up, before initializing Angular:
import { enableProdMode } from \"@angular/core\";\nimport { platformBrowserDynamic } from \"@angular/platform-browser-dynamic\";\n// import * as Sentry from \"@sentry/angular\" // for Angular 10/11 instead\nimport * as Sentry from \"@sentry/angular-ivy\";\n\nimport { AppModule } from \"./app/app.module\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});\n\nenableProdMode();\nplatformBrowserDynamic()\n .bootstrapModule(AppModule)\n .then((success) => console.log(`Bootstrap success`))\n .catch((err) => console.error(err));
The Sentry Angular SDK exports a function to instantiate ErrorHandler
provider that will automatically send JavaScript errors captured by the Angular's error handler.
import { APP_INITIALIZER, ErrorHandler, NgModule } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n// import * as Sentry from \"@sentry/angular\" // for Angular 10/11 instead\nimport * as Sentry from \"@sentry/angular-ivy\";\n\n@NgModule({\n // ...\n providers: [\n {\n provide: ErrorHandler,\n useValue: Sentry.createErrorHandler({\n showDialog: true,\n }),\n },\n ],\n // ...\n})\nexport class AppModule {}
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
To use Sentry with your Angular application, you'll need @sentry/angular-ivy
or @sentry/angular
, Sentry’s Browser Angular SDKs:
@sentry/angular-ivy
@sentry/angular
Add the Sentry SDK as a dependency using yarn
or npm
:
# Using yarn (Angular 12+)\nyarn add @sentry/angular-ivy\n# Using yarn (Angular 10 and 11)\nyarn add @sentry/angular\n\n# Using npm (Angular 12+)\nnpm install --save @sentry/angular-ivy\n# Using npm (Angular 10 and 11)\nnpm install --save @sentry/angular
You should init
the Sentry browser SDK in your main.ts
file as soon as possible during application load up, before initializing Angular:
import { enableProdMode } from \"@angular/core\";\nimport { platformBrowserDynamic } from \"@angular/platform-browser-dynamic\";\n// import * as Sentry from \"@sentry/angular\" // for Angular 10/11 instead\nimport * as Sentry from \"@sentry/angular-ivy\";\n\nimport { AppModule } from \"./app/app.module\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});\n\nenableProdMode();\nplatformBrowserDynamic()\n .bootstrapModule(AppModule)\n .then((success) => console.log(`Bootstrap success`))\n .catch((err) => console.error(err));
The Sentry Angular SDK exports a function to instantiate ErrorHandler
provider that will automatically send JavaScript errors captured by the Angular's error handler.
import { APP_INITIALIZER, ErrorHandler, NgModule } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n// import * as Sentry from \"@sentry/angular\" // for Angular 10/11 instead\nimport * as Sentry from \"@sentry/angular-ivy\";\n\n@NgModule({\n // ...\n providers: [\n {\n provide: ErrorHandler,\n useValue: Sentry.createErrorHandler({\n showDialog: true,\n }),\n },\n ],\n // ...\n})\nexport class AppModule {}
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using ember-cli\nember install @sentry/ember
You should init
the Sentry SDK as soon as possible during your application load up in app.js
, before initializing Ember:
import Application from \"@ember/application\";\nimport Resolver from \"ember-resolver\";\nimport loadInitializers from \"ember-load-initializers\";\nimport config from \"./config/environment\";\n\nimport * as Sentry from \"@sentry/ember\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});\n\nexport default class App extends Application {\n modulePrefix = config.modulePrefix;\n podModulePrefix = config.podModulePrefix;\n Resolver = Resolver;\n}
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using ember-cli\nember install @sentry/ember
You should init
the Sentry SDK as soon as possible during your application load up in app.js
, before initializing Ember:
import Application from \"@ember/application\";\nimport Resolver from \"ember-resolver\";\nimport loadInitializers from \"ember-load-initializers\";\nimport config from \"./config/environment\";\n\nimport * as Sentry from \"@sentry/ember\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});\n\nexport default class App extends Application {\n modulePrefix = config.modulePrefix;\n podModulePrefix = config.podModulePrefix;\n Resolver = Resolver;\n}
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using ember-cli\nember install @sentry/ember
You should init
the Sentry SDK as soon as possible during your application load up in app.js
, before initializing Ember:
import Application from \"@ember/application\";\nimport Resolver from \"ember-resolver\";\nimport loadInitializers from \"ember-load-initializers\";\nimport config from \"./config/environment\";\n\nimport * as Sentry from \"@sentry/ember\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});\n\nexport default class App extends Application {\n modulePrefix = config.modulePrefix;\n podModulePrefix = config.podModulePrefix;\n Resolver = Resolver;\n}
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using ember-cli\nember install @sentry/ember
You should init
the Sentry SDK as soon as possible during your application load up in app.js
, before initializing Ember:
import Application from \"@ember/application\";\nimport Resolver from \"ember-resolver\";\nimport loadInitializers from \"ember-load-initializers\";\nimport config from \"./config/environment\";\n\nimport * as Sentry from \"@sentry/ember\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});\n\nexport default class App extends Application {\n modulePrefix = config.modulePrefix;\n podModulePrefix = config.podModulePrefix;\n Resolver = Resolver;\n}
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/gatsby\n\n# Using npm\nnpm install --save @sentry/gatsby
Register the @sentry/gatsby
plugin in your Gatsby configuration file (typically gatsby-config.js
).
module.exports = {\n plugins: [\n {\n resolve: \"@sentry/gatsby\",\n },\n ],\n};
Then, configure your Sentry.init
:
import * as Sentry from \"@sentry/gatsby\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/gatsby\n\n# Using npm\nnpm install --save @sentry/gatsby
Register the @sentry/gatsby
plugin in your Gatsby configuration file (typically gatsby-config.js
).
module.exports = {\n plugins: [\n {\n resolve: \"@sentry/gatsby\",\n },\n ],\n};
Then, configure your Sentry.init
:
import * as Sentry from \"@sentry/gatsby\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/gatsby\n\n# Using npm\nnpm install --save @sentry/gatsby
Register the @sentry/gatsby
plugin in your Gatsby configuration file (typically gatsby-config.js
).
module.exports = {\n plugins: [\n {\n resolve: \"@sentry/gatsby\",\n },\n ],\n};
Then, configure your Sentry.init
:
import * as Sentry from \"@sentry/gatsby\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/gatsby\n\n# Using npm\nnpm install --save @sentry/gatsby
Register the @sentry/gatsby
plugin in your Gatsby configuration file (typically gatsby-config.js
).
module.exports = {\n plugins: [\n {\n resolve: \"@sentry/gatsby\",\n },\n ],\n};
Then, configure your Sentry.init
:
import * as Sentry from \"@sentry/gatsby\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Add Sentry automatically to your app with the Sentry wizard:
\nnpx @sentry/wizard -i nextjs
The Sentry wizard will automatically patch your application:
\nsentry.client.config.js
and sentry.server.config.js
with the default Sentry.init
.next.config.js
with the default configuration.sentry.properties
with configuration for sentry-cli (which is used when automatically uploading source maps).You can also configure it manually.
\nConfigure the Sentry initialization:
\nInstall Sentry’s Next.js SDK using either yarn
or npm
:
yarn add @sentry/nextjs\n# or\nnpm install --save @sentry/nextjs
Sentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nreturn <button onClick={() => methodDoesNotExist()}>Break the world</button>;
Add Sentry automatically to your app with the Sentry wizard:
\nnpx @sentry/wizard -i nextjs
The Sentry wizard will automatically patch your application:
\nsentry.client.config.js
and sentry.server.config.js
with the default Sentry.init
.next.config.js
with the default configuration.sentry.properties
with configuration for sentry-cli (which is used when automatically uploading source maps).You can also configure it manually.
\nConfigure the Sentry initialization:
\nInstall Sentry’s Next.js SDK using either yarn
or npm
:
yarn add @sentry/nextjs\n# or\nnpm install --save @sentry/nextjs
Sentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nreturn <button onClick={() => methodDoesNotExist()}>Break the world</button>;
Add Sentry automatically to your app with the Sentry wizard:
\nnpx @sentry/wizard -i nextjs
The Sentry wizard will automatically patch your application:
\nsentry.client.config.js
and sentry.server.config.js
with the default Sentry.init
.next.config.js
with the default configuration.sentry.properties
with configuration for sentry-cli (which is used when automatically uploading source maps).You can also configure it manually.
\nConfigure the Sentry initialization:
\nInstall Sentry’s Next.js SDK using either yarn
or npm
:
yarn add @sentry/nextjs\n# or\nnpm install --save @sentry/nextjs
Sentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nreturn <button onClick={() => methodDoesNotExist()}>Break the world</button>;
Add Sentry automatically to your app with the Sentry wizard:
\nnpx @sentry/wizard -i nextjs
The Sentry wizard will automatically patch your application:
\nsentry.client.config.js
and sentry.server.config.js
with the default Sentry.init
.next.config.js
with the default configuration.sentry.properties
with configuration for sentry-cli (which is used when automatically uploading source maps).You can also configure it manually.
\nConfigure the Sentry initialization:
\nInstall Sentry’s Next.js SDK using either yarn
or npm
:
yarn add @sentry/nextjs\n# or\nnpm install --save @sentry/nextjs
Sentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nreturn <button onClick={() => methodDoesNotExist()}>Break the world</button>;
Install our JavaScript browser SDK using either yarn
or npm
:
# Using yarn\nyarn add @sentry/browser\n\n# Using npm\nnpm install --save @sentry/browser
Install our JavaScript browser SDK using either yarn
or npm
:
# Using yarn\nyarn add @sentry/browser\n\n# Using npm\nnpm install --save @sentry/browser
Configuration should happen as early as possible in your application's lifecycle.
\nOnce this is done, Sentry's JavaScript SDK captures all unhandled exceptions and transactions.
\nimport * as Sentry from \"@sentry/browser\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.BrowserTracing()],\n\n // Set tracesSampleRate to 1.0 to capture 100%\n // of transactions for performance monitoring.\n // We recommend adjusting this value in production\n tracesSampleRate: 1.0,\n // Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled\n tracePropagationTargets: [\"localhost\", /^https:\\/\\/yourserver\\.io\\/api/],\n});
We recommend adjusting the value of tracesSampleRate
in production. Learn more about configuring sampling in our full documentation.
Configuration should happen as early as possible in your application's lifecycle.
\nOnce this is done, Sentry's JavaScript SDK captures all unhandled exceptions and transactions.
\nimport * as Sentry from \"@sentry/browser\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.BrowserTracing()],\n\n // Set tracesSampleRate to 1.0 to capture 100%\n // of transactions for performance monitoring.\n // We recommend adjusting this value in production\n tracesSampleRate: 1.0,\n // Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled\n tracePropagationTargets: [\"localhost\", /^https:\\/\\/yourserver\\.io\\/api/],\n});
We recommend adjusting the value of tracesSampleRate
in production. Learn more about configuring sampling in our full documentation.
Verify that performance monitoring is working correctly with our automatic instrumentation by simply using your JavaScript application.
\nYou have the option to manually construct a transaction using custom instrumentation:
\nconst transaction = Sentry.startTransaction({ name: \"test-transaction\" });\nconst span = transaction.startChild({ op: \"functionX\" }); // This function returns a Span\n// exampleFunctionCall();\nspan.finish(); // Remember that only finished spans will be sent with the transaction\ntransaction.finish(); // Finishing the transaction will send it to Sentry
Verify that performance monitoring is working correctly with our automatic instrumentation by simply using your JavaScript application.
\nYou have the option to manually construct a transaction using custom instrumentation:
\nconst transaction = Sentry.startTransaction({ name: \"test-transaction\" });\nconst span = transaction.startChild({ op: \"functionX\" }); // This function returns a Span\n// exampleFunctionCall();\nspan.finish(); // Remember that only finished spans will be sent with the transaction\ntransaction.finish(); // Finishing the transaction will send it to Sentry
Install our JavaScript browser SDK using either yarn
or npm
:
# Using yarn\nyarn add @sentry/react\n\n# Using npm\nnpm install --save @sentry/react
Install our JavaScript browser SDK using either yarn
or npm
:
# Using yarn\nyarn add @sentry/react\n\n# Using npm\nnpm install --save @sentry/react
Next, import and initialize the Sentry module as early as possible, before initializing React:
\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport * as Sentry from \"@sentry/react\";\nimport App from \"./App\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.BrowserTracing()],\n\n // Set tracesSampleRate to 1.0 to capture 100%\n // of transactions for performance monitoring.\n // We recommend adjusting this value in production\n tracesSampleRate: 1.0,\n // Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled\n tracePropagationTargets: [\"localhost\", /^https:\\/\\/yourserver\\.io\\/api/],\n});\n\nReactDOM.render(<App />, document.getElementById(\"root\"));\n\n// Can also use with React Concurrent Mode\n// ReactDOM.createRoot(document.getElementById('root')).render(<App />);
We recommend adjusting the value of tracesSampleRate
in production. Learn more about configuring sampling in our full documentation.
Next, import and initialize the Sentry module as early as possible, before initializing React:
\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport * as Sentry from \"@sentry/react\";\nimport App from \"./App\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.BrowserTracing()],\n\n // Set tracesSampleRate to 1.0 to capture 100%\n // of transactions for performance monitoring.\n // We recommend adjusting this value in production\n tracesSampleRate: 1.0,\n // Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled\n tracePropagationTargets: [\"localhost\", /^https:\\/\\/yourserver\\.io\\/api/],\n});\n\nReactDOM.render(<App />, document.getElementById(\"root\"));\n\n// Can also use with React Concurrent Mode\n// ReactDOM.createRoot(document.getElementById('root')).render(<App />);
We recommend adjusting the value of tracesSampleRate
in production. Learn more about configuring sampling in our full documentation.
Verify that performance monitoring is working correctly with our automatic instrumentation by simply using your React application.
\nYou have the option to manually construct a transaction using custom instrumentation:
\nconst transaction = Sentry.startTransaction({ name: \"test-transaction\" });\nconst span = transaction.startChild({ op: \"functionX\" }); // This function returns a Span\n// functionCallX\nspan.finish(); // Remember that only finished spans will be sent with the transaction\ntransaction.finish(); // Finishing the transaction will send it to Sentry
In addition, @sentry/react
exports a withProfiler
higher order component that can be used to capture React-related spans for specific React components:
import * as Sentry from \"@sentry/react\";\n\nfunction App(props) {\n // ...\n return <div />;\n}\n\nexport default Sentry.withProfiler(App);
Learn more about the profiler in React Component Tracking.
"} \ No newline at end of file +{"key":"javascript.react-performance-onboarding-3-verify","type":"framework","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/tracing/","name":"React","aliases":[],"categories":[],"body":"Verify that performance monitoring is working correctly with our automatic instrumentation by simply using your React application.
\nYou have the option to manually construct a transaction using custom instrumentation:
\nconst transaction = Sentry.startTransaction({ name: \"test-transaction\" });\nconst span = transaction.startChild({ op: \"functionX\" }); // This function returns a Span\n// functionCallX\nspan.finish(); // Remember that only finished spans will be sent with the transaction\ntransaction.finish(); // Finishing the transaction will send it to Sentry
In addition, @sentry/react
exports a withProfiler
higher order component that can be used to capture React-related spans for specific React components:
import * as Sentry from \"@sentry/react\";\n\nfunction App(props) {\n // ...\n return <div />;\n}\n\nexport default Sentry.withProfiler(App);
Learn more about the profiler in React Component Tracking.
"} diff --git a/public/_platforms/javascript/react-with-error-monitoring-and-replay.json b/public/_platforms/javascript/react-with-error-monitoring-and-replay.json index 58a4f80e43097..54c0cf19857f7 100644 --- a/public/_platforms/javascript/react-with-error-monitoring-and-replay.json +++ b/public/_platforms/javascript/react-with-error-monitoring-and-replay.json @@ -1 +1 @@ -{"key":"javascript.react-with-error-monitoring-and-replay","type":"framework","doc_link":"https://docs.sentry.io/platforms/javascript/guides/react/","name":"React","aliases":[],"categories":[],"body":"Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/react\n\n# Using npm\nnpm install --save @sentry/react
Initialize Sentry as early as possible in your application's lifecycle.
\nimport { createRoot } React from \"react-dom/client\";\nimport React from \"react\";\nimport * as Sentry from \"@sentry/react\";\nimport App from \"./App\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});\n\nconst container = document.getElementById(“app”);\nconst root = createRoot(container);\nroot.render(<App />)
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nreturn <button onClick={() => methodDoesNotExist()}>Break the world</button>;
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/react\n\n# Using npm\nnpm install --save @sentry/react
Initialize Sentry as early as possible in your application's lifecycle.
\nimport { createRoot } React from \"react-dom/client\";\nimport React from \"react\";\nimport * as Sentry from \"@sentry/react\";\nimport App from \"./App\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});\n\nconst container = document.getElementById(“app”);\nconst root = createRoot(container);\nroot.render(<App />)
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nreturn <button onClick={() => methodDoesNotExist()}>Break the world</button>;
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/react\n\n# Using npm\nnpm install --save @sentry/react
Initialize Sentry as early as possible in your application's lifecycle.
\nimport { createRoot } React from \"react-dom/client\";\nimport React from \"react\";\nimport * as Sentry from \"@sentry/react\";\nimport App from \"./App\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});\n\nconst container = document.getElementById(“app”);\nconst root = createRoot(container);\nroot.render(<App />)
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nreturn <button onClick={() => methodDoesNotExist()}>Break the world</button>;
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/react\n\n# Using npm\nnpm install --save @sentry/react
Initialize Sentry as early as possible in your application's lifecycle.
\nimport { createRoot } React from \"react-dom/client\";\nimport React from \"react\";\nimport * as Sentry from \"@sentry/react\";\nimport App from \"./App\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});\n\nconst container = document.getElementById(“app”);\nconst root = createRoot(container);\nroot.render(<App />)
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nreturn <button onClick={() => methodDoesNotExist()}>Break the world</button>;
In this quick guide you’ll set up @sentry/react
for error monitoring and performance monitoring
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/react\n\n# Using npm\nnpm install --save @sentry/react
Initialize Sentry as early as possible in your application's lifecycle.
\nimport { createRoot } from \"react-dom/client\";\nimport React from \"react\";\nimport * as Sentry from \"@sentry/react\";\nimport App from \"./App\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [\n new Sentry.BrowserTracing(),\n ],\n tracesSampleRate: 1.0,\n // Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled\n tracePropagationTargets: [\"localhost\", /^https:\\/\\/yourserver\\.io\\/api/],\n});\n\nconst container = document.getElementById(“app”);\nconst root = createRoot(container);\nroot.render(<App />);
\n\ntracesSampleRate: 1.0\nThe above setting ensures that 100% of transactions will be sent to Sentry, but we recommend lowering this number in production.
\n
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nreturn <button onClick={() => methodDoesNotExist()}>Break the world</button>;
In this quick guide you’ll set up @sentry/react
for error monitoring and performance monitoring
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/react\n\n# Using npm\nnpm install --save @sentry/react
Initialize Sentry as early as possible in your application's lifecycle.
\nimport { createRoot } from \"react-dom/client\";\nimport React from \"react\";\nimport * as Sentry from \"@sentry/react\";\nimport App from \"./App\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [\n new Sentry.BrowserTracing(),\n ],\n tracesSampleRate: 1.0,\n // Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled\n tracePropagationTargets: [\"localhost\", /^https:\\/\\/yourserver\\.io\\/api/],\n});\n\nconst container = document.getElementById(“app”);\nconst root = createRoot(container);\nroot.render(<App />);
\n\ntracesSampleRate: 1.0\nThe above setting ensures that 100% of transactions will be sent to Sentry, but we recommend lowering this number in production.
\n
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nreturn <button onClick={() => methodDoesNotExist()}>Break the world</button>;
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/remix\n\n# Using npm\nnpm install --save @sentry/remix
Import and initialize Sentry in your Remix entry points for both the client and server:
\nimport { useLocation, useMatches } from \"@remix-run/react\";\nimport * as Sentry from \"@sentry/remix\";\nimport { useEffect } from \"react\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});
Initialize Sentry in your entry point for the server to capture exceptions and get performance metrics for your action
and loader
functions:
import * as Sentry from \"@sentry/remix\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
Lastly, wrap your Remix root with withSentry
to catch React component errors and to get parameterized router transactions:
import {\n Links,\n LiveReload,\n Meta,\n Outlet,\n Scripts,\n ScrollRestoration,\n} from \"@remix-run/react\";\n\nimport { withSentry } from \"@sentry/remix\";\n\nfunction App() {\n return (\n <html>\n <head>\n <Meta />\n <Links />\n </head>\n <body>\n <Outlet />\n <ScrollRestoration />\n <Scripts />\n <LiveReload />\n </body>\n </html>\n );\n}\n\nexport default withSentry(App);
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nYou can trigger your first event from your development environment by raising an exception somewhere within your application. An example of this would be rendering a button whose onClick
handler attempts to invoke a method that does not exist:
<button onClick={() => methodDoesNotExist()}>Break the world</button>
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/remix\n\n# Using npm\nnpm install --save @sentry/remix
Import and initialize Sentry in your Remix entry points for both the client and server:
\nimport { useLocation, useMatches } from \"@remix-run/react\";\nimport * as Sentry from \"@sentry/remix\";\nimport { useEffect } from \"react\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});
Initialize Sentry in your entry point for the server to capture exceptions and get performance metrics for your action
and loader
functions:
import * as Sentry from \"@sentry/remix\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
Lastly, wrap your Remix root with withSentry
to catch React component errors and to get parameterized router transactions:
import {\n Links,\n LiveReload,\n Meta,\n Outlet,\n Scripts,\n ScrollRestoration,\n} from \"@remix-run/react\";\n\nimport { withSentry } from \"@sentry/remix\";\n\nfunction App() {\n return (\n <html>\n <head>\n <Meta />\n <Links />\n </head>\n <body>\n <Outlet />\n <ScrollRestoration />\n <Scripts />\n <LiveReload />\n </body>\n </html>\n );\n}\n\nexport default withSentry(App);
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nYou can trigger your first event from your development environment by raising an exception somewhere within your application. An example of this would be rendering a button whose onClick
handler attempts to invoke a method that does not exist:
<button onClick={() => methodDoesNotExist()}>Break the world</button>
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/remix\n\n# Using npm\nnpm install --save @sentry/remix
Import and initialize Sentry in your Remix entry points for both the client and server:
\nimport { useLocation, useMatches } from \"@remix-run/react\";\nimport * as Sentry from \"@sentry/remix\";\nimport { useEffect } from \"react\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
Initialize Sentry in your entry point for the server to capture exceptions and get performance metrics for your action
and loader
functions:
import * as Sentry from \"@sentry/remix\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
Lastly, wrap your Remix root with withSentry
to catch React component errors and to get parameterized router transactions:
import {\n Links,\n LiveReload,\n Meta,\n Outlet,\n Scripts,\n ScrollRestoration,\n} from \"@remix-run/react\";\n\nimport { withSentry } from \"@sentry/remix\";\n\nfunction App() {\n return (\n <html>\n <head>\n <Meta />\n <Links />\n </head>\n <body>\n <Outlet />\n <ScrollRestoration />\n <Scripts />\n <LiveReload />\n </body>\n </html>\n );\n}\n\nexport default withSentry(App);
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nYou can trigger your first event from your development environment by raising an exception somewhere within your application. An example of this would be rendering a button whose onClick
handler attempts to invoke a method that does not exist:
return <button onClick={() => methodDoesNotExist()}>Break the world</button>;
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/remix\n\n# Using npm\nnpm install --save @sentry/remix
Import and initialize Sentry in your Remix entry points for both the client and server:
\nimport { useLocation, useMatches } from \"@remix-run/react\";\nimport * as Sentry from \"@sentry/remix\";\nimport { useEffect } from \"react\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
Initialize Sentry in your entry point for the server to capture exceptions and get performance metrics for your action
and loader
functions:
import * as Sentry from \"@sentry/remix\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
Lastly, wrap your Remix root with withSentry
to catch React component errors and to get parameterized router transactions:
import {\n Links,\n LiveReload,\n Meta,\n Outlet,\n Scripts,\n ScrollRestoration,\n} from \"@remix-run/react\";\n\nimport { withSentry } from \"@sentry/remix\";\n\nfunction App() {\n return (\n <html>\n <head>\n <Meta />\n <Links />\n </head>\n <body>\n <Outlet />\n <ScrollRestoration />\n <Scripts />\n <LiveReload />\n </body>\n </html>\n );\n}\n\nexport default withSentry(App);
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nYou can trigger your first event from your development environment by raising an exception somewhere within your application. An example of this would be rendering a button whose onClick
handler attempts to invoke a method that does not exist:
return <button onClick={() => methodDoesNotExist()}>Break the world</button>;
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/svelte\n\n# Using npm\nnpm install --save @sentry/svelte
Initialize Sentry as early as possible in your application's lifecycle, usually your Svelte app's entry point (main.ts/js
):
import \"./app.css\";\nimport App from \"./App.svelte\";\n\nimport * as Sentry from \"@sentry/svelte\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});\n\nconst app = new App({\n target: document.getElementById(\"app\"),\n});\n\nexport default app;
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\n// SomeComponent.svelte\n<button type=\"button\" on:click=\"{unknownFunction}\">Break the world</button>
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/svelte\n\n# Using npm\nnpm install --save @sentry/svelte
Initialize Sentry as early as possible in your application's lifecycle, usually your Svelte app's entry point (main.ts/js
):
import \"./app.css\";\nimport App from \"./App.svelte\";\n\nimport * as Sentry from \"@sentry/svelte\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});\n\nconst app = new App({\n target: document.getElementById(\"app\"),\n});\n\nexport default app;
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\n// SomeComponent.svelte\n<button type=\"button\" on:click=\"{unknownFunction}\">Break the world</button>
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/svelte\n\n# Using npm\nnpm install --save @sentry/svelte
Initialize Sentry as early as possible in your application's lifecycle, usually your Svelte app's entry point (main.ts/js
):
import \"./app.css\";\nimport App from \"./App.svelte\";\n\nimport * as Sentry from \"@sentry/svelte\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});\n\nconst app = new App({\n target: document.getElementById(\"app\"),\n});\n\nexport default app;
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\n// SomeComponent.svelte\n<button type=\"button\" on:click=\"{unknownFunction}\">Break the world</button>
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/svelte\n\n# Using npm\nnpm install --save @sentry/svelte
Initialize Sentry as early as possible in your application's lifecycle, usually your Svelte app's entry point (main.ts/js
):
import \"./app.css\";\nimport App from \"./App.svelte\";\n\nimport * as Sentry from \"@sentry/svelte\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});\n\nconst app = new App({\n target: document.getElementById(\"app\"),\n});\n\nexport default app;
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\n// SomeComponent.svelte\n<button type=\"button\" on:click=\"{unknownFunction}\">Break the world</button>
Configure your app automatically with the Sentry wizard.
\nnpx @sentry/wizard -i sveltekit
The Sentry wizard will automatically patch your application to configure the Sentry SDK:
\nsrc/hooks.client.js
and src/hooks.server.js
with the default Sentry.init
call and SvelteKit hooks handlers.vite.config.js
to add source maps upload and auto-instrumentation via Vite plugins..sentryclirc
and sentry.properties
files with configuration for sentry-cli (which is used when automatically uploading source maps).Alternatively, you can also set up the SDK manually.
\nConfigure the Sentry SDK:
\nTo configure the Sentry SDK, edit the Sentry.init
options in hooks.client.(js|ts)
:
import * as Sentry from \"@sentry/sveltekit\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n // Session Replay\n integrations: [new Sentry.Replay()],\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\n<!-- +page.svelte -->\n<button type=\"button\" on:click={unknownFunction}>Break the world</button>
Configure your app automatically with the Sentry wizard.
\nnpx @sentry/wizard -i sveltekit
The Sentry wizard will automatically patch your application to configure the Sentry SDK:
\nsrc/hooks.client.js
and src/hooks.server.js
with the default Sentry.init
call and SvelteKit hooks handlers.vite.config.js
to add source maps upload and auto-instrumentation via Vite plugins..sentryclirc
and sentry.properties
files with configuration for sentry-cli (which is used when automatically uploading source maps).Alternatively, you can also set up the SDK manually.
\nConfigure the Sentry SDK:
\nTo configure the Sentry SDK, edit the Sentry.init
options in hooks.client.(js|ts)
:
import * as Sentry from \"@sentry/sveltekit\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n // Session Replay\n integrations: [new Sentry.Replay()],\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\n<!-- +page.svelte -->\n<button type=\"button\" on:click={unknownFunction}>Break the world</button>
Configure your app automatically with the Sentry wizard.
\nnpx @sentry/wizard -i sveltekit
The Sentry wizard will automatically patch your application to configure the Sentry SDK:
\nsrc/hooks.client.js
and src/hooks.server.js
with the default Sentry.init
call and SvelteKit hooks handlers.vite.config.js
to add source maps upload and auto-instrumentation via Vite plugins..sentryclirc
and sentry.properties
files with configuration for sentry-cli (which is used when automatically uploading source maps).Alternatively, you can also set up the SDK manually.
\nConfigure the Sentry SDK:
\nTo configure the Sentry SDK, edit the Sentry.init
options in hooks.(client|server).(js|ts)
:
import * as Sentry from \"@sentry/sveltekit\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\n<!-- +page.svelte -->\n<button type=\"button\" on:click={unknownFunction}>Break the world</button>
Configure your app automatically with the Sentry wizard.
\nnpx @sentry/wizard -i sveltekit
The Sentry wizard will automatically patch your application to configure the Sentry SDK:
\nsrc/hooks.client.js
and src/hooks.server.js
with the default Sentry.init
call and SvelteKit hooks handlers.vite.config.js
to add source maps upload and auto-instrumentation via Vite plugins..sentryclirc
and sentry.properties
files with configuration for sentry-cli (which is used when automatically uploading source maps).Alternatively, you can also set up the SDK manually.
\nConfigure the Sentry SDK:
\nTo configure the Sentry SDK, edit the Sentry.init
options in hooks.(client|server).(js|ts)
:
import * as Sentry from \"@sentry/sveltekit\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\n<!-- +page.svelte -->\n<button type=\"button\" on:click={unknownFunction}>Break the world</button>
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/vue\n\n# Using npm\nnpm install --save @sentry/vue
Initialize Sentry as early as possible in your application's lifecycle.
\nimport Vue from \"vue\";\nimport Router from \"vue-router\";\nimport * as Sentry from \"@sentry/vue\";\n\nVue.use(Router);\n\nconst router = new Router({\n // ...\n});\n\nSentry.init({\n Vue,\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});\n\n// ...\n\nnew Vue({\n router,\n render: (h) => h(App),\n}).$mount(\"#app\");
import { createApp } from \"vue\";\nimport { createRouter } from \"vue-router\";\nimport * as Sentry from \"@sentry/vue\";\n\nconst app = createApp({\n // ...\n});\nconst router = createRouter({\n // ...\n});\n\nSentry.init({\n app,\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});\n\napp.use(router);\napp.mount(\"#app\");
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/vue\n\n# Using npm\nnpm install --save @sentry/vue
Initialize Sentry as early as possible in your application's lifecycle.
\nimport Vue from \"vue\";\nimport Router from \"vue-router\";\nimport * as Sentry from \"@sentry/vue\";\n\nVue.use(Router);\n\nconst router = new Router({\n // ...\n});\n\nSentry.init({\n Vue,\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});\n\n// ...\n\nnew Vue({\n router,\n render: (h) => h(App),\n}).$mount(\"#app\");
import { createApp } from \"vue\";\nimport { createRouter } from \"vue-router\";\nimport * as Sentry from \"@sentry/vue\";\n\nconst app = createApp({\n // ...\n});\nconst router = createRouter({\n // ...\n});\n\nSentry.init({\n app,\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});\n\napp.use(router);\napp.mount(\"#app\");
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/vue\n\n# Using npm\nnpm install --save @sentry/vue
Initialize Sentry as early as possible in your application's lifecycle.
\nimport Vue from \"vue\";\nimport Router from \"vue-router\";\nimport * as Sentry from \"@sentry/vue\";\n\nVue.use(Router);\n\nconst router = new Router({\n // ...\n});\n\nSentry.init({\n Vue,\n dsn: \"___PUBLIC_DSN___\",\n});\n\n// ...\n\nnew Vue({\n router,\n render: (h) => h(App),\n}).$mount(\"#app\");
import { createApp } from \"vue\";\nimport { createRouter } from \"vue-router\";\nimport * as Sentry from \"@sentry/vue\";\n\nconst app = createApp({\n // ...\n});\nconst router = createRouter({\n // ...\n});\n\nSentry.init({\n app,\n dsn: \"___PUBLIC_DSN___\",\n});\n\napp.use(router);\napp.mount(\"#app\");
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/vue\n\n# Using npm\nnpm install --save @sentry/vue
Initialize Sentry as early as possible in your application's lifecycle.
\nimport Vue from \"vue\";\nimport Router from \"vue-router\";\nimport * as Sentry from \"@sentry/vue\";\n\nVue.use(Router);\n\nconst router = new Router({\n // ...\n});\n\nSentry.init({\n Vue,\n dsn: \"___PUBLIC_DSN___\",\n});\n\n// ...\n\nnew Vue({\n router,\n render: (h) => h(App),\n}).$mount(\"#app\");
import { createApp } from \"vue\";\nimport { createRouter } from \"vue-router\";\nimport * as Sentry from \"@sentry/vue\";\n\nconst app = createApp({\n // ...\n});\nconst router = createRouter({\n // ...\n});\n\nSentry.init({\n app,\n dsn: \"___PUBLIC_DSN___\",\n});\n\napp.use(router);\napp.mount(\"#app\");
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/browser\n# Using npm\nnpm install --save @sentry/browser
Initialize Sentry as early as possible in your application's lifecycle.
\nimport * as Sentry from \"@sentry/browser\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/browser\n# Using npm\nnpm install --save @sentry/browser
Initialize Sentry as early as possible in your application's lifecycle.
\nimport * as Sentry from \"@sentry/browser\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n integrations: [new Sentry.Replay()],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/browser\n# Using npm\nnpm install --save @sentry/browser
Initialize Sentry as early as possible in your application's lifecycle.
\nimport * as Sentry from \"@sentry/browser\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
Sentry captures data by using an SDK within your application’s runtime.
\n# Using yarn\nyarn add @sentry/browser\n# Using npm\nnpm install --save @sentry/browser
Initialize Sentry as early as possible in your application's lifecycle.
\nimport * as Sentry from \"@sentry/browser\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n});
This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected.
\nmyUndefinedFunction();
If you're interested in Android, head over to the Getting Started for that SDK instead. At its core, Sentry for Java provides a raw client for sending events to Sentry. If you use Spring Boot, Spring, Logback, JUL, or Log4j2, head over to our Getting Started for Sentry Java.\n
\nInstall the SDK via Gradle or Maven:
\nFor Gradle, add to your build.gradle
file:
// Make sure mavenCentral is there.\nrepositories {\n mavenCentral()\n}\n\ndependencies {\n implementation 'io.sentry:sentry:7.3.0'\n}
For Maven, add to your pom.xml
file:
<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry</artifactId>\n <version>7.3.0</version>\n</dependency>
Configure Sentry as soon as possible in your application's lifecycle:
\nimport io.sentry.Sentry\n\nSentry.init { options ->\n options.dsn = \"___PUBLIC_DSN___\"\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0\n // When first trying Sentry it's good to see what the SDK is doing:\n options.isDebug = true\n}
Trigger your first event from your development environment by intentionally creating an error with the Sentry#captureException
method, to test that everything is working:
import java.lang.Exception\nimport io.sentry.Sentry\n\ntry {\n throw Exception(\"This is a test.\")\n} catch (e: Exception) {\n Sentry.captureException(e)\n}
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nYou can capture transactions using the SDK. For example:
\nimport io.sentry.Sentry\nimport io.sentry.SpanStatus\n\n// A good name for the transaction is key, to help identify what this is about\nval transaction = Sentry.startTransaction(\"processOrderBatch()\", \"task\")\ntry {\n processOrderBatch()\n} catch (e: Exception) {\n transaction.throwable = e\n transaction.status = SpanStatus.INTERNAL_ERROR\n throw e\n} finally {\n transaction.finish();\n}
For more information about the API and automatic instrumentations included in the SDK, visit the docs.
If you're interested in Android, head over to the Getting Started for that SDK instead. At its core, Sentry for Java provides a raw client for sending events to Sentry. If you use Spring Boot, Spring, Logback, JUL, or Log4j2, head over to our Getting Started for Sentry Java.\n
\nInstall the SDK via Gradle or Maven:
\nFor Gradle, add to your build.gradle
file:
// Make sure mavenCentral is there.\nrepositories {\n mavenCentral()\n}\n\ndependencies {\n implementation 'io.sentry:sentry:7.3.0'\n}
For Maven, add to your pom.xml
file:
<dependency>\n <groupId>io.sentry</groupId>\n <artifactId>sentry</artifactId>\n <version>7.3.0</version>\n</dependency>
Configure Sentry as soon as possible in your application's lifecycle:
\nimport io.sentry.Sentry\n\nSentry.init { options ->\n options.dsn = \"___PUBLIC_DSN___\"\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0\n // When first trying Sentry it's good to see what the SDK is doing:\n options.isDebug = true\n}
Trigger your first event from your development environment by intentionally creating an error with the Sentry#captureException
method, to test that everything is working:
import java.lang.Exception\nimport io.sentry.Sentry\n\ntry {\n throw Exception(\"This is a test.\")\n} catch (e: Exception) {\n Sentry.captureException(e)\n}
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nYou can capture transactions using the SDK. For example:
\nimport io.sentry.Sentry\nimport io.sentry.SpanStatus\n\n// A good name for the transaction is key, to help identify what this is about\nval transaction = Sentry.startTransaction(\"processOrderBatch()\", \"task\")\ntry {\n processOrderBatch()\n} catch (e: Exception) {\n transaction.throwable = e\n transaction.status = SpanStatus.INTERNAL_ERROR\n throw e\n} finally {\n transaction.finish();\n}
For more information about the API and automatic instrumentations included in the SDK, visit the docs.
To manually instrument a specific region of your code, you can create a transaction to capture it.
\nThe following example creates a transaction for a part of the code that contains an expensive operation (for example, processItem
), and sends the result to Sentry:
app.use(function processItems(req, res, next) {\n const item = getFromQueue();\n const transaction = Sentry.startTransaction({\n op: \"task\",\n name: item.getTransaction(),\n });\n\n // processItem may create more spans internally (see next examples)\n processItem(item, transaction).then(() => {\n transaction.finish();\n next();\n });\n});
To manually instrument a specific region of your code, you can create a transaction to capture it.
\nThe following example creates a transaction for a part of the code that contains an expensive operation (for example, processItem
), and sends the result to Sentry:
app.use(function processItems(req, res, next) {\n const item = getFromQueue();\n const transaction = Sentry.startTransaction({\n op: \"task\",\n name: item.getTransaction(),\n });\n\n // processItem may create more spans internally (see next examples)\n processItem(item, transaction).then(() => {\n transaction.finish();\n next();\n });\n});
Sentry’s performance monitoring product has to be enabled in order for Profiling to work.\nAdd the traces_sample_rate
option to the config/sentry.php
config file.
'traces_sample_rate' => 1.0,
Check out the performance setup docs for more detailed information.
"} \ No newline at end of file +{"key":"php.laravel-profiling-onboarding-2-configure-performance","type":"language","doc_link":"https://docs.sentry.io/platforms/php/guides/laravel/profiling/","name":"PHP","aliases":[],"categories":[],"body":"Sentry’s performance monitoring product has to be enabled in order for Profiling to work.\nAdd the traces_sample_rate
option to the config/sentry.php
config file.
'traces_sample_rate' => 1.0,
Check out the performance setup docs for more detailed information.
"} diff --git a/public/_platforms/php/profiling-onboarding-2-configure-performance.json b/public/_platforms/php/profiling-onboarding-2-configure-performance.json index 8f90a553fbbae..3cf53e70ba564 100644 --- a/public/_platforms/php/profiling-onboarding-2-configure-performance.json +++ b/public/_platforms/php/profiling-onboarding-2-configure-performance.json @@ -1 +1 @@ -{"key":"php.profiling-onboarding-2-configure-performance","type":"language","doc_link":"https://docs.sentry.io/platforms/php/profiling/","name":"PHP","aliases":[],"categories":[],"body":"Sentry’s performance monitoring product has to be enabled in order for Profiling to work.
\n\\Sentry\\init([\n 'dsn' => '___PUBLIC_DSN___',\n 'traces_sample_rate' => 1.0,\n]);
In order to capture profiling data, you need to start a transaction.
\nCheck out the performance setup and instrumentation docs for more detailed information.
"} \ No newline at end of file +{"key":"php.profiling-onboarding-2-configure-performance","type":"language","doc_link":"https://docs.sentry.io/platforms/php/profiling/","name":"PHP","aliases":[],"categories":[],"body":"Sentry’s performance monitoring product has to be enabled in order for Profiling to work.
\n\\Sentry\\init([\n 'dsn' => '___PUBLIC_DSN___',\n 'traces_sample_rate' => 1.0,\n]);
In order to capture profiling data, you need to start a transaction.
\nCheck out the performance setup and instrumentation docs for more detailed information.
"} diff --git a/public/_platforms/php/symfony.json b/public/_platforms/php/symfony.json index 8bfde9c573b0c..c4de886e448c7 100644 --- a/public/_platforms/php/symfony.json +++ b/public/_platforms/php/symfony.json @@ -1 +1 @@ -{"key":"php.symfony","type":"framework","doc_link":"https://docs.sentry.io/platforms/php/guides/symfony/","name":"Symfony","aliases":[],"categories":[],"body":"Symfony is supported via the sentry-symfony
package as a native bundle.
Install the sentry/sentry-symfony
bundle:
composer require sentry/sentry-symfony
Due to a bug in all versions below 6.0
of the SensioFrameworkExtraBundle
bundle, you will likely receive an error during the execution of the command above related to the missing Nyholm\\Psr7\\Factory\\Psr17Factory
class. To workaround the issue, if you are not using the PSR-7 bridge, please change the configuration of that bundle as follows:
sensio_framework_extra:\n psr_message:\n enabled: false
For more details about the issue see https://github.com/sensiolabs/SensioFrameworkExtraBundle/pull/710.
\nAdd your
config/packages/sentry.yaml
:\n\nsentry:\n dsn: \"%env(SENTRY_DSN)%\"
And in your .env
file:
###> sentry/sentry-symfony ###\nSENTRY_DSN=\"___PUBLIC_DSN___\"\n###< sentry/sentry-symfony ###
Performance monitoring integrations to support
These integrations hook into critical paths of the framework and of the vendors. As a result, there may be a performance penalty. To disable tracing, please see the Integrations documentation.
\nIf you are not using Symfony Flex, you'll also need to enable the bundle in config/bundles.php
:
<?php\n\nreturn [\n // ...\n Sentry\\SentryBundle\\SentryBundle::class => ['all' => true],\n];
If you are using Monolog to report events instead of the typical error listener approach, you need this additional configuration to log the errors correctly:
\n\nsentry:\n register_error_listener: false # Disables the ErrorListener to avoid duplicated log in sentry\n register_error_handler: false # Disables the ErrorListener, ExceptionListener and FatalErrorListener integrations of the base PHP SDK\n\nmonolog:\n handlers:\n sentry:\n type: sentry\n level: !php/const Monolog\\Logger::ERROR\n hub_id: Sentry\\State\\HubInterface
If you are using a version of MonologBundle prior to 3.7
, you need to\nconfigure the handler as a service instead:
monolog:\n handlers:\n sentry:\n type: service\n id: Sentry\\Monolog\\Handler\n\nservices:\n Sentry\\Monolog\\Handler:\n arguments:\n $hub: '@Sentry\\State\\HubInterface'\n $level: !php/const Monolog\\Logger::ERROR
Additionally, you can register the PsrLogMessageProcessor
to resolve PSR-3 placeholders in reported messages:
services:\n Monolog\\Processor\\PsrLogMessageProcessor:\n tags: { name: monolog.processor, handler: sentry }
To test that both logger error and exception are correctly sent to sentry.io, you can create the following controller:
\n<?php\n\nnamespace App\\Controller;\n\nuse Psr\\Log\\LoggerInterface;\nuse Symfony\\Bundle\\FrameworkBundle\\Controller\\AbstractController;\nuse Symfony\\Component\\Routing\\Annotation\\Route;\n\nclass SentryTestController extends AbstractController\n{\n /**\n * @var LoggerInterface\n */\n private $logger;\n\n public function __construct(LoggerInterface $logger)\n {\n $this->logger = $logger;\n }\n\n /**\n * @Route(name=\"sentry_test\", path=\"/_sentry-test\")\n */\n public function testLog()\n {\n // the following code will test if monolog integration logs to sentry\n $this->logger->error('My custom logged error.');\n\n // the following code will test if an uncaught exception logs to sentry\n throw new \\RuntimeException('Example exception.');\n }\n}
After you visit the /_sentry-test
page, you can view and resolve the recorded error by logging into sentry.io and opening your
Symfony is supported via the sentry-symfony
package as a native bundle.
Install the sentry/sentry-symfony
bundle:
composer require sentry/sentry-symfony
Due to a bug in all versions below 6.0
of the SensioFrameworkExtraBundle
bundle, you will likely receive an error during the execution of the command above related to the missing Nyholm\\Psr7\\Factory\\Psr17Factory
class. To workaround the issue, if you are not using the PSR-7 bridge, please change the configuration of that bundle as follows:
sensio_framework_extra:\n psr_message:\n enabled: false
For more details about the issue see https://github.com/sensiolabs/SensioFrameworkExtraBundle/pull/710.
\nAdd your
config/packages/sentry.yaml
:\n\nsentry:\n dsn: \"%env(SENTRY_DSN)%\"
And in your .env
file:
###> sentry/sentry-symfony ###\nSENTRY_DSN=\"___PUBLIC_DSN___\"\n###< sentry/sentry-symfony ###
Performance monitoring integrations to support
These integrations hook into critical paths of the framework and of the vendors. As a result, there may be a performance penalty. To disable tracing, please see the Integrations documentation.
\nIf you are not using Symfony Flex, you'll also need to enable the bundle in config/bundles.php
:
<?php\n\nreturn [\n // ...\n Sentry\\SentryBundle\\SentryBundle::class => ['all' => true],\n];
If you are using Monolog to report events instead of the typical error listener approach, you need this additional configuration to log the errors correctly:
\n\nsentry:\n register_error_listener: false # Disables the ErrorListener to avoid duplicated log in sentry\n register_error_handler: false # Disables the ErrorListener, ExceptionListener and FatalErrorListener integrations of the base PHP SDK\n\nmonolog:\n handlers:\n sentry:\n type: sentry\n level: !php/const Monolog\\Logger::ERROR\n hub_id: Sentry\\State\\HubInterface
If you are using a version of MonologBundle prior to 3.7
, you need to\nconfigure the handler as a service instead:
monolog:\n handlers:\n sentry:\n type: service\n id: Sentry\\Monolog\\Handler\n\nservices:\n Sentry\\Monolog\\Handler:\n arguments:\n $hub: '@Sentry\\State\\HubInterface'\n $level: !php/const Monolog\\Logger::ERROR
Additionally, you can register the PsrLogMessageProcessor
to resolve PSR-3 placeholders in reported messages:
services:\n Monolog\\Processor\\PsrLogMessageProcessor:\n tags: { name: monolog.processor, handler: sentry }
To test that both logger error and exception are correctly sent to sentry.io, you can create the following controller:
\n<?php\n\nnamespace App\\Controller;\n\nuse Psr\\Log\\LoggerInterface;\nuse Symfony\\Bundle\\FrameworkBundle\\Controller\\AbstractController;\nuse Symfony\\Component\\Routing\\Annotation\\Route;\n\nclass SentryTestController extends AbstractController\n{\n /**\n * @var LoggerInterface\n */\n private $logger;\n\n public function __construct(LoggerInterface $logger)\n {\n $this->logger = $logger;\n }\n\n /**\n * @Route(name=\"sentry_test\", path=\"/_sentry-test\")\n */\n public function testLog()\n {\n // the following code will test if monolog integration logs to sentry\n $this->logger->error('My custom logged error.');\n\n // the following code will test if an uncaught exception logs to sentry\n throw new \\RuntimeException('Example exception.');\n }\n}
After you visit the /_sentry-test
page, you can view and resolve the recorded error by logging into sentry.io and opening your
Sentry’s performance monitoring product has to be enabled in order for Profiling to work.\nAdd the traces_sample_rate
option to the config/packages/sentry.yaml
config file.
sentry:\n options:\n traces_sample_rate: 1.0
Check out the performance setup docs for more detailed information.
"} \ No newline at end of file +{"key":"php.symfony2-profiling-onboarding-2-configure-performance","type":"language","doc_link":"https://docs.sentry.io/platforms/php/guides/symfony/profiling/","name":"PHP","aliases":[],"categories":[],"body":"Sentry’s performance monitoring product has to be enabled in order for Profiling to work.\nAdd the traces_sample_rate
option to the config/packages/sentry.yaml
config file.
sentry:\n options:\n traces_sample_rate: 1.0
Check out the performance setup docs for more detailed information.
"} diff --git a/public/_platforms/python/tracing.json b/public/_platforms/python/tracing.json index e25e2fcf604a8..6c9b1cc6f232a 100644 --- a/public/_platforms/python/tracing.json +++ b/public/_platforms/python/tracing.json @@ -1 +1 @@ -{"key":"python.tracing","type":"language","doc_link":"https://docs.sentry.io/platforms/python/performance/","name":"Python","aliases":[],"categories":[],"body":"The Sentry SDK for Python does a very good job of auto instrumenting your application. Here a short introduction on how to do custom performance instrumentation. If you'd like to learn more, read our custom instrumentation documentation.
\nAdding a Transaction
\nAdding transactions will allow you to instrument and capture certain regions of your code.
\nIf you're using one of Sentry's SDK integrations, transactions will be created for you automatically.
\nThe following example creates a transaction for an expensive operation (in this case,eat_pizza
), and then sends the result to Sentry:
import sentry_sdk\n\ndef eat_slice(slice):\n ...\n\ndef eat_pizza(pizza):\n with sentry_sdk.start_transaction(op=\"task\", name=\"Eat Pizza\"):\n while pizza.slices > 0:\n eat_slice(pizza.slices.pop())
Adding More Spans to the Transaction
\nIf you want to have more fine-grained performance monitoring, you can add child spans to your transaction, which can be done by either:
\nasync
functions)Calling a sentry_sdk.start_span()
will find the current active transaction and attach the span to it.
import sentry_sdk\n\ndef eat_slice(slice):\n ...\n\ndef eat_pizza(pizza):\n with sentry_sdk.start_transaction(op=\"task\", name=\"Eat Pizza\"):\n while pizza.slices > 0:\n with sentry_sdk.start_span(description=\"Eat Slice\"):\n eat_slice(pizza.slices.pop())\n
import sentry_sdk\n\n@sentry_sdk.trace\ndef eat_slice(slice):\n ...\n\ndef eat_pizza(pizza):\n with sentry_sdk.start_transaction(op=\"task\", name=\"Eat Pizza\"):\n while pizza.slices > 0:\n eat_slice(pizza.slices.pop())\n
The Sentry SDK for Python does a very good job of auto instrumenting your application. Here a short introduction on how to do custom performance instrumentation. If you'd like to learn more, read our custom instrumentation documentation.
\nAdding a Transaction
\nAdding transactions will allow you to instrument and capture certain regions of your code.
\nIf you're using one of Sentry's SDK integrations, transactions will be created for you automatically.
\nThe following example creates a transaction for an expensive operation (in this case,eat_pizza
), and then sends the result to Sentry:
import sentry_sdk\n\ndef eat_slice(slice):\n ...\n\ndef eat_pizza(pizza):\n with sentry_sdk.start_transaction(op=\"task\", name=\"Eat Pizza\"):\n while pizza.slices > 0:\n eat_slice(pizza.slices.pop())
Adding More Spans to the Transaction
\nIf you want to have more fine-grained performance monitoring, you can add child spans to your transaction, which can be done by either:
\nasync
functions)Calling a sentry_sdk.start_span()
will find the current active transaction and attach the span to it.
import sentry_sdk\n\ndef eat_slice(slice):\n ...\n\ndef eat_pizza(pizza):\n with sentry_sdk.start_transaction(op=\"task\", name=\"Eat Pizza\"):\n while pizza.slices > 0:\n with sentry_sdk.start_span(description=\"Eat Slice\"):\n eat_slice(pizza.slices.pop())\n
import sentry_sdk\n\n@sentry_sdk.trace\ndef eat_slice(slice):\n ...\n\ndef eat_pizza(pizza):\n with sentry_sdk.start_transaction(op=\"task\", name=\"Eat Pizza\"):\n while pizza.slices > 0:\n eat_slice(pizza.slices.pop())\n
Sentry captures data by using an SDK within your application’s runtime.
\n\n\nIf you are using Expo, see How to Add Sentry to Your Expo Project. This SDK works for both managed and bare projects.
\n
Run @sentry/wizard
:
npx @sentry/wizard -s -i reactNative
Sentry Wizard will patch your
./gradlew assembleRelease
, source maps are automatically built and uploaded to Sentry. If you have enabled Gradle's org.gradle.configureondemand
feature, you'll need a clean build, or you'll need to disable this feature to upload the source map on every build by setting org.gradle.configureondemand=false
or remove it.import * as Sentry from \"@sentry/react-native\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n tracesSampleRate: 1.0,\n});
The sentry-wizard
will try to add it to your App.tsx
Wrap your app with Sentry to automatically instrument it with touch event tracking and automatic performance monitoring:
\nexport default Sentry.wrap(App);
You do not need to do this for Sentry to work or if your app does not have a single parent \"App\" component.
\nThen create an intentional error, so you can test that everything is working:
\nthrow new Error(\"My first Sentry error!\");
Or, try a native crash with:
\nSentry.nativeCrash();
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nSentry can measure the performance of your app automatically when instrumented with the following routers:
\n\nAdditionally, you can create transactions and spans programatically:
\nFor example:
\n// Let's say this function is invoked when a user clicks on the checkout button of your shop\nshopCheckout() {\n // This will create a new Transaction for you\n const transaction = Sentry.startTransaction({ name: \"shopCheckout\" });\n // Set transaction on scope to associate with errors and get included span instrumentation\n // If there's currently an unfinished transaction, it may be dropped\n Sentry.getCurrentHub().configureScope(scope => scope.setSpan(transaction));\n\n // Assume this function makes an xhr/fetch call\n const result = validateShoppingCartOnServer();\n\n const span = transaction.startChild({\n data: {\n result\n },\n op: 'task',\n description: `processing shopping cart result`,\n });\n try {\n processAndValidateShoppingCart(result);\n span.setStatus('ok');\n } catch (err) {\n span.setStatus('unknown_error');\n throw err;\n } finally {\n span.finish();\n transaction.finish();\n }\n}
For more information, please refer to the Sentry React Native documentation.
\nWe offer a range of methods to provide Sentry with debug symbols so that you can see symbolicated stack traces and triage issues faster.
\nComplete stack traces will be shown for React Native Javascript errors by default using Sentry's automatic source maps upload. To set up manual source maps upload follow this guide.
\nYou'll also need to upload Debug Symbols generated by the native iOS and Android tooling for native crashes.
\nIf Sentry has access to your application's source code, it can show snippets of code (source context) around the location of stack frames, which helps to quickly pinpoint problematic code.
\nSource Context will be shown for React Native Javascript error by default if source maps are uploaded. To set up source maps upload, follow the Source Maps guide.
\nTo enable source context for native errors, you'll need to upload native debug symbols to Sentry by following the instructions at Uploading Source Code Context With Sentry Gradle Plugin and Uploading Source Context With Xcode.
"} \ No newline at end of file +{"key":"react-native","type":"language","doc_link":"https://docs.sentry.io/platforms/react-native/","name":"React Native","aliases":[],"categories":["mobile"],"body":"Sentry captures data by using an SDK within your application’s runtime.
\n\n\nIf you are using Expo, see How to Add Sentry to Your Expo Project. This SDK works for both managed and bare projects.
\n
Run @sentry/wizard
:
npx @sentry/wizard -s -i reactNative
Sentry Wizard will patch your
./gradlew assembleRelease
, source maps are automatically built and uploaded to Sentry. If you have enabled Gradle's org.gradle.configureondemand
feature, you'll need a clean build, or you'll need to disable this feature to upload the source map on every build by setting org.gradle.configureondemand=false
or remove it.import * as Sentry from \"@sentry/react-native\";\n\nSentry.init({\n dsn: \"___PUBLIC_DSN___\",\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n tracesSampleRate: 1.0,\n});
The sentry-wizard
will try to add it to your App.tsx
Wrap your app with Sentry to automatically instrument it with touch event tracking and automatic performance monitoring:
\nexport default Sentry.wrap(App);
You do not need to do this for Sentry to work or if your app does not have a single parent \"App\" component.
\nThen create an intentional error, so you can test that everything is working:
\nthrow new Error(\"My first Sentry error!\");
Or, try a native crash with:
\nSentry.nativeCrash();
If you're new to Sentry, use the email alert to access your account and complete a product tour.
\nIf you're an existing user and have disabled alerts, you won't receive this email.
\nSentry can measure the performance of your app automatically when instrumented with the following routers:
\n\nAdditionally, you can create transactions and spans programatically:
\nFor example:
\n// Let's say this function is invoked when a user clicks on the checkout button of your shop\nshopCheckout() {\n // This will create a new Transaction for you\n const transaction = Sentry.startTransaction({ name: \"shopCheckout\" });\n // Set transaction on scope to associate with errors and get included span instrumentation\n // If there's currently an unfinished transaction, it may be dropped\n Sentry.getCurrentHub().configureScope(scope => scope.setSpan(transaction));\n\n // Assume this function makes an xhr/fetch call\n const result = validateShoppingCartOnServer();\n\n const span = transaction.startChild({\n data: {\n result\n },\n op: 'task',\n description: `processing shopping cart result`,\n });\n try {\n processAndValidateShoppingCart(result);\n span.setStatus('ok');\n } catch (err) {\n span.setStatus('unknown_error');\n throw err;\n } finally {\n span.finish();\n transaction.finish();\n }\n}
For more information, please refer to the Sentry React Native documentation.
\nWe offer a range of methods to provide Sentry with debug symbols so that you can see symbolicated stack traces and triage issues faster.
\nComplete stack traces will be shown for React Native Javascript errors by default using Sentry's automatic source maps upload. To set up manual source maps upload follow this guide.
\nYou'll also need to upload Debug Symbols generated by the native iOS and Android tooling for native crashes.
\nIf Sentry has access to your application's source code, it can show snippets of code (source context) around the location of stack frames, which helps to quickly pinpoint problematic code.
\nSource Context will be shown for React Native Javascript error by default if source maps are uploaded. To set up source maps upload, follow the Source Maps guide.
\nTo enable source context for native errors, you'll need to upload native debug symbols to Sentry by following the instructions at Uploading Source Code Context With Sentry Gradle Plugin and Uploading Source Context With Xcode.
"} diff --git a/public/_platforms/react-native/tracing.json b/public/_platforms/react-native/tracing.json index 3bb93f0101726..691441b6ba3f5 100644 --- a/public/_platforms/react-native/tracing.json +++ b/public/_platforms/react-native/tracing.json @@ -1 +1 @@ -{"key":"react-native.tracing","type":"language","doc_link":"https://docs.sentry.io/platforms/react-native/performance/instrumentation/custom-instrumentation/","name":"React-Native","aliases":[],"categories":[],"body":"To manually instrument certain regions of your code, you can create a transaction to capture them.
\nconst transaction = Sentry.startTransaction({ name: \"test-transaction\" });\nconst span = transaction.startChild({ op: \"functionX\" }); // This function returns a Span\n// functionCallX\nspan.finish(); // Remember that only finished spans will be sent with the transaction\ntransaction.finish(); // Finishing the transaction will send it to Sentry
To manually instrument certain regions of your code, you can create a transaction to capture them.
\nconst transaction = Sentry.startTransaction({ name: \"test-transaction\" });\nconst span = transaction.startChild({ op: \"functionX\" }); // This function returns a Span\n// functionCallX\nspan.finish(); // Remember that only finished spans will be sent with the transaction\ntransaction.finish(); // Finishing the transaction will send it to Sentry