@danieljvdm/dev-kit 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/README.md +6 -6
  2. package/package.json +1 -1
  3. package/skill-sources.jsonc +2 -33
  4. package/skill-sources.lock.json +15 -117
  5. package/skills/animate/LICENSE +21 -0
  6. package/skills/animate/NOTICE +10 -0
  7. package/skills/animate/SKILL.md +34 -0
  8. package/skills/animate/references/gestures.md +27 -0
  9. package/skills/animate/references/glossary.md +136 -0
  10. package/skills/animate/references/implementation.md +22 -0
  11. package/skills/animate/references/opportunities.md +18 -0
  12. package/skills/animate/references/principles.md +48 -0
  13. package/skills/animate/references/review.md +19 -0
  14. package/skills/cloudflare-workers/LICENSE +202 -0
  15. package/skills/cloudflare-workers/NOTICE +9 -0
  16. package/skills/cloudflare-workers/SKILL.md +26 -0
  17. package/skills/cloudflare-workers/references/durable-objects.md +68 -0
  18. package/skills/cloudflare-workers/references/sandbox.md +48 -0
  19. package/skills/cloudflare-workers/references/workers.md +63 -0
  20. package/skills/cloudflare-workers/references/wrangler.md +56 -0
  21. package/skills/design-ui/LICENSE +21 -0
  22. package/skills/design-ui/NOTICE +8 -0
  23. package/skills/design-ui/SKILL.md +29 -0
  24. package/skills/design-ui/references/appearance.md +22 -0
  25. package/skills/design-ui/references/components.md +33 -0
  26. package/skills/design-ui/references/exploration.md +50 -0
  27. package/skills/design-ui/references/libraries.md +39 -0
  28. package/skills/design-ui/references/themes.md +23 -0
  29. package/skills/dev-kit/SKILL.md +19 -38
  30. package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
  31. package/skills/dev-kit/references/skills.md +2 -2
  32. package/skills/effect-development/SKILL.md +27 -0
  33. package/skills/effect-development/agents/openai.yaml +4 -0
  34. package/skills/effect-development/references/api/index.md +32 -0
  35. package/skills/effect-development/references/api/schema-codecs.md +15 -0
  36. package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
  37. package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
  38. package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
  39. package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
  40. package/skills/effect-development/references/atom/index.md +40 -0
  41. package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
  42. package/skills/effect-development/references/cli/index.md +39 -0
  43. package/skills/effect-development/references/setup.md +15 -0
  44. package/skills/open-pull-request/SKILL.md +10 -70
  45. package/skills/open-pull-request/references/evidence.md +22 -0
  46. package/skills/open-pull-request/references/explanation.md +21 -0
  47. package/skills/open-pull-request/references/publication.md +21 -0
  48. package/skills/sentry/LICENSE +202 -0
  49. package/skills/sentry/LICENSE-UPSTREAM +21 -0
  50. package/skills/sentry/NOTICE +14 -0
  51. package/skills/sentry/SKILL.md +33 -0
  52. package/skills/sentry/references/alert-payloads.md +105 -0
  53. package/skills/sentry/references/alerts.md +17 -0
  54. package/skills/sentry/references/artifacts.md +25 -0
  55. package/skills/sentry/references/auth-token.md +65 -0
  56. package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
  57. package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
  58. package/skills/sentry/references/concepts/crons.md +50 -0
  59. package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
  60. package/skills/sentry/references/concepts/errors.md +40 -0
  61. package/skills/sentry/references/concepts/logging.md +85 -0
  62. package/skills/sentry/references/concepts/metrics.md +49 -0
  63. package/skills/sentry/references/concepts/monitors.md +78 -0
  64. package/skills/sentry/references/concepts/profiling.md +38 -0
  65. package/skills/sentry/references/concepts/reduce-volume.md +49 -0
  66. package/skills/sentry/references/concepts/releases.md +43 -0
  67. package/skills/sentry/references/concepts/session-replay.md +35 -0
  68. package/skills/sentry/references/concepts/tracing.md +54 -0
  69. package/skills/sentry/references/concepts/user-feedback.md +36 -0
  70. package/skills/sentry/references/debug-artifacts/android.md +68 -0
  71. package/skills/sentry/references/debug-artifacts/apple.md +96 -0
  72. package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
  73. package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
  74. package/skills/sentry/references/debug-artifacts/index.md +75 -0
  75. package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
  76. package/skills/sentry/references/debug-artifacts/matching.md +73 -0
  77. package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
  78. package/skills/sentry/references/first-error-setup.md +25 -0
  79. package/skills/sentry/references/instrumentation.md +30 -0
  80. package/skills/sentry/references/issues.md +32 -0
  81. package/skills/sentry/references/new-project.md +17 -0
  82. package/skills/sentry/references/otel-exporter.md +30 -0
  83. package/skills/sentry/references/release-workflow.md +31 -0
  84. package/skills/sentry/references/releases/ci-pipeline.md +214 -0
  85. package/skills/sentry/references/releases/index.md +93 -0
  86. package/skills/sentry/references/releases/suspect-commits.md +155 -0
  87. package/skills/sentry/references/releases/tagging.md +131 -0
  88. package/skills/sentry/references/releases/troubleshooting.md +67 -0
  89. package/skills/sentry/references/sdks/android/crons.md +305 -0
  90. package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
  91. package/skills/sentry/references/sdks/android/index.md +748 -0
  92. package/skills/sentry/references/sdks/android/integrations.md +48 -0
  93. package/skills/sentry/references/sdks/android/logging.md +374 -0
  94. package/skills/sentry/references/sdks/android/metrics.md +288 -0
  95. package/skills/sentry/references/sdks/android/profiling.md +397 -0
  96. package/skills/sentry/references/sdks/android/session-replay.md +406 -0
  97. package/skills/sentry/references/sdks/android/tracing.md +861 -0
  98. package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
  99. package/skills/sentry/references/sdks/browser/index.md +714 -0
  100. package/skills/sentry/references/sdks/browser/logging.md +315 -0
  101. package/skills/sentry/references/sdks/browser/profiling.md +236 -0
  102. package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
  103. package/skills/sentry/references/sdks/browser/tracing.md +561 -0
  104. package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
  105. package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
  106. package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
  107. package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
  108. package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
  109. package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
  110. package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
  111. package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
  112. package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
  113. package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
  114. package/skills/sentry/references/sdks/cocoa/index.md +497 -0
  115. package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
  116. package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
  117. package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
  118. package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
  119. package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
  120. package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
  121. package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
  122. package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
  123. package/skills/sentry/references/sdks/dotnet/index.md +614 -0
  124. package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
  125. package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
  126. package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
  127. package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
  128. package/skills/sentry/references/sdks/elixir/crons.md +371 -0
  129. package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
  130. package/skills/sentry/references/sdks/elixir/index.md +383 -0
  131. package/skills/sentry/references/sdks/elixir/logging.md +239 -0
  132. package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
  133. package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
  134. package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
  135. package/skills/sentry/references/sdks/flutter/index.md +728 -0
  136. package/skills/sentry/references/sdks/flutter/logging.md +387 -0
  137. package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
  138. package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
  139. package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
  140. package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
  141. package/skills/sentry/references/sdks/go/crons.md +270 -0
  142. package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
  143. package/skills/sentry/references/sdks/go/index.md +324 -0
  144. package/skills/sentry/references/sdks/go/logging.md +354 -0
  145. package/skills/sentry/references/sdks/go/metrics.md +273 -0
  146. package/skills/sentry/references/sdks/go/profiling.md +46 -0
  147. package/skills/sentry/references/sdks/go/tracing.md +366 -0
  148. package/skills/sentry/references/sdks/index.md +41 -0
  149. package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
  150. package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
  151. package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
  152. package/skills/sentry/references/sdks/nestjs/index.md +699 -0
  153. package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
  154. package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
  155. package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
  156. package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
  157. package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
  158. package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
  159. package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
  160. package/skills/sentry/references/sdks/nextjs/index.md +491 -0
  161. package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
  162. package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
  163. package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
  164. package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
  165. package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
  166. package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
  167. package/skills/sentry/references/sdks/node/crons.md +432 -0
  168. package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
  169. package/skills/sentry/references/sdks/node/index.md +942 -0
  170. package/skills/sentry/references/sdks/node/logging.md +380 -0
  171. package/skills/sentry/references/sdks/node/metrics.md +278 -0
  172. package/skills/sentry/references/sdks/node/profiling.md +373 -0
  173. package/skills/sentry/references/sdks/node/tracing.md +878 -0
  174. package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
  175. package/skills/sentry/references/sdks/php/crons.md +265 -0
  176. package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
  177. package/skills/sentry/references/sdks/php/index.md +362 -0
  178. package/skills/sentry/references/sdks/php/laravel.md +542 -0
  179. package/skills/sentry/references/sdks/php/logging.md +242 -0
  180. package/skills/sentry/references/sdks/php/metrics.md +193 -0
  181. package/skills/sentry/references/sdks/php/profiling.md +115 -0
  182. package/skills/sentry/references/sdks/php/symfony.md +552 -0
  183. package/skills/sentry/references/sdks/php/tracing.md +516 -0
  184. package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
  185. package/skills/sentry/references/sdks/python/crons.md +218 -0
  186. package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
  187. package/skills/sentry/references/sdks/python/index.md +361 -0
  188. package/skills/sentry/references/sdks/python/logging.md +234 -0
  189. package/skills/sentry/references/sdks/python/metrics.md +154 -0
  190. package/skills/sentry/references/sdks/python/profiling.md +120 -0
  191. package/skills/sentry/references/sdks/python/tracing.md +364 -0
  192. package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
  193. package/skills/sentry/references/sdks/react/index.md +492 -0
  194. package/skills/sentry/references/sdks/react/logging.md +364 -0
  195. package/skills/sentry/references/sdks/react/profiling.md +322 -0
  196. package/skills/sentry/references/sdks/react/react-features.md +1272 -0
  197. package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
  198. package/skills/sentry/references/sdks/react/tracing.md +1415 -0
  199. package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
  200. package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
  201. package/skills/sentry/references/sdks/react-native/index.md +1030 -0
  202. package/skills/sentry/references/sdks/react-native/logging.md +444 -0
  203. package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
  204. package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
  205. package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
  206. package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
  207. package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
  208. package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
  209. package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
  210. package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
  211. package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
  212. package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
  213. package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
  214. package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
  215. package/skills/sentry/references/sdks/ruby/crons.md +184 -0
  216. package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
  217. package/skills/sentry/references/sdks/ruby/index.md +297 -0
  218. package/skills/sentry/references/sdks/ruby/logging.md +168 -0
  219. package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
  220. package/skills/sentry/references/sdks/ruby/migration.md +321 -0
  221. package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
  222. package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
  223. package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
  224. package/skills/sentry/references/sdks/svelte/index.md +467 -0
  225. package/skills/sentry/references/sdks/svelte/logging.md +344 -0
  226. package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
  227. package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
  228. package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
  229. package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
  230. package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
  231. package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
  232. package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
  233. package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
  234. package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
  235. package/skills/sentry/references/search-query-language.md +226 -0
  236. package/skills/sentry/references/semantics/angular.md +7 -0
  237. package/skills/sentry/references/semantics/app.md +28 -0
  238. package/skills/sentry/references/semantics/art.md +17 -0
  239. package/skills/sentry/references/semantics/aws.md +43 -0
  240. package/skills/sentry/references/semantics/browser.md +34 -0
  241. package/skills/sentry/references/semantics/cache.md +12 -0
  242. package/skills/sentry/references/semantics/client.md +8 -0
  243. package/skills/sentry/references/semantics/cloud.md +12 -0
  244. package/skills/sentry/references/semantics/cloudflare.md +23 -0
  245. package/skills/sentry/references/semantics/code.md +11 -0
  246. package/skills/sentry/references/semantics/culture.md +11 -0
  247. package/skills/sentry/references/semantics/db.md +21 -0
  248. package/skills/sentry/references/semantics/device.md +43 -0
  249. package/skills/sentry/references/semantics/error.md +7 -0
  250. package/skills/sentry/references/semantics/event.md +8 -0
  251. package/skills/sentry/references/semantics/exception.md +10 -0
  252. package/skills/sentry/references/semantics/faas.md +19 -0
  253. package/skills/sentry/references/semantics/file.md +8 -0
  254. package/skills/sentry/references/semantics/flag.md +7 -0
  255. package/skills/sentry/references/semantics/gcp.md +16 -0
  256. package/skills/sentry/references/semantics/gen_ai.md +53 -0
  257. package/skills/sentry/references/semantics/general.md +11 -0
  258. package/skills/sentry/references/semantics/graphql.md +9 -0
  259. package/skills/sentry/references/semantics/grpc.md +19 -0
  260. package/skills/sentry/references/semantics/http.md +34 -0
  261. package/skills/sentry/references/semantics/index.md +63 -0
  262. package/skills/sentry/references/semantics/jsonrpc.md +8 -0
  263. package/skills/sentry/references/semantics/jvm.md +12 -0
  264. package/skills/sentry/references/semantics/koa.md +7 -0
  265. package/skills/sentry/references/semantics/logger.md +7 -0
  266. package/skills/sentry/references/semantics/mcp.md +37 -0
  267. package/skills/sentry/references/semantics/mdc.md +7 -0
  268. package/skills/sentry/references/semantics/messaging.md +23 -0
  269. package/skills/sentry/references/semantics/middleware.md +7 -0
  270. package/skills/sentry/references/semantics/navigation.md +9 -0
  271. package/skills/sentry/references/semantics/nel.md +11 -0
  272. package/skills/sentry/references/semantics/network.md +17 -0
  273. package/skills/sentry/references/semantics/os.md +15 -0
  274. package/skills/sentry/references/semantics/otel.md +10 -0
  275. package/skills/sentry/references/semantics/params.md +7 -0
  276. package/skills/sentry/references/semantics/process.md +14 -0
  277. package/skills/sentry/references/semantics/react.md +7 -0
  278. package/skills/sentry/references/semantics/remix.md +7 -0
  279. package/skills/sentry/references/semantics/resource.md +7 -0
  280. package/skills/sentry/references/semantics/rpc.md +10 -0
  281. package/skills/sentry/references/semantics/score.md +10 -0
  282. package/skills/sentry/references/semantics/sentry.md +69 -0
  283. package/skills/sentry/references/semantics/server.md +8 -0
  284. package/skills/sentry/references/semantics/service.md +8 -0
  285. package/skills/sentry/references/semantics/session.md +7 -0
  286. package/skills/sentry/references/semantics/state.md +7 -0
  287. package/skills/sentry/references/semantics/thread.md +8 -0
  288. package/skills/sentry/references/semantics/timber.md +7 -0
  289. package/skills/sentry/references/semantics/trpc.md +8 -0
  290. package/skills/sentry/references/semantics/ui.md +18 -0
  291. package/skills/sentry/references/semantics/url.md +15 -0
  292. package/skills/sentry/references/semantics/user.md +17 -0
  293. package/skills/sentry/references/semantics/user_agent.md +7 -0
  294. package/skills/sentry/references/semantics/vercel.md +42 -0
  295. package/skills/sentry/references/setup-verification.md +39 -0
  296. package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
  297. package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
  298. package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
  299. package/skills/sentry/references/snapshots/index.md +19 -0
  300. package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
  301. package/skills/sentry/references/snapshots/snapshots.md +123 -0
  302. package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
  303. package/skills/testing/LICENSE +21 -0
  304. package/skills/testing/NOTICE +7 -0
  305. package/skills/testing/SKILL.md +13 -19
  306. package/skills/testing/agents/openai.yaml +1 -2
  307. package/skills/testing/references/selection.md +23 -0
  308. package/skills/testing/references/tdd.md +19 -0
  309. package/skills/testing/references/test-design.md +17 -0
  310. package/src/catalog.ts +1 -7
  311. package/skills/build-effect-apis/SKILL.md +0 -81
  312. package/skills/build-effect-apis/agents/openai.yaml +0 -4
  313. package/skills/build-effect-clis/SKILL.md +0 -92
  314. package/skills/build-effect-clis/agents/openai.yaml +0 -4
  315. package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
  316. package/skills/effect-atom-state/SKILL.md +0 -97
  317. package/skills/effect-atom-state/agents/openai.yaml +0 -4
  318. package/skills/effect-ts/SKILL.md +0 -35
  319. package/skills/effect-ts/agents/openai.yaml +0 -4
  320. /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
  321. /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
  322. /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
  323. /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
  324. /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
  325. /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
  326. /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
  327. /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
  328. /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
  329. /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
