vybekiit 0.7.26 → 0.7.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +3891 -1301
- package/dist/global-skills/aws-cdk/SKILL.md +19 -5
- package/dist/global-skills/aws-cdk/references/fast-deployments.md +191 -0
- package/dist/global-skills/aws-cdk/references/troubleshooting-deployment.md +16 -0
- package/dist/global-skills/aws-cloudformation/SKILL.md +16 -26
- package/dist/global-skills/aws-cloudformation/references/check-cloudformation-template-compliance.script.md +7 -3
- package/dist/global-skills/aws-cloudformation/references/cloudformation-language-server.md +177 -0
- package/dist/global-skills/aws-cloudformation/references/cloudformation-pre-deploy-validation.script.md +8 -2
- package/dist/global-skills/aws-cloudformation/references/persist-template-context.script.md +5 -8
- package/dist/global-skills/aws-cloudformation/references/retrieve-template-context.script.md +1 -1
- package/dist/global-skills/aws-cloudformation/references/security-considerations.md +51 -0
- package/dist/global-skills/aws-cloudformation/references/troubleshoot-failed-stack.script.md +138 -0
- package/dist/global-skills/aws-cloudformation/references/{validate-cloudformation-template.script.md → validate-with-cfn-lint.script.md} +15 -27
- package/dist/global-skills/aws-cloudformation/references/validate-with-cloudformation-validate.script.md +181 -0
- package/dist/global-skills/aws-cloudformation/references/validation-tool-selection.md +44 -0
- package/dist/global-skills/aws-serverless/SKILL.md +9 -1
- package/dist/global-skills/aws-serverless/references/architecture.md +3 -1
- package/dist/global-skills/aws-serverless/references/lambda.md +3 -1
- package/dist/global-skills/aws-serverless/references/orchestration.md +1 -0
- package/dist/global-skills/better-auth-best-practices/SKILL.md +18 -8
- package/dist/global-skills/eas-app-stores/SKILL.md +31 -15
- package/dist/global-skills/eas-app-stores/agents/openai.yaml +2 -2
- package/dist/global-skills/eas-app-stores/references/ios-app-store.md +37 -32
- package/dist/global-skills/eas-app-stores/references/native-ios.md +167 -0
- package/dist/global-skills/eas-app-stores/references/play-store.md +3 -7
- package/dist/global-skills/eas-app-stores/references/testflight.md +39 -35
- package/dist/global-skills/eas-simulator/SKILL.md +48 -26
- package/dist/global-skills/eas-simulator/references/controllers.md +32 -3
- package/dist/global-skills/eas-simulator/references/run-your-app.md +34 -4
- package/dist/global-skills/eas-simulator/references/troubleshooting.md +8 -4
- package/dist/global-skills/eas-update/SKILL.md +146 -0
- package/dist/global-skills/eas-update/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-animation/RECIPES.md +2 -2
- package/dist/global-skills/expo-animation/SKILL.md +9 -2
- package/dist/global-skills/expo-brownfield/SKILL.md +18 -11
- package/dist/global-skills/expo-brownfield/agents/openai.yaml +2 -2
- package/dist/global-skills/expo-brownfield/references/brownfield-integrated.md +94 -69
- package/dist/global-skills/expo-brownfield/references/brownfield-isolated.md +40 -42
- package/dist/global-skills/expo-brownfield/references/comparison.md +5 -5
- package/dist/global-skills/expo-brownfield/references/feature-integration.md +163 -0
- package/dist/global-skills/expo-brownfield/references/troubleshooting.md +17 -17
- package/dist/global-skills/expo-brownfield/references/version-compatibility.md +40 -0
- package/dist/global-skills/expo-data-fetching/SKILL.md +27 -6
- package/dist/global-skills/expo-design-system/SKILL.md +27 -7
- package/dist/global-skills/expo-design-system/references/audit.md +7 -2
- package/dist/global-skills/expo-design-system/references/native-slop.md +74 -0
- package/dist/global-skills/expo-examples/SKILL.md +0 -1
- package/dist/global-skills/expo-examples/references/catalog.md +1 -1
- package/dist/global-skills/expo-migrate-module/SKILL.md +21 -10
- package/dist/global-skills/expo-migrate-module/references/compatibility.md +80 -23
- package/dist/global-skills/expo-migrate-module/references/migration-map.md +162 -11
- package/dist/global-skills/expo-native-ui/SKILL.md +25 -16
- package/dist/global-skills/expo-native-ui/agents/openai.yaml +2 -2
- package/dist/global-skills/expo-native-ui/references/controls.md +5 -46
- package/dist/global-skills/expo-native-ui/references/icons.md +21 -2
- package/dist/global-skills/expo-native-ui/references/media.md +15 -20
- package/dist/global-skills/expo-native-ui/references/visual-effects.md +12 -11
- package/dist/global-skills/expo-overview/SKILL.md +17 -12
- package/dist/global-skills/expo-router/SKILL.md +5 -3
- package/dist/global-skills/expo-router/references/tabs.md +5 -5
- package/dist/global-skills/expo-upgrade/SKILL.md +3 -1
- package/dist/global-skills/expo-web-to-native/references/false-friends.md +2 -2
- package/dist/global-skills/expo-web-to-native/references/native-patterns.md +1 -1
- package/dist/global-skills/firebase-ai-logic-basics/SKILL.md +13 -16
- package/dist/global-skills/firebase-ai-logic-basics/references/ios_setup.md +4 -5
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_android.md +4 -4
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_web.md +3 -3
- package/dist/global-skills/firebase-auth-basics/SKILL.md +11 -6
- package/dist/global-skills/firebase-auth-basics/references/client_sdk_android.md +4 -5
- package/dist/global-skills/firebase-auth-basics/references/client_sdk_web.md +3 -3
- package/dist/global-skills/firebase-auth-basics/references/flutter_setup.md +24 -25
- package/dist/global-skills/firebase-auth-basics/references/security_rules.md +4 -2
- package/dist/global-skills/firebase-crashlytics/references/android_setup.md +7 -4
- package/dist/global-skills/firebase-crashlytics/references/ios_setup.md +2 -3
- package/dist/global-skills/firebase-data-connect/SKILL.md +2 -1
- package/dist/global-skills/firebase-data-connect/examples.md +4 -4
- package/dist/global-skills/firebase-data-connect/reference/config.md +5 -4
- package/dist/global-skills/firebase-data-connect/reference/realtime.md +1 -2
- package/dist/global-skills/firebase-data-connect/reference/sdk_flutter.md +2 -2
- package/dist/global-skills/firebase-data-connect/reference/sdk_ios.md +2 -2
- package/dist/global-skills/firebase-data-connect/reference/sdk_web.md +17 -6
- package/dist/global-skills/firebase-data-connect/reference/security.md +5 -5
- package/dist/global-skills/firebase-data-connect/templates.md +2 -1
- package/dist/global-skills/firebase-firestore/SKILL.md +20 -8
- package/dist/global-skills/firebase-firestore/references/enterprise/android_sdk_usage.md +5 -4
- package/dist/global-skills/firebase-firestore/references/enterprise/data_model.md +12 -3
- package/dist/global-skills/firebase-firestore/references/enterprise/indexes.md +16 -18
- package/dist/global-skills/firebase-firestore/references/enterprise/provisioning.md +1 -1
- package/dist/global-skills/firebase-firestore/references/enterprise/python_sdk_usage.md +5 -1
- package/dist/global-skills/firebase-firestore/references/enterprise/web_sdk_usage.md +7 -7
- package/dist/global-skills/firebase-firestore/references/standard/android_sdk_usage.md +5 -5
- package/dist/global-skills/firebase-firestore/references/standard/flutter_setup.md +4 -4
- package/dist/global-skills/firebase-firestore/references/standard/indexes.md +16 -18
- package/dist/global-skills/firebase-firestore/references/standard/provisioning.md +1 -1
- package/dist/global-skills/firebase-remote-config-basics/SKILL.md +0 -5
- package/dist/global-skills/firebase-remote-config-basics/references/android_setup.md +36 -8
- package/dist/global-skills/firebase-remote-config-basics/references/ios_setup.md +1 -7
- package/dist/global-skills/firebase-security-rules-auditor/SKILL.md +17 -6
- package/dist/global-skills/{firebase-firestore/references/standard/security_rules.md → firestore-rules-creation/SKILL.md} +24 -13
- package/dist/global-skills/grow-my-customers/SKILL.md +23 -0
- package/dist/global-skills/instrument-feature-flags/SKILL.md +25 -25
- package/dist/global-skills/instrument-feature-flags/references/adding-feature-flag-code.md +141 -285
- package/dist/global-skills/instrument-feature-flags/references/android.md +6 -15
- package/dist/global-skills/instrument-feature-flags/references/api.md +4 -11
- package/dist/global-skills/instrument-feature-flags/references/best-practices.md +1 -13
- package/dist/global-skills/instrument-feature-flags/references/django.md +14 -27
- package/dist/global-skills/instrument-feature-flags/references/dotnet.md +20 -79
- package/dist/global-skills/instrument-feature-flags/references/elixir.md +1 -9
- package/dist/global-skills/instrument-feature-flags/references/flask.md +13 -13
- package/dist/global-skills/instrument-feature-flags/references/flutter.md +3 -24
- package/dist/global-skills/instrument-feature-flags/references/go.md +3 -15
- package/dist/global-skills/instrument-feature-flags/references/ios.md +4 -17
- package/dist/global-skills/instrument-feature-flags/references/java.md +5 -13
- package/dist/global-skills/instrument-feature-flags/references/laravel.md +13 -17
- package/dist/global-skills/instrument-feature-flags/references/next-js.md +25 -32
- package/dist/global-skills/instrument-feature-flags/references/nodejs.md +8 -15
- package/dist/global-skills/instrument-feature-flags/references/php.md +1 -15
- package/dist/global-skills/instrument-feature-flags/references/python.md +2 -15
- package/dist/global-skills/instrument-feature-flags/references/react-native.md +13 -15
- package/dist/global-skills/instrument-feature-flags/references/react.md +17 -21
- package/dist/global-skills/instrument-feature-flags/references/ruby-on-rails.md +37 -83
- package/dist/global-skills/instrument-feature-flags/references/ruby.md +2 -15
- package/dist/global-skills/instrument-feature-flags/references/rust.md +13 -25
- package/dist/global-skills/instrument-feature-flags/references/usage.md +14 -63
- package/dist/global-skills/instrument-feature-flags/references/web.md +9 -14
- package/dist/global-skills/instrument-product-analytics/SKILL.md +29 -29
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-hybrid.md +3 -1
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-ssr.md +3 -1
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-static.md +3 -1
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-view-transitions.md +3 -1
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-ruby-on-rails.md +3 -1
- package/dist/global-skills/instrument-product-analytics/references/android.md +72 -107
- package/dist/global-skills/instrument-product-analytics/references/angular.md +26 -28
- package/dist/global-skills/instrument-product-analytics/references/astro.md +13 -24
- package/dist/global-skills/instrument-product-analytics/references/configuration.md +45 -63
- package/dist/global-skills/instrument-product-analytics/references/django.md +14 -27
- package/dist/global-skills/instrument-product-analytics/references/dotnet.md +20 -79
- package/dist/global-skills/instrument-product-analytics/references/elixir.md +47 -49
- package/dist/global-skills/instrument-product-analytics/references/flask.md +13 -13
- package/dist/global-skills/instrument-product-analytics/references/flutter.md +60 -90
- package/dist/global-skills/instrument-product-analytics/references/go.md +17 -56
- package/dist/global-skills/instrument-product-analytics/references/identify-users.md +15 -15
- package/dist/global-skills/instrument-product-analytics/references/ios.md +11 -15
- package/dist/global-skills/instrument-product-analytics/references/laravel.md +13 -17
- package/dist/global-skills/instrument-product-analytics/references/next-js.md +25 -32
- package/dist/global-skills/instrument-product-analytics/references/nuxt-js-3-6.md +13 -27
- package/dist/global-skills/instrument-product-analytics/references/nuxt-js.md +14 -28
- package/dist/global-skills/instrument-product-analytics/references/php.md +33 -84
- package/dist/global-skills/instrument-product-analytics/references/posthog-python.md +229 -9
- package/dist/global-skills/instrument-product-analytics/references/python.md +415 -106
- package/dist/global-skills/instrument-product-analytics/references/react-native.md +161 -155
- package/dist/global-skills/instrument-product-analytics/references/react-router-v6.md +12 -33
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-data-mode.md +15 -33
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-declarative-mode.md +12 -33
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-framework-mode.md +26 -41
- package/dist/global-skills/instrument-product-analytics/references/ruby-on-rails.md +37 -83
- package/dist/global-skills/instrument-product-analytics/references/ruby.md +48 -108
- package/dist/global-skills/instrument-product-analytics/references/svelte.md +18 -24
- package/dist/global-skills/instrument-product-analytics/references/tanstack-start.md +17 -19
- package/dist/global-skills/instrument-product-analytics/references/usage.md +14 -63
- package/dist/global-skills/instrument-product-analytics/references/vue-js.md +29 -28
- package/dist/global-skills/manifest.json +8 -2
- package/dist/global-skills/mongodb-search-and-ai/SKILL.md +28 -37
- package/dist/global-skills/mongodb-search-and-ai/references/automated-embedding.md +438 -0
- package/dist/global-skills/mongodb-search-and-ai/references/hybrid-search.md +60 -4
- package/dist/global-skills/mongodb-search-and-ai/references/vector-search.md +46 -108
- package/dist/global-skills/neon/SKILL.md +207 -213
- package/dist/global-skills/neon/references/auth.md +12 -0
- package/dist/global-skills/neon/references/claimable-neon.md +10 -14
- package/dist/global-skills/neon/references/function-triggers.md +53 -0
- package/dist/global-skills/neon/references/logs-loki.md +61 -0
- package/dist/global-skills/neon/references/parse-env.md +32 -0
- package/dist/global-skills/neon/references/sdk.md +7 -0
- package/dist/global-skills/neon-ai-gateway/SKILL.md +14 -16
- package/dist/global-skills/neon-auth/SKILL.md +155 -0
- package/dist/global-skills/neon-auth/references/managed-auth.md +173 -0
- package/dist/global-skills/neon-auth/references/self-managed.md +25 -0
- package/dist/global-skills/neon-functions/SKILL.md +159 -84
- package/dist/global-skills/neon-functions/references/ai-sdk.md +4 -6
- package/dist/global-skills/neon-functions/references/function-triggers.md +249 -0
- package/dist/global-skills/neon-functions/references/mastra-studio.md +3 -3
- package/dist/global-skills/neon-functions/references/mcp.md +1 -1
- package/dist/global-skills/neon-functions/references/production-hardening.md +340 -0
- package/dist/global-skills/neon-functions/references/sse.md +8 -5
- package/dist/global-skills/neon-object-storage/SKILL.md +10 -11
- package/dist/global-skills/neon-postgres/SKILL.md +120 -17
- package/dist/global-skills/neon-postgres/references/full-text-search.md +99 -0
- package/dist/global-skills/neon-postgres/references/hybrid-search.md +90 -0
- package/dist/global-skills/neon-postgres/references/lakebase-search-drizzle.md +172 -0
- package/dist/global-skills/neon-postgres/references/vector-search.md +137 -0
- package/dist/global-skills/neon-postgres-branches/SKILL.md +3 -3
- package/dist/global-skills/neon-postgres-egress-optimizer/SKILL.md +1 -1
- package/dist/global-skills/onboarding/SKILL.md +8 -6
- package/dist/global-skills/resend/SKILL.md +4 -2
- package/dist/global-skills/resend/references/broadcasts.md +6 -1
- package/dist/global-skills/resend/references/receiving.md +29 -10
- package/dist/global-skills/resend/references/sending/email-management.md +14 -4
- package/dist/global-skills/resend/references/topics.md +9 -6
- package/dist/global-skills/resend/references/usage.md +117 -0
- package/dist/global-skills/resend/references/webhooks.md +59 -2
- package/dist/global-skills/stripe-best-practices/SKILL.md +35 -29
- package/dist/global-skills/stripe-best-practices/references/billing.md +9 -2
- package/dist/global-skills/stripe-best-practices/references/payments.md +4 -2
- package/dist/global-skills/stripe-best-practices/references/security.md +3 -1
- package/dist/global-skills/stripe-best-practices/references/tax.md +39 -20
- package/dist/global-skills/supabase/SKILL.md +6 -0
- package/dist/global-skills/use-railway/SKILL.md +42 -22
- package/dist/global-skills/use-railway/references/analyze-db.md +7 -6
- package/dist/global-skills/use-railway/references/cloud-agents.md +70 -0
- package/dist/global-skills/use-railway/references/configure.md +17 -2
- package/dist/global-skills/use-railway/references/databases.md +107 -0
- package/dist/global-skills/use-railway/references/deploy.md +5 -5
- package/dist/global-skills/use-railway/references/feature-flags.md +25 -13
- package/dist/global-skills/use-railway/references/iac.md +66 -77
- package/dist/global-skills/use-railway/references/operate.md +26 -3
- package/dist/global-skills/use-railway/references/request.md +31 -23
- package/dist/global-skills/use-railway/references/setup.md +16 -5
- package/dist/global-skills/use-railway/references/tracing.md +261 -0
- package/dist/global-skills/use-railway/references/usage.md +52 -0
- package/dist/global-skills/validate-my-idea/SKILL.md +54 -0
- package/dist/global-skills/{feedback → vybekiit-feedback}/SKILL.md +16 -12
- package/dist/global-skills/watch-my-app/SKILL.md +53 -0
- package/dist/global-skills/workers-best-practices/SKILL.md +36 -103
- package/dist/global-skills/workers-best-practices/references/configuration.md +139 -0
- package/dist/global-skills/workers-best-practices/references/platform-apis.md +51 -0
- package/dist/global-skills/workers-best-practices/references/{rules.md → runtime-patterns.md} +13 -137
- package/dist/global-skills/wrangler/SKILL.md +48 -901
- package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Sources/main.swift +19 -15
- package/package.json +9 -8
- package/dist/global-skills/expo-native-ui/references/animations.md +0 -220
- package/dist/global-skills/firebase-firestore/references/enterprise/security_rules.md +0 -577
- package/dist/global-skills/workers-best-practices/references/review.md +0 -174
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
|
|
2
2
|
|
|
3
|
-
# Elixir
|
|
4
|
-
|
|
5
|
-
Copy page
|
|
6
|
-
|
|
7
|
-
# Elixir - Docs
|
|
3
|
+
# Elixir
|
|
8
4
|
|
|
9
5
|
This library provides an Elixir HTTP client for PostHog. [See the repository](https://github.com/posthog/posthog-elixir) for more information.
|
|
10
6
|
|
|
@@ -16,8 +12,6 @@ The package can be installed by adding `posthog` to your list of dependencies in
|
|
|
16
12
|
|
|
17
13
|
Elixir
|
|
18
14
|
|
|
19
|
-
PostHog AI
|
|
20
|
-
|
|
21
15
|
```elixir
|
|
22
16
|
def deps do
|
|
23
17
|
[
|
|
@@ -30,8 +24,6 @@ end
|
|
|
30
24
|
|
|
31
25
|
config/config.exs
|
|
32
26
|
|
|
33
|
-
PostHog AI
|
|
34
|
-
|
|
35
27
|
```elixir
|
|
36
28
|
config :posthog,
|
|
37
29
|
enable: true,
|
|
@@ -60,8 +52,6 @@ To capture an event, use `PostHog.capture/2`:
|
|
|
60
52
|
|
|
61
53
|
Elixir
|
|
62
54
|
|
|
63
|
-
PostHog AI
|
|
64
|
-
|
|
65
55
|
```elixir
|
|
66
56
|
PostHog.capture("user_signed_up", %{distinct_id: "distinct_id_of_the_user"})
|
|
67
57
|
```
|
|
@@ -74,8 +64,6 @@ Optionally, you can include additional information with the event by including a
|
|
|
74
64
|
|
|
75
65
|
Elixir
|
|
76
66
|
|
|
77
|
-
PostHog AI
|
|
78
|
-
|
|
79
67
|
```elixir
|
|
80
68
|
PostHog.capture("user_signed_up", %{
|
|
81
69
|
distinct_id: "distinct_id_of_the_user",
|
|
@@ -92,8 +80,6 @@ The context is stored in the `Logger` metadata and PostHog automatically attache
|
|
|
92
80
|
|
|
93
81
|
Elixir
|
|
94
82
|
|
|
95
|
-
PostHog AI
|
|
96
|
-
|
|
97
83
|
```elixir
|
|
98
84
|
PostHog.set_context(%{distinct_id: "distinct_id_of_the_user"})
|
|
99
85
|
PostHog.capture("page_opened")
|
|
@@ -103,8 +89,6 @@ You can also scope the context to a specific event name:
|
|
|
103
89
|
|
|
104
90
|
Elixir
|
|
105
91
|
|
|
106
|
-
PostHog AI
|
|
107
|
-
|
|
108
92
|
```elixir
|
|
109
93
|
PostHog.set_event_context("sensitive_event", %{"$process_person_profile": false})
|
|
110
94
|
```
|
|
@@ -125,8 +109,6 @@ For example:
|
|
|
125
109
|
|
|
126
110
|
Elixir
|
|
127
111
|
|
|
128
|
-
PostHog AI
|
|
129
|
-
|
|
130
112
|
```elixir
|
|
131
113
|
PostHog.capture("$create_alias", %{distinct_id: "frontend_id", alias: "backend_id"})
|
|
132
114
|
```
|
|
@@ -135,8 +117,6 @@ PostHog.capture("$create_alias", %{distinct_id: "frontend_id", alias: "backend_i
|
|
|
135
117
|
|
|
136
118
|
Elixir
|
|
137
119
|
|
|
138
|
-
PostHog AI
|
|
139
|
-
|
|
140
120
|
```elixir
|
|
141
121
|
PostHog.capture("$groupidentify", %{
|
|
142
122
|
distinct_id: "static_string_used_for_all_group_events",
|
|
@@ -151,8 +131,6 @@ For Phoenix or Plug apps, add `PostHog.Integrations.Plug` before your router to
|
|
|
151
131
|
|
|
152
132
|
lib/my\_app\_web/endpoint.ex
|
|
153
133
|
|
|
154
|
-
PostHog AI
|
|
155
|
-
|
|
156
134
|
```elixir
|
|
157
135
|
plug PostHog.Integrations.Plug
|
|
158
136
|
plug MyAppWeb.Router
|
|
@@ -162,14 +140,14 @@ For plain Plug routers, add it before `:match` and `:dispatch`:
|
|
|
162
140
|
|
|
163
141
|
Elixir
|
|
164
142
|
|
|
165
|
-
PostHog AI
|
|
166
|
-
|
|
167
143
|
```elixir
|
|
168
144
|
defmodule MyRouter do
|
|
169
145
|
use Plug.Router
|
|
146
|
+
|
|
170
147
|
plug PostHog.Integrations.Plug
|
|
171
148
|
plug :match
|
|
172
149
|
plug :dispatch
|
|
150
|
+
|
|
173
151
|
# ... routes
|
|
174
152
|
end
|
|
175
153
|
```
|
|
@@ -194,10 +172,9 @@ Call `PostHog.FeatureFlags.evaluate_flags/1` once for the user, then read values
|
|
|
194
172
|
|
|
195
173
|
Elixir
|
|
196
174
|
|
|
197
|
-
PostHog AI
|
|
198
|
-
|
|
199
175
|
```elixir
|
|
200
176
|
{:ok, snapshot} = PostHog.FeatureFlags.evaluate_flags("distinct_id_of_your_user")
|
|
177
|
+
|
|
201
178
|
if PostHog.FeatureFlags.Evaluations.enabled?(snapshot, "flag-key") do
|
|
202
179
|
# Do something differently for this user
|
|
203
180
|
# Optional: fetch the payload
|
|
@@ -209,11 +186,11 @@ end
|
|
|
209
186
|
|
|
210
187
|
Elixir
|
|
211
188
|
|
|
212
|
-
PostHog AI
|
|
213
|
-
|
|
214
189
|
```elixir
|
|
215
190
|
{:ok, snapshot} = PostHog.FeatureFlags.evaluate_flags("distinct_id_of_your_user")
|
|
191
|
+
|
|
216
192
|
enabled_variant = PostHog.FeatureFlags.Evaluations.get_flag(snapshot, "flag-key")
|
|
193
|
+
|
|
217
194
|
if enabled_variant == "variant-key" do
|
|
218
195
|
# Do something differently for this user
|
|
219
196
|
# Optional: fetch the payload
|
|
@@ -239,13 +216,13 @@ Put the same `snapshot` object that you used for branching into context. Subsequ
|
|
|
239
216
|
|
|
240
217
|
Elixir
|
|
241
218
|
|
|
242
|
-
PostHog AI
|
|
243
|
-
|
|
244
219
|
```elixir
|
|
245
220
|
{:ok, snapshot} = PostHog.FeatureFlags.evaluate_flags("distinct_id_of_your_user")
|
|
221
|
+
|
|
246
222
|
if PostHog.FeatureFlags.Evaluations.enabled?(snapshot, "flag-key") do
|
|
247
223
|
# Do something differently for this user
|
|
248
224
|
end
|
|
225
|
+
|
|
249
226
|
PostHog.FeatureFlags.set_in_context(snapshot)
|
|
250
227
|
PostHog.capture("event_name", %{distinct_id: "distinct_id_of_your_user"})
|
|
251
228
|
```
|
|
@@ -256,15 +233,15 @@ To reduce event property bloat, put a filtered snapshot in context:
|
|
|
256
233
|
|
|
257
234
|
Elixir
|
|
258
235
|
|
|
259
|
-
PostHog AI
|
|
260
|
-
|
|
261
236
|
```elixir
|
|
262
237
|
{:ok, snapshot} = PostHog.FeatureFlags.evaluate_flags("distinct_id_of_your_user")
|
|
238
|
+
|
|
263
239
|
# Attach only flags accessed with enabled?/2 or get_flag/2 before this call
|
|
264
240
|
PostHog.FeatureFlags.Evaluations.enabled?(snapshot, "flag-key")
|
|
265
241
|
PostHog.FeatureFlags.set_in_context(
|
|
266
242
|
PostHog.FeatureFlags.Evaluations.only_accessed(snapshot)
|
|
267
243
|
)
|
|
244
|
+
|
|
268
245
|
# Or attach only specific flags
|
|
269
246
|
PostHog.FeatureFlags.set_in_context(
|
|
270
247
|
PostHog.FeatureFlags.Evaluations.only(snapshot, ["checkout-flow", "new-dashboard"])
|
|
@@ -279,8 +256,6 @@ In the event properties, include `$feature/feature_flag_name: variant_key`:
|
|
|
279
256
|
|
|
280
257
|
Elixir
|
|
281
258
|
|
|
282
|
-
PostHog AI
|
|
283
|
-
|
|
284
259
|
```elixir
|
|
285
260
|
PostHog.capture("event_name", %{
|
|
286
261
|
"$feature/feature-flag-key" => "variant-key",
|
|
@@ -294,8 +269,6 @@ By default, `evaluate_flags/1` evaluates every flag for the user. If you only ne
|
|
|
294
269
|
|
|
295
270
|
Elixir
|
|
296
271
|
|
|
297
|
-
PostHog AI
|
|
298
|
-
|
|
299
272
|
```elixir
|
|
300
273
|
{:ok, snapshot} =
|
|
301
274
|
PostHog.FeatureFlags.evaluate_flags(%{
|
|
@@ -310,6 +283,34 @@ Capturing `$feature_flag_called` events enables PostHog to know when a flag was
|
|
|
310
283
|
|
|
311
284
|
`PostHog.FeatureFlags.Evaluations.get_flag_payload/2` doesn't send `$feature_flag_called` events.
|
|
312
285
|
|
|
286
|
+
### Local feature flag evaluation
|
|
287
|
+
|
|
288
|
+
Local evaluation is available in version 2.15.0 and later. Follow the [server-side local evaluation guide](/docs/feature-flags/local-evaluation.md) to find your secure key and see how to pass the person properties, groups, and group properties that your flag conditions require.
|
|
289
|
+
|
|
290
|
+
Store the secure key in a server-side environment variable. Don't expose it to client-side applications:
|
|
291
|
+
|
|
292
|
+
config/runtime.exs
|
|
293
|
+
|
|
294
|
+
```elixir
|
|
295
|
+
config :posthog,
|
|
296
|
+
api_host: "https://us.i.posthog.com",
|
|
297
|
+
api_key: "<ph_project_token>",
|
|
298
|
+
secret_key: System.fetch_env!("POSTHOG_FEATURE_FLAGS_SECURE_API_KEY")
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
When `secret_key` is set, the SDK fetches definitions when it starts and polls for updates every 30 seconds. `PostHog.FeatureFlags.evaluate_flags/1` evaluates each flag locally first. If a flag can't be evaluated locally, the SDK makes one `/flags` request to resolve the remaining flags. Set `only_evaluate_locally: true` in the evaluation map to prevent this remote fallback. The SDK then omits unresolved flags from the snapshot.
|
|
302
|
+
|
|
303
|
+
Use these configuration options to control local evaluation:
|
|
304
|
+
|
|
305
|
+
| Option | Default | Purpose |
|
|
306
|
+
| --- | --- | --- |
|
|
307
|
+
| `enable_local_evaluation` | `true` | Starts local evaluation when `secret_key` is set. |
|
|
308
|
+
| `feature_flags_poll_interval_ms` | `30_000` | Sets the interval between definition refreshes. |
|
|
309
|
+
| `flag_definition_request_timeout_ms` | `10_000` | Sets the timeout for each definition request. |
|
|
310
|
+
| `flag_definition_cache_provider_timeout_ms` | `5_000` | Sets the timeout for each shared cache provider callback. |
|
|
311
|
+
|
|
312
|
+
For multiple server instances, you can implement `PostHog.FeatureFlags.FlagDefinitionCacheProvider` and set `flag_definition_cache_provider: {module, state}`. This optional provider shares definitions and coordinates which instance polls PostHog. See [local evaluation in distributed environments](/docs/feature-flags/local-evaluation/distributed-environments?tab=Elixir.md) for the callback contract and configuration.
|
|
313
|
+
|
|
313
314
|
## Error tracking
|
|
314
315
|
|
|
315
316
|
Error tracking is enabled by default. It will automatically captures exceptions thrown by the application.
|
|
@@ -320,8 +321,6 @@ You can always disable it by setting `enable_error_tracking` to false:
|
|
|
320
321
|
|
|
321
322
|
Elixir
|
|
322
323
|
|
|
323
|
-
PostHog AI
|
|
324
|
-
|
|
325
324
|
```elixir
|
|
326
325
|
config :posthog,
|
|
327
326
|
enable_error_tracking: false
|
|
@@ -335,10 +334,9 @@ In certain cases, you might want to run this supervision tree yourself. You can
|
|
|
335
334
|
|
|
336
335
|
config.exs
|
|
337
336
|
|
|
338
|
-
PostHog AI
|
|
339
|
-
|
|
340
337
|
```elixir
|
|
341
338
|
config :posthog, enable: false
|
|
339
|
+
|
|
342
340
|
config :my_app, :posthog,
|
|
343
341
|
api_host: "https://us.i.posthog.com",
|
|
344
342
|
api_key: "<ph_project_token>"
|
|
@@ -346,17 +344,19 @@ config :my_app, :posthog,
|
|
|
346
344
|
|
|
347
345
|
application.ex
|
|
348
346
|
|
|
349
|
-
PostHog AI
|
|
350
|
-
|
|
351
347
|
```elixir
|
|
352
348
|
defmodule MyApp.Application do
|
|
353
349
|
use Application
|
|
350
|
+
|
|
354
351
|
def start(_type, _args) do
|
|
355
352
|
posthog_config = Application.fetch_env!(:my_app, :posthog) |> PostHog.Config.validate!()
|
|
353
|
+
|
|
356
354
|
:logger.add_handler(:posthog, PostHog.Handler, %{config: posthog_config})
|
|
355
|
+
|
|
357
356
|
children = [
|
|
358
357
|
{PostHog.Supervisor, posthog_config}
|
|
359
358
|
]
|
|
359
|
+
|
|
360
360
|
Supervisor.start_link(children, strategy: :one_for_one)
|
|
361
361
|
end
|
|
362
362
|
end
|
|
@@ -368,12 +368,11 @@ In even more advanced cases, you might want to interact with more than one PostH
|
|
|
368
368
|
|
|
369
369
|
config.exs
|
|
370
370
|
|
|
371
|
-
PostHog AI
|
|
372
|
-
|
|
373
371
|
```elixir
|
|
374
372
|
config :posthog,
|
|
375
373
|
api_host: "https://us.i.posthog.com",
|
|
376
374
|
api_key: "<ph_project_token>"
|
|
375
|
+
|
|
377
376
|
config :my_app, :another_posthog,
|
|
378
377
|
api_host: "https://us.i.posthog.com",
|
|
379
378
|
api_key: "a_different_project_api_key",
|
|
@@ -382,16 +381,17 @@ config :my_app, :another_posthog,
|
|
|
382
381
|
|
|
383
382
|
application.ex
|
|
384
383
|
|
|
385
|
-
PostHog AI
|
|
386
|
-
|
|
387
384
|
```elixir
|
|
388
385
|
defmodule MyApp.Application do
|
|
389
386
|
use Application
|
|
387
|
+
|
|
390
388
|
def start(_type, _args) do
|
|
391
389
|
posthog_config = Application.fetch_env!(:my_app, :another_posthog) |> PostHog.Config.validate!()
|
|
390
|
+
|
|
392
391
|
children = [
|
|
393
392
|
{PostHog.Supervisor, posthog_config}
|
|
394
393
|
]
|
|
394
|
+
|
|
395
395
|
Supervisor.start_link(children, strategy: :one_for_one)
|
|
396
396
|
end
|
|
397
397
|
end
|
|
@@ -401,8 +401,6 @@ Then, each function in the PostHog module accepts an optional first argument wit
|
|
|
401
401
|
|
|
402
402
|
Elixir
|
|
403
403
|
|
|
404
|
-
PostHog AI
|
|
405
|
-
|
|
406
404
|
```elixir
|
|
407
405
|
PostHog.capture(AnotherPostHog, "user_signed_up", %{distinct_id: "user123"})
|
|
408
406
|
```
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
|
|
2
2
|
|
|
3
|
-
# Flask
|
|
4
|
-
|
|
5
|
-
Copy page
|
|
6
|
-
|
|
7
|
-
# Flask - Docs
|
|
3
|
+
# Flask
|
|
8
4
|
|
|
9
5
|
PostHog makes it easy to get data about traffic and usage of your Flask app. Integrating PostHog enables analytics, custom events capture, feature flags, error tracking, and more.
|
|
10
6
|
|
|
@@ -20,16 +16,17 @@ Then, initialize PostHog where you'd like to use it. For example, here's how to
|
|
|
20
16
|
|
|
21
17
|
app.py
|
|
22
18
|
|
|
23
|
-
PostHog AI
|
|
24
|
-
|
|
25
19
|
```python
|
|
26
20
|
from flask import Flask
|
|
27
21
|
from posthog import Posthog
|
|
22
|
+
|
|
28
23
|
app = Flask(__name__)
|
|
24
|
+
|
|
29
25
|
posthog = Posthog(
|
|
30
26
|
'<ph_project_token>',
|
|
31
27
|
host='https://us.i.posthog.com',
|
|
32
28
|
)
|
|
29
|
+
|
|
33
30
|
@app.route('/api/dashboard', methods=['POST'])
|
|
34
31
|
def api_dashboard():
|
|
35
32
|
posthog.capture(
|
|
@@ -49,10 +46,9 @@ You can find your project token and instance address in [your project settings](
|
|
|
49
46
|
>
|
|
50
47
|
> Python
|
|
51
48
|
>
|
|
52
|
-
> PostHog AI
|
|
53
|
-
>
|
|
54
49
|
> ```python
|
|
55
50
|
> from posthog import new_context, identify_context, capture
|
|
51
|
+
>
|
|
56
52
|
> @app.get("/foo")
|
|
57
53
|
> def foo(current_user: User = Depends(get_current_user)):
|
|
58
54
|
> with new_context(): # Set context at the top of a route
|
|
@@ -73,24 +69,27 @@ Then read the incoming headers in your Flask request handler. Tracing headers ar
|
|
|
73
69
|
|
|
74
70
|
Python
|
|
75
71
|
|
|
76
|
-
PostHog AI
|
|
77
|
-
|
|
78
72
|
```python
|
|
79
73
|
from flask import request, session
|
|
80
74
|
from posthog import identify_context, set_context_session, tag
|
|
75
|
+
|
|
81
76
|
@app.route('/api/dashboard', methods=['POST'])
|
|
82
77
|
def api_dashboard():
|
|
83
78
|
with posthog.new_context(fresh=True):
|
|
84
79
|
distinct_id = session.get('user_id') or request.headers.get('X-POSTHOG-DISTINCT-ID')
|
|
85
80
|
if distinct_id:
|
|
86
81
|
identify_context(str(distinct_id))
|
|
82
|
+
|
|
87
83
|
session_id = request.headers.get('X-POSTHOG-SESSION-ID')
|
|
88
84
|
if session_id:
|
|
89
85
|
set_context_session(session_id)
|
|
86
|
+
|
|
90
87
|
tag('$current_url', request.url)
|
|
91
88
|
tag('$request_method', request.method)
|
|
92
89
|
tag('$request_path', request.path)
|
|
90
|
+
|
|
93
91
|
posthog.capture('dashboard_api_called')
|
|
92
|
+
|
|
94
93
|
return '', 204
|
|
95
94
|
```
|
|
96
95
|
|
|
@@ -102,18 +101,19 @@ Flask has built-in error handlers. This means PostHog’s default exception auto
|
|
|
102
101
|
|
|
103
102
|
Python
|
|
104
103
|
|
|
105
|
-
PostHog AI
|
|
106
|
-
|
|
107
104
|
```python
|
|
108
105
|
from flask import Flask, jsonify
|
|
109
106
|
from posthog import Posthog
|
|
107
|
+
|
|
110
108
|
app = Flask(__name__)
|
|
111
109
|
posthog = Posthog('<ph_project_token>', host='https://us.i.posthog.com')
|
|
110
|
+
|
|
112
111
|
@app.errorhandler(Exception)
|
|
113
112
|
def handle_exception(e):
|
|
114
113
|
# Capture methods, including capture_exception, return the UUID of the captured event,
|
|
115
114
|
# which you can use to find specific errors users encountered
|
|
116
115
|
event_id = posthog.capture_exception(e)
|
|
116
|
+
|
|
117
117
|
# You can show the event ID to your user, and ask them to include it in bug reports
|
|
118
118
|
response = jsonify({'message': str(e), 'error_id': event_id})
|
|
119
119
|
response.status_code = 500
|