@@ -0,0 +1,387 @@
1
+ # Logging — Sentry Flutter SDK
2
+
3
+ > **Minimum SDK:** `sentry_flutter` ≥ **9.5.0** for structured logs (`enableLogs`)\
4
+ > **`sentry_logging` integration:** `sentry_logging` ≥ **9.5.0** + Dart `logging`
5
+ > package ≥ **1.0.0**\
6
+ > **`enableLogs` flag:** off by default — must be explicitly enabled
7
+
8
+ Flutter/Dart has two complementary logging paths:
9
+
10
+ 1. **Sentry structured logs** — `Sentry.logger.*` API (direct) or via `sentry_logging`
11
+ integration (bridges the Dart `logging` package)
12
+ 2. **Breadcrumbs** — Automatic breadcrumbs from `sentry_logging` for navigation and
13
+ debug events
14
+
15
+ ---
16
+
17
+ ## Table of Contents
18
+
19
+ 1. [Enabling Logs](#1-enabling-logs)
20
+ 2. [Direct Logger API](#2-direct-logger-api)
21
+ 3. [sentry_logging Integration (Dart logging package)](#3-sentry_logging-integration-dart-logging-package)
22
+ 4. [Structured Attributes](#4-structured-attributes)
23
+ 5. [Filtering with beforeSendLog](#5-filtering-with-beforesendlog)
24
+ 6. [Log Correlation with Traces](#6-log-correlation-with-traces)
25
+ 7. [Configuration Reference](#7-configuration-reference)
26
+ 8. [Known Limitations](#8-known-limitations)
27
+ 9. [Troubleshooting](#9-troubleshooting)
28
+
29
+ ---
30
+
31
+ ## 1. Enabling Logs
32
+
33
+ `enableLogs` is **off by default** — opt in explicitly:
34
+
35
+ ```dart
36
+ import 'package:sentry_flutter/sentry_flutter.dart';
37
+
38
+ Future<void> main() async {
39
+ await SentryFlutter.init(
40
+ (options) {
41
+ options.dsn = 'YOUR_DSN';
42
+ options.enableLogs = true; // required — logs are disabled unless this is set
43
+ },
44
+ appRunner: () => runApp(MyApp()),
45
+ );
46
+ }
47
+ ```
48
+
49
+ ---
50
+
51
+ ## 2. Direct Logger API
52
+
53
+ Use `Sentry.logger` to emit structured logs at six severity levels:
54
+
55
+ ```dart
56
+ import 'package:sentry/sentry.dart';
57
+
58
+ // Fine-grained debugging — high volume, filter in production
59
+ Sentry.logger.trace('Starting checkout flow', attributes: {'step': SentryAttribute.string('init')});
60
+
61
+ // Development diagnostics
62
+ Sentry.logger.debug('Cache lookup', attributes: {
63
+ 'key': SentryAttribute.string('user:123'),
64
+ 'hit': SentryAttribute.bool(false),
65
+ });
66
+
67
+ // Normal operations and business milestones
68
+ Sentry.logger.info('Order created', attributes: {
69
+ 'orderId': SentryAttribute.string('order_456'),
70
+ 'total': SentryAttribute.double(99.99),
71
+ });
72
+
73
+ // Degraded state, approaching limits
74
+ Sentry.logger.warn('Rate limit approaching', attributes: {
75
+ 'endpoint': SentryAttribute.string('/api/search/'),
76
+ 'current': SentryAttribute.int(95),
77
+ 'max': SentryAttribute.int(100),
78
+ });
79
+
80
+ // Failures requiring attention
81
+ Sentry.logger.error('Payment failed', attributes: {
82
+ 'reason': SentryAttribute.string('card_declined'),
83
+ 'userId': SentryAttribute.string('u_1'),
84
+ });
85
+
86
+ // Critical failures — app or subsystem is down
87
+ Sentry.logger.fatal('Database unavailable', attributes: {'host': SentryAttribute.string('db-primary')});
88
+ ```
89
+
90
+ ### Level selection guide
91
+
92
+ | Level | When to use |
93
+ | ------- | ---------------------------------------------------------------- |
94
+ | `trace` | Step-by-step internals, loop iterations, low-level flow tracking |
95
+ | `debug` | Diagnostic info useful during development |
96
+ | `info` | Business events, user actions, meaningful state transitions |
97
+ | `warn` | Recoverable errors, degraded performance, approaching limits |
98
+ | `error` | Failures that need investigation but don’t crash the app |
99
+ | `fatal` | Unrecoverable failures — app or critical subsystem is down |
100
+
101
+ **Attribute value types:** `String`, `int`, `double`, and `bool` only.
102
+ Other types will be dropped or coerced.
103
+
104
+ ---
105
+
106
+ ## 3. sentry_logging Integration (Dart logging package)
107
+
108
+ The `sentry_logging` package bridges the standard Dart `logging` package to Sentry.
109
+ This is ideal for projects already using `logging` for structured output.
110
+
111
+ ### Installation
112
+
113
+ ```yaml
114
+ # pubspec.yaml
115
+ dependencies:
116
+ sentry_flutter: ^9.14.0
117
+ sentry_logging: ^9.14.0
118
+ logging: ^1.0.0
119
+ ```
120
+
121
+ ### Configuration
122
+
123
+ ```dart
124
+ import 'package:sentry_flutter/sentry_flutter.dart';
125
+ import 'package:sentry_logging/sentry_logging.dart';
126
+ import 'package:logging/logging.dart';
127
+
128
+ Future<void> main() async {
129
+ await SentryFlutter.init(
130
+ (options) {
131
+ options.dsn = 'YOUR_DSN';
132
+ options.enableLogs = true;
133
+
134
+ options.addIntegration(
135
+ LoggingIntegration(
136
+ // Minimum level that creates breadcrumbs (default: Level.INFO)
137
+ minBreadcrumbLevel: Level.INFO,
138
+ // Minimum level that creates Sentry error events (default: Level.SEVERE)
139
+ minEventLevel: Level.SEVERE,
140
+ // Minimum level that creates structured logs (default: Level.INFO)
141
+ minSentryLogLevel: Level.INFO,
142
+ ),
143
+ );
144
+ },
145
+ appRunner: () => runApp(MyApp()),
146
+ );
147
+ }
148
+ ```
149
+
150
+ ### Usage with the logging package
151
+
152
+ ```dart
153
+ import 'package:logging/logging.dart';
154
+
155
+ final _logger = Logger('PaymentService');
156
+
157
+ class PaymentService {
158
+ Future<void> processPayment(String orderId, double amount) async {
159
+ _logger.info('Processing payment for order $orderId (amount: $amount)');
160
+
161
+ try {
162
+ final result = await _chargeCard(amount);
163
+ _logger.info(
164
+ 'Payment succeeded for order $orderId (transaction: ${result.transactionId})');
165
+ } catch (e, stackTrace) {
166
+ // Pass error and stackTrace for accurate reporting
167
+ _logger.severe('Payment failed', e, stackTrace);
168
+ }
169
+ }
170
+ }
171
+ ```
172
+
173
+ ### Stack trace handling
174
+
175
+ The Dart `logging` package does **not** automatically capture stack traces.
176
+ Configure it explicitly:
177
+
178
+ ```dart
179
+ // Option 1 — automatic stack trace capture at SEVERE and above
180
+ Logger.root.recordStackTraceAtLevel = Level.SEVERE;
181
+
182
+ // Option 2 — pass stack trace manually to each log call
183
+ Logger('MyService').severe('Error occurred', error, stackTrace);
184
+ ```
185
+
186
+ ### What each log level produces
187
+
188
+ | Dart Level | ≥ `minBreadcrumbLevel` | ≥ `minSentryLogLevel` | ≥ `minEventLevel` |
189
+ | ----------------------------- | -------------------------- | --------------------- | ----------------- |
190
+ | `Level.FINEST`/`FINER`/`FINE` | Breadcrumb (if configured) | Structured log | — |
191
+ | `Level.INFO`/`CONFIG` | ✅ Breadcrumb | ✅ Structured log | — |
192
+ | `Level.WARNING` | ✅ Breadcrumb | ✅ Structured log | — |
193
+ | `Level.SEVERE` | ✅ Breadcrumb | ✅ Structured log | ✅ Error event |
194
+ | `Level.SHOUT` | ✅ Breadcrumb | ✅ Structured log | ✅ Error event |
195
+
196
+ ---
197
+
198
+ ## 4. Structured Attributes
199
+
200
+ Attributes passed to `Sentry.logger.*` become **queryable columns** in the Sentry Logs
201
+ UI:
202
+
203
+ ```dart
204
+ Sentry.logger.info('Checkout completed', attributes: {
205
+ 'orderId': SentryAttribute.string(order.id),
206
+ 'userId': SentryAttribute.string(user.id),
207
+ 'cartValue': SentryAttribute.double(cart.total),
208
+ 'itemCount': SentryAttribute.int(cart.items.length),
209
+ 'paymentMethod': SentryAttribute.string('stripe'),
210
+ 'durationMs': SentryAttribute.int(
211
+ DateTime.now().difference(startTime).inMilliseconds),
212
+ });
213
+
214
+ Sentry.logger.error('Navigation failed', attributes: {
215
+ 'fromRoute': SentryAttribute.string('/home'),
216
+ 'toRoute': SentryAttribute.string('/profile'),
217
+ 'errorCode': SentryAttribute.string(err.code),
218
+ 'retryable': SentryAttribute.bool(true),
219
+ });
220
+ ```
221
+
222
+ ### Scope-level attributes
223
+
224
+ Set attributes on the scope and they are automatically attached to all logs emitted
225
+ while the scope is active:
226
+
227
+ ```dart
228
+ // Global scope — set once at app startup
229
+ Sentry.configureScope((scope) {
230
+ scope.setContexts('app', {
231
+ 'version': '2.1.0',
232
+ 'build': '42',
233
+ 'flavor': 'production',
234
+ });
235
+ });
236
+
237
+ // Per-operation scope — configure the current scope before logging
238
+ Sentry.configureScope((scope) {
239
+ scope.setTag('orderId', 'ord_789');
240
+ scope.setTag('paymentMethod', 'stripe');
241
+ });
242
+
243
+ Sentry.logger.info('Validating cart', attributes: {'cartId': SentryAttribute.string(cart.id)});
244
+ await processPayment();
245
+ Sentry.logger.info('Payment complete');
246
+ // Both logs above carry orderId and paymentMethod tags
247
+ ```
248
+
249
+ ### Auto-attached attributes
250
+
251
+ The SDK automatically attaches these to every log:
252
+
253
+ | Attribute | Source |
254
+ | ---------------------------------------- | -------------------------------------------- |
255
+ | `sentry.environment` | `options.environment` |
256
+ | `sentry.release` | `options.release` |
257
+ | `sentry.sdk.name` / `sentry.sdk.version` | SDK internals |
258
+ | `user.id`, `user.email` | `Sentry.setUser()` when set |
259
+ | `origin` | Identifies which integration emitted the log |
260
+
261
+ ---
262
+
263
+ ## 5. Filtering with beforeSendLog
264
+
265
+ Filter or mutate every log before it is transmitted.
266
+ Return `null` to drop the log entirely:
267
+
268
+ ```dart
269
+ await SentryFlutter.init(
270
+ (options) {
271
+ options.dsn = 'YOUR_DSN';
272
+ options.enableLogs = true;
273
+
274
+ options.beforeSendLog = (log) {
275
+ // Drop trace/debug in production to reduce volume
276
+ if (log.level == SentryLogLevel.trace ||
277
+ log.level == SentryLogLevel.debug) {
278
+ return null;
279
+ }
280
+
281
+ // Scrub sensitive attribute values
282
+ if (log.attributes.containsKey('password')) {
283
+ log.attributes.remove('password');
284
+ }
285
+ if (log.attributes.containsKey('creditCard')) {
286
+ log.attributes['creditCard'] = '[REDACTED]';
287
+ }
288
+
289
+ return log;
290
+ };
291
+ },
292
+ appRunner: () => runApp(MyApp()),
293
+ );
294
+ ```
295
+
296
+ ---
297
+
298
+ ## 6. Log Correlation with Traces
299
+
300
+ When tracing is enabled, logs emitted inside an active span are **automatically
301
+ correlated** in the Sentry UI. You can navigate from a log to its parent transaction.
302
+
303
+ ```dart
304
+ import 'package:sentry/sentry.dart';
305
+
306
+ Future<void> processOrder(String orderId) async {
307
+ final transaction = Sentry.startTransaction('process-order', 'task');
308
+ try {
309
+ Sentry.logger.info('Validating cart', attributes: {'orderId': SentryAttribute.string(orderId)});
310
+ await validateCart(orderId);
311
+
312
+ Sentry.logger.info('Charging payment', attributes: {'orderId': SentryAttribute.string(orderId)});
313
+ await chargePayment(orderId);
314
+
315
+ Sentry.logger.info('Confirming order', attributes: {'orderId': SentryAttribute.string(orderId)});
316
+ await confirmOrder(orderId);
317
+
318
+ transaction.finish(status: const SpanStatus.ok());
319
+ } catch (e) {
320
+ transaction.finish(status: const SpanStatus.internalError());
321
+ rethrow;
322
+ }
323
+ // All three logs are linked to the process-order span in the trace view
324
+ }
325
+ ```
326
+
327
+ Enable tracing in `SentryFlutter.init`:
328
+
329
+ ```dart
330
+ options.tracesSampleRate = 1.0; // required for log-to-trace correlation
331
+ options.enableLogs = true;
332
+ ```
333
+
334
+ ---
335
+
336
+ ## 7. Configuration Reference
337
+
338
+ ### `SentryFlutter.init` options
339
+
340
+ | Option | Type | Default | Description |
341
+ | --------------- | -------------------------------- | ------- | -------------------------------------------------------------- |
342
+ | `enableLogs` | `bool` | `false` | Master switch — must be `true` for all structured logging |
343
+ | `beforeSendLog` | `SentryLog? Function(SentryLog)` | `null` | Filter/mutate logs before transmission. Return `null` to drop. |
344
+
345
+ ### `LoggingIntegration` options
346
+
347
+ | Option | Type | Default | Description |
348
+ | -------------------- | ------- | -------------- | ------------------------------------------------------- |
349
+ | `minBreadcrumbLevel` | `Level` | `Level.INFO` | Minimum Dart log level to create Sentry breadcrumbs |
350
+ | `minEventLevel` | `Level` | `Level.SEVERE` | Minimum Dart log level to create Sentry error events |
351
+ | `minSentryLogLevel` | `Level` | `Level.INFO` | Minimum Dart log level to create Sentry structured logs |
352
+
353
+ ### Version requirements
354
+
355
+ | Feature | Min Package | Min SDK Version |
356
+ | ------------------------------ | ---------------- | --------------- |
357
+ | `enableLogs` / structured logs | `sentry_flutter` | `9.5.0` |
358
+ | `sentry_logging` integration | `sentry_logging` | `9.5.0` |
359
+ | `beforeSendLog` hook | `sentry_flutter` | `9.5.0` |
360
+
361
+ ---
362
+
363
+ ## 8. Known Limitations
364
+
365
+ | Limitation | Details |
366
+ | ------------------------------------ | ------------------------------------------------------------------------------------------- |
367
+ | Crash buffer loss | Logs buffered since last flush are lost on unexpected termination before the buffer is sent |
368
+ | No per-log sampling | Use `beforeSendLog` to reduce volume — sampling is all-or-nothing |
369
+ | Dart logging package stack traces | Must be enabled manually via `Logger.root.recordStackTraceAtLevel` or passed explicitly |
370
+ | `sentry_logging` is separate package | Must be added to `pubspec.yaml` separately — not bundled with `sentry_flutter` |
371
+ | `enableLogs` is off by default | Logs are silently discarded if `enableLogs` is not `true` |
372
+
373
+ ---
374
+
375
+ ## 9. Troubleshooting
376
+
377
+ | Issue | Solution |
378
+ | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- |
379
+ | Logs not appearing in Sentry | Verify `enableLogs: true` is set in `SentryFlutter.init()` |
380
+ | `Sentry.logger` not available | Import `package:sentry/sentry.dart`; check `sentry_flutter` ≥ 9.5.0 |
381
+ | `LoggingIntegration` type not found | Add `sentry_logging` to `pubspec.yaml` and import `package:sentry_logging/sentry_logging.dart` |
382
+ | Logs appear but no stack traces on errors | Set `Logger.root.recordStackTraceAtLevel = Level.SEVERE` or pass `stackTrace` manually |
383
+ | Attribute values showing `[Filtered]` | Server-side PII scrubbing rule matched — adjust **Data Scrubbing** settings in your Sentry project |
384
+ | Logs not linked to traces | Enable tracing (`tracesSampleRate > 0`) and emit logs inside an active transaction (`Sentry.startTransaction()`) |
385
+ | Too many logs in production | Use `beforeSendLog` to drop `trace`/`debug` levels |
386
+ | `sentry_logging` logs not forwarded as structured logs | Check that `minSentryLogLevel` is set to the expected level and `enableLogs: true` |
387
+ | Logs disappearing silently | Check your Sentry org stats for rate limiting; verify log payload < 1 MB |
@@ -0,0 +1,310 @@
1
+ # Metrics — Sentry Flutter SDK
2
+
3
+ > **Minimum SDK:** `sentry_flutter` ≥ **9.11.0** for trace-connected metrics\
4
+ > **Supported metric types:** Counter, Distribution, Gauge (no `set` type)\
5
+ > **Per-metric key limit:** 2 KB
6
+
7
+ Metrics let you track quantitative data about your app’s behavior — things like button
8
+ tap counts, API latency distributions, or active session gauges.
9
+ Unlike error events, metrics are aggregated before being sent to Sentry.
10
+
11
+ ---
12
+
13
+ ## Table of Contents
14
+
15
+ 1. [Metric Types Overview](#1-metric-types-overview)
16
+ 2. [Counter](#2-counter)
17
+ 3. [Distribution](#3-distribution)
18
+ 4. [Gauge](#4-gauge)
19
+ 5. [Tags and Trace Correlation](#5-tags-and-trace-correlation)
20
+ 6. [Configuration Reference](#6-configuration-reference)
21
+ 7. [Known Limitations](#7-known-limitations)
22
+ 8. [Troubleshooting](#8-troubleshooting)
23
+
24
+ ---
25
+
26
+ ## 1. Metric Types Overview
27
+
28
+ | Type | Method | Use Case | Example |
29
+ | ---------------- | ------------------------------- | ---------------------------- | -------------------------------- |
30
+ | **Counter** | `Sentry.metrics.increment()` | Count occurrences | Button taps, API calls, errors |
31
+ | **Distribution** | `Sentry.metrics.distribution()` | Measure value distributions | API response times, image sizes |
32
+ | **Gauge** | `Sentry.metrics.gauge()` | Track min/max/avg of a value | Active sessions, queue depth |
33
+ | ~~Set~~ | ~~`Sentry.metrics.set()`~~ | ~~Count unique occurrences~~ | **Not supported in Flutter SDK** |
34
+
35
+ > **Note on `set` metrics:** The `set` type is not available in the Sentry Flutter/Dart
36
+ > SDK. Use a counter or external unique-value tracking if you need to count distinct
37
+ > users or IDs.
38
+
39
+ ---
40
+
41
+ ## 2. Counter
42
+
43
+ Counters track how many times something happens.
44
+ Use `increment()` — each call adds to the running total.
45
+
46
+ ```dart
47
+ import 'package:sentry/sentry.dart';
48
+
49
+ // Simple increment (adds 1)
50
+ Sentry.metrics.increment('button.tapped');
51
+
52
+ // Custom increment value
53
+ Sentry.metrics.increment('orders.processed', value: 5.0);
54
+
55
+ // With tags for segmentation
56
+ Sentry.metrics.increment(
57
+ 'api.request',
58
+ value: 1.0,
59
+ unit: SentryMeasurementUnit.none,
60
+ tags: {
61
+ 'endpoint': '/api/search',
62
+ 'method': 'GET',
63
+ 'status': '200',
64
+ },
65
+ );
66
+ ```
67
+
68
+ ### Practical examples
69
+
70
+ ```dart
71
+ // Track feature usage
72
+ void onShareButtonTapped() {
73
+ Sentry.metrics.increment('feature.share.tapped');
74
+ // existing share logic...
75
+ }
76
+
77
+ // Count errors by type
78
+ void onPaymentError(String errorType) {
79
+ Sentry.metrics.increment(
80
+ 'payment.error',
81
+ tags: {'type': errorType},
82
+ );
83
+ }
84
+
85
+ // Track A/B test variant interactions
86
+ void onExperimentAction(String variant, String action) {
87
+ Sentry.metrics.increment(
88
+ 'experiment.action',
89
+ tags: {
90
+ 'variant': variant,
91
+ 'action': action,
92
+ },
93
+ );
94
+ }
95
+ ```
96
+
97
+ ---
98
+
99
+ ## 3. Distribution
100
+
101
+ Distributions capture the **spread of values** over time — min, max, sum, count, and
102
+ percentiles (p50, p75, p95, p99). Ideal for latency and size measurements.
103
+
104
+ ```dart
105
+ import 'package:sentry/sentry.dart';
106
+
107
+ // API response time in milliseconds
108
+ final stopwatch = Stopwatch()..start();
109
+ await fetchUserData(userId);
110
+ stopwatch.stop();
111
+
112
+ Sentry.metrics.distribution(
113
+ 'api.response_time',
114
+ value: stopwatch.elapsedMilliseconds.toDouble(),
115
+ unit: SentryMeasurementUnit.duration(DurationSentryMeasurementUnit.milliSecond),
116
+ tags: {'endpoint': '/users', 'cached': 'false'},
117
+ );
118
+ ```
119
+
120
+ ### Unit types
121
+
122
+ ```dart
123
+ // Duration
124
+ SentryMeasurementUnit.duration(DurationSentryMeasurementUnit.nanoSecond)
125
+ SentryMeasurementUnit.duration(DurationSentryMeasurementUnit.microSecond)
126
+ SentryMeasurementUnit.duration(DurationSentryMeasurementUnit.milliSecond)
127
+ SentryMeasurementUnit.duration(DurationSentryMeasurementUnit.second)
128
+ SentryMeasurementUnit.duration(DurationSentryMeasurementUnit.minute)
129
+ SentryMeasurementUnit.duration(DurationSentryMeasurementUnit.hour)
130
+
131
+ // Data sizes
132
+ SentryMeasurementUnit.information(InformationSentryMeasurementUnit.byte)
133
+ SentryMeasurementUnit.information(InformationSentryMeasurementUnit.kilobyte)
134
+ SentryMeasurementUnit.information(InformationSentryMeasurementUnit.megabyte)
135
+ SentryMeasurementUnit.information(InformationSentryMeasurementUnit.gigabyte)
136
+
137
+ // Fractions
138
+ SentryMeasurementUnit.fraction(FractionSentryMeasurementUnit.ratio)
139
+ SentryMeasurementUnit.fraction(FractionSentryMeasurementUnit.percent)
140
+
141
+ // Custom / unitless
142
+ SentryMeasurementUnit.none
143
+ SentryMeasurementUnit.custom('items')
144
+ ```
145
+
146
+ ### Practical examples
147
+
148
+ ```dart
149
+ // Image load time
150
+ Future<void> loadImage(String url) async {
151
+ final start = DateTime.now();
152
+ await precacheImage(NetworkImage(url), context);
153
+ final elapsed = DateTime.now().difference(start);
154
+
155
+ Sentry.metrics.distribution(
156
+ 'image.load_time',
157
+ value: elapsed.inMilliseconds.toDouble(),
158
+ unit: SentryMeasurementUnit.duration(DurationSentryMeasurementUnit.milliSecond),
159
+ tags: {'cached': 'false'},
160
+ );
161
+ }
162
+
163
+ // Payload size tracking
164
+ void onApiResponse(http.Response response) {
165
+ Sentry.metrics.distribution(
166
+ 'api.response_size',
167
+ value: response.contentLength?.toDouble() ?? 0,
168
+ unit: SentryMeasurementUnit.information(InformationSentryMeasurementUnit.byte),
169
+ tags: {'endpoint': response.request?.url.path ?? 'unknown'},
170
+ );
171
+ }
172
+
173
+ // Cart value distribution
174
+ void onCheckoutCompleted(double cartTotal) {
175
+ Sentry.metrics.distribution(
176
+ 'checkout.cart_value',
177
+ value: cartTotal,
178
+ unit: SentryMeasurementUnit.none,
179
+ );
180
+ }
181
+ ```
182
+
183
+ ---
184
+
185
+ ## 4. Gauge
186
+
187
+ Gauges track the **statistical properties** (last, min, max, sum, count) of a set of
188
+ values emitted during the aggregation window.
189
+ Use for things that have a meaningful current state.
190
+
191
+ ```dart
192
+ import 'package:sentry/sentry.dart';
193
+
194
+ // Track active background operations
195
+ Sentry.metrics.gauge(
196
+ 'background.tasks.active',
197
+ value: activeTaskCount.toDouble(),
198
+ );
199
+
200
+ // Track session depth
201
+ Sentry.metrics.gauge(
202
+ 'navigation.stack_depth',
203
+ value: Navigator.of(context).canPop() ? stackDepth.toDouble() : 0,
204
+ );
205
+
206
+ // Monitor cache entries
207
+ Sentry.metrics.gauge(
208
+ 'cache.entry_count',
209
+ value: imageCache.currentSize.toDouble(),
210
+ tags: {'type': 'image_cache'},
211
+ );
212
+ ```
213
+
214
+ ---
215
+
216
+ ## 5. Tags and Trace Correlation
217
+
218
+ ### Tags
219
+
220
+ All metric types accept a `tags` map.
221
+ Tags are key-value strings used to **filter and group metrics** in the Sentry Metrics
222
+ UI:
223
+
224
+ ```dart
225
+ Sentry.metrics.increment(
226
+ 'checkout.step',
227
+ tags: {
228
+ 'step': 'payment', // string values only
229
+ 'platform': 'ios',
230
+ 'user_type': 'subscriber',
231
+ },
232
+ );
233
+ ```
234
+
235
+ ### Trace correlation
236
+
237
+ As of `sentry_flutter` 9.11.0, metrics are **automatically linked to the active trace**
238
+ when emitted inside a span.
239
+ This allows you to view metric data alongside transaction performance in the Sentry UI:
240
+
241
+ ```dart
242
+ final transaction = Sentry.startTransaction('checkout', 'ui.action');
243
+ try {
244
+ // This increment is linked to the checkout transaction
245
+ Sentry.metrics.increment('checkout.started');
246
+
247
+ final start = DateTime.now();
248
+ await processCheckout();
249
+ final elapsed = DateTime.now().difference(start);
250
+
251
+ Sentry.metrics.distribution(
252
+ 'checkout.duration',
253
+ value: elapsed.inMilliseconds.toDouble(),
254
+ unit: SentryMeasurementUnit.duration(DurationSentryMeasurementUnit.milliSecond),
255
+ );
256
+
257
+ Sentry.metrics.increment('checkout.completed');
258
+
259
+ transaction.finish(status: const SpanStatus.ok());
260
+ } catch (e) {
261
+ transaction.finish(status: const SpanStatus.internalError());
262
+ rethrow;
263
+ }
264
+ ```
265
+
266
+ ---
267
+
268
+ ## 6. Configuration Reference
269
+
270
+ No special configuration is required for metrics beyond initializing the SDK with a
271
+ valid DSN. Metrics are enabled by default.
272
+
273
+ | Method | Signature |
274
+ | ------------------------------------------------------- | --------------------------- |
275
+ | `Sentry.metrics.increment(key, {value, unit, tags})` | Increment a counter |
276
+ | `Sentry.metrics.distribution(key, {value, unit, tags})` | Record a distribution value |
277
+ | `Sentry.metrics.gauge(key, {value, unit, tags})` | Record a gauge observation |
278
+
279
+ ### Version requirements
280
+
281
+ | Feature | Min SDK |
282
+ | ---------------------------- | -------- |
283
+ | `Sentry.metrics.*` basic API | `9.0.0` |
284
+ | Trace-connected metrics | `9.11.0` |
285
+
286
+ ---
287
+
288
+ ## 7. Known Limitations
289
+
290
+ | Limitation | Details |
291
+ | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
292
+ | No `set` type | `Sentry.metrics.set()` is **not supported** in the Flutter/Dart SDK. Use counters or external tracking for unique-value counting. |
293
+ | 2 KB per-metric key limit | The metric key name + all tag key-value pairs must fit within 2 KB total. |
294
+ | Active development | The metrics API is stable but under active development. Some edge cases may change in future minor versions. |
295
+ | Aggregation window | Metrics are aggregated locally before being flushed. Individual data points are not preserved — you see aggregations (sum, count, min, max). |
296
+ | No sampling for metrics | Unlike errors and transactions, there is no sample rate for metrics — all emitted metrics are sent. Use tags and filtering instead of emitting fewer data points. |
297
+ | Tag values must be strings | Passing non-string tag values will be coerced or dropped. |
298
+
299
+ ---
300
+
301
+ ## 8. Troubleshooting
302
+
303
+ | Issue | Solution |
304
+ | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
305
+ | Metrics not appearing in Sentry | Verify DSN is correct and the SDK is initialized. Check Sentry → Metrics to ensure the feature is enabled for your organization. |
306
+ | SDK version doesn’t have `Sentry.metrics` | Upgrade `sentry_flutter` to ≥ 9.0.0 |
307
+ | Metrics not linked to traces | Upgrade to `sentry_flutter` ≥ 9.11.0 and emit metrics inside an active transaction (`Sentry.startTransaction()`) |
308
+ | `set` metric type not available | Expected — not supported in Flutter SDK. Use `increment` with a counter instead. |
309
+ | Metrics appear intermittently | Expected — metrics are batched and flushed on a schedule. Low-volume metrics may appear in Sentry with a delay. |
310
+ | Tags not showing up correctly | Verify all tag values are strings; check total metric key + tags size is under 2 KB |