vybekiit 0.7.0 → 0.7.2
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 +1697 -562
- package/dist/global-skills/add-ai/SKILL.md +1 -1
- package/dist/global-skills/add-analytics/SKILL.md +1 -1
- package/dist/global-skills/add-blog/SKILL.md +1 -1
- package/dist/global-skills/add-crud/SKILL.md +1 -1
- package/dist/global-skills/add-files/SKILL.md +1 -1
- package/dist/global-skills/add-images/SKILL.md +1 -1
- package/dist/global-skills/add-language/SKILL.md +1 -1
- package/dist/global-skills/add-notifications/SKILL.md +1 -1
- package/dist/global-skills/add-realtime/SKILL.md +1 -1
- package/dist/global-skills/add-route/SKILL.md +1 -1
- package/dist/global-skills/add-search/SKILL.md +1 -1
- package/dist/global-skills/add-signin/SKILL.md +1 -1
- package/dist/global-skills/add-teams/SKILL.md +1 -1
- package/dist/global-skills/add-upload/SKILL.md +1 -1
- package/dist/global-skills/aws-serverless/SKILL.md +44 -44
- package/dist/global-skills/aws-serverless/assets/powertools-handler.py +1 -2
- package/dist/global-skills/aws-serverless/references/api-gateway.md +470 -50
- package/dist/global-skills/aws-serverless/references/architecture.md +186 -47
- package/dist/global-skills/aws-serverless/references/concurrency.md +158 -44
- package/dist/global-skills/aws-serverless/references/deployment.md +1 -1
- package/dist/global-skills/aws-serverless/references/event-sources.md +391 -72
- package/dist/global-skills/aws-serverless/references/lambda.md +428 -69
- package/dist/global-skills/aws-serverless/references/orchestration.md +384 -65
- package/dist/global-skills/aws-serverless/references/production.md +415 -78
- package/dist/global-skills/aws-serverless/references/troubleshooting.md +626 -79
- package/dist/global-skills/back-up-my-code/SKILL.md +1 -1
- package/dist/global-skills/buy-domain/SKILL.md +1 -1
- package/dist/global-skills/check-safety/SKILL.md +1 -1
- package/dist/global-skills/configure-capabilities/SKILL.md +1 -1
- package/dist/global-skills/connect-account/SKILL.md +1 -1
- package/dist/global-skills/connect-account-backend/SKILL.md +1 -1
- package/dist/global-skills/design-my-data/SKILL.md +1 -1
- package/dist/global-skills/doctor/SKILL.md +1 -1
- package/dist/global-skills/feedback/SKILL.md +63 -0
- package/dist/global-skills/go-live/SKILL.md +1 -1
- package/dist/global-skills/harden/SKILL.md +1 -1
- package/dist/global-skills/instrument-feature-flags/references/usage.md +0 -35
- package/dist/global-skills/instrument-product-analytics/SKILL.md +1 -1
- package/dist/global-skills/instrument-product-analytics/references/android.md +0 -36
- package/dist/global-skills/instrument-product-analytics/references/configuration.md +0 -1
- package/dist/global-skills/instrument-product-analytics/references/flutter.md +0 -37
- package/dist/global-skills/instrument-product-analytics/references/posthog-python.md +2 -3
- package/dist/global-skills/instrument-product-analytics/references/usage.md +0 -35
- package/dist/global-skills/manifest.json +2 -1
- package/dist/global-skills/neon/SKILL.md +20 -27
- package/dist/global-skills/neon-ai-gateway/SKILL.md +2 -68
- package/dist/global-skills/neon-functions/SKILL.md +7 -7
- package/dist/global-skills/neon-object-storage/SKILL.md +2 -2
- package/dist/global-skills/neon-postgres/SKILL.md +5 -5
- package/dist/global-skills/neon-postgres-branches/SKILL.md +1 -1
- package/dist/global-skills/onboarding/SKILL.md +1 -1
- package/dist/global-skills/plan-my-idea/SKILL.md +1 -1
- package/dist/global-skills/publish-app/SKILL.md +1 -1
- package/dist/global-skills/publish-extension/SKILL.md +1 -1
- package/dist/global-skills/reset-password/SKILL.md +1 -1
- package/dist/global-skills/save-data/SKILL.md +1 -1
- package/dist/global-skills/setup-email/SKILL.md +1 -1
- package/dist/global-skills/setup-payments/SKILL.md +1 -1
- package/dist/global-skills/setup-sms/SKILL.md +1 -1
- package/dist/global-skills/sign-in-with-email-link/SKILL.md +1 -1
- package/dist/global-skills/sign-in-with-google/SKILL.md +1 -1
- package/dist/global-skills/sign-in-with-phone/SKILL.md +1 -1
- package/dist/global-skills/stripe-best-practices/SKILL.md +6 -11
- package/dist/global-skills/stripe-best-practices/references/billing.md +0 -5
- package/dist/global-skills/stripe-best-practices/references/payments.md +2 -4
- package/dist/global-skills/stripe-best-practices/references/tax.md +8 -78
- package/dist/global-skills/track-errors/SKILL.md +1 -1
- package/dist/global-skills/update-kit/SKILL.md +1 -1
- package/dist/global-skills/wire-auth/SKILL.md +1 -1
- package/dist/global-skills/wire-database/SKILL.md +1 -1
- package/dist/global-skills/wire-email/SKILL.md +1 -1
- package/dist/global-skills/wire-payments/SKILL.md +1 -1
- package/package.json +8 -8
- package/dist/global-skills/email-best-practices/.github/workflows/sync-skills.yml +0 -30
- package/dist/global-skills/email-best-practices/README.md +0 -63
- package/dist/global-skills/email-best-practices/references/accessibility.md +0 -189
- package/dist/global-skills/email-best-practices/references/compliance.md +0 -125
- package/dist/global-skills/email-best-practices/references/deliverability.md +0 -121
- package/dist/global-skills/email-best-practices/references/email-capture.md +0 -129
- package/dist/global-skills/email-best-practices/references/email-types.md +0 -173
- package/dist/global-skills/email-best-practices/references/list-management.md +0 -157
- package/dist/global-skills/email-best-practices/references/marketing-emails.md +0 -115
- package/dist/global-skills/email-best-practices/references/sending-reliability.md +0 -155
- package/dist/global-skills/email-best-practices/references/transactional-email-catalog.md +0 -418
- package/dist/global-skills/email-best-practices/references/transactional-emails.md +0 -92
- package/dist/global-skills/email-best-practices/references/webhooks-events.md +0 -167
- package/dist/global-skills/email-best-practices/tests/README.md +0 -35
- package/dist/global-skills/email-best-practices/tests/scenarios/01-spam-deliverability.md +0 -46
- package/dist/global-skills/email-best-practices/tests/scenarios/02-multi-region-compliance.md +0 -48
- package/dist/global-skills/email-best-practices/tests/scenarios/03-retry-idempotency.md +0 -36
- package/dist/global-skills/email-best-practices/tests/scenarios/04-webhook-bounce-handling.md +0 -52
- package/dist/global-skills/email-best-practices/tests/scenarios/05-new-saas-email-plan.md +0 -51
- package/dist/global-skills/neon-postgres/references/neon-sdk.md +0 -262
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: back-up-my-code
|
|
3
|
-
description: the builder's project is saved on GitHub so they never lose work. Use when the builder says something like: save my code; back up; put it on github.
|
|
3
|
+
description: "the builder's project is saved on GitHub so they never lose work. Use when the builder says something like: save my code; back up; put it on github."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: buy-domain
|
|
3
|
-
description: the app uses the builder's own web address instead of a temporary one. Use when the builder says something like: get a domain; buy a web address; my own url.
|
|
3
|
+
description: "the app uses the builder's own web address instead of a temporary one. Use when the builder says something like: get a domain; buy a web address; my own url."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: check-safety
|
|
3
|
-
description: confirm the app is protected end-to-end before ship — abuse, database safety, and every. Use when the builder says something like: am i ready to ship; is my app safe; did we cover security.
|
|
3
|
+
description: "confirm the app is protected end-to-end before ship — abuse, database safety, and every. Use when the builder says something like: am i ready to ship; is my app safe; did we cover security."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: configure-capabilities
|
|
3
|
-
description: the app has **only the permissions it needs** — the builder never thinks about Info.plist, Android manifest, or Expo plugins. Use when the builder says something like: camera; location permission; notifications permission.
|
|
3
|
+
description: "the app has **only the permissions it needs** — the builder never thinks about Info.plist, Android manifest, or Expo plugins. Use when the builder says something like: camera; location permission; notifications permission."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: connect-account
|
|
3
|
-
description: people can create accounts and sign in **inside the app**. Use when the builder says something like: sign in; log in; create accounts; add users; forgot password; reset password.
|
|
3
|
+
description: "people can create accounts and sign in **inside the app**. Use when the builder says something like: sign in; log in; create accounts; add users; forgot password; reset password."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: connect-account-backend
|
|
3
|
-
description: people can sign in from the phone app or extension. Use when the builder says something like: connect account backend.
|
|
3
|
+
description: "people can sign in from the phone app or extension. Use when the builder says something like: connect account backend."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design-my-data
|
|
3
|
-
description: figure out what the app should remember before wiring storage. Use when the builder says something like: design my database; what data do i need; what should my app remember.
|
|
3
|
+
description: "figure out what the app should remember before wiring storage. Use when the builder says something like: design my database; what data do i need; what should my app remember."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: doctor
|
|
3
|
-
description: find out why something isn't working and fix it — without making the builder debug. Use when the builder says something like: it's broken; nothing works; get an error; check my app.
|
|
3
|
+
description: "find out why something isn't working and fix it — without making the builder debug. Use when the builder says something like: it's broken; nothing works; get an error; check my app."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feedback
|
|
3
|
+
description: "send a private note about VybeKiit so the team can improve the kit. Use when the builder says something like: send feedback; report a kit bug; suggest a kit improvement; the kit is confusing."
|
|
4
|
+
metadata:
|
|
5
|
+
vybekiit-generated: buyer-skill-stub
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- vybekiit:generated:buyer-skill-stub -->
|
|
9
|
+
|
|
10
|
+
# Skill: feedback
|
|
11
|
+
|
|
12
|
+
**Goal:** send a private note about VybeKiit so the team can improve the kit.
|
|
13
|
+
|
|
14
|
+
**Contract:** one action at a time · verify-before-advance · plain language · translate errors · celebrate.
|
|
15
|
+
|
|
16
|
+
## Safety boundary
|
|
17
|
+
|
|
18
|
+
Include only:
|
|
19
|
+
|
|
20
|
+
- kind: `bug`, `idea`, or `confusing`
|
|
21
|
+
- the builder's short message
|
|
22
|
+
- a short agent-written summary
|
|
23
|
+
- up to 10 short steps that reproduce the problem
|
|
24
|
+
- template: `web`, `mobile`, `extension`, `backend`, `spa`, or `unknown`
|
|
25
|
+
- trigger: `explicit` or `automatic-suggestion`
|
|
26
|
+
- agent name/version, kit version, and operating system name
|
|
27
|
+
|
|
28
|
+
Exclude source code, command output, transcripts, stack traces, email, secrets, tokens, absolute paths,
|
|
29
|
+
machine names, and private issue links. Never send automatically.
|
|
30
|
+
|
|
31
|
+
## Steps
|
|
32
|
+
|
|
33
|
+
1. **Prepare one safe draft.** Write the allowlisted JSON fields to
|
|
34
|
+
`.vybekiit/feedback-drafts/<timestamp>.json`. Create the folder if needed.
|
|
35
|
+
**Verify:** read the draft back and check that every field is allowed and bounded.
|
|
36
|
+
|
|
37
|
+
2. **Show the preview.** Explain in plain language exactly what will be sent. Do not show removed
|
|
38
|
+
private details.
|
|
39
|
+
**Verify:** the builder can read the full safe preview.
|
|
40
|
+
|
|
41
|
+
3. **Ask once.** Ask: *"Send this private feedback report to the VybeKiit team now?"*
|
|
42
|
+
If the builder does not clearly agree, stop and keep the local draft.
|
|
43
|
+
**Verify:** a clear yes was received in this conversation.
|
|
44
|
+
|
|
45
|
+
4. **Send after approval.** Run:
|
|
46
|
+
`vybekiit feedback submit .vybekiit/feedback-drafts/<timestamp>.json --confirm`
|
|
47
|
+
GitHub may open once to confirm which paid buyer is reporting.
|
|
48
|
+
**Verify:** the command returns `{"ok":true,"reference":"FB-..."}`.
|
|
49
|
+
|
|
50
|
+
5. **Record progress.** Add the safe reference to the Decision log and mark feedback sent in the
|
|
51
|
+
Progress section. Do not record the private issue URL or report body.
|
|
52
|
+
**Verify:** `checklist.md` contains only the safe reference.
|
|
53
|
+
|
|
54
|
+
## If sending fails
|
|
55
|
+
|
|
56
|
+
Say: *"Your note was not sent, but the safe draft is still saved. I can try again when you are
|
|
57
|
+
ready."* Keep the draft. Do not fall back to `gh issue create`, `curl`, email, or another network
|
|
58
|
+
service.
|
|
59
|
+
|
|
60
|
+
## Definition of done
|
|
61
|
+
|
|
62
|
+
The builder approved the exact safe preview, the command returned a feedback reference, and
|
|
63
|
+
`checklist.md` records only that reference.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: go-live
|
|
3
|
-
description: the builder's app is online at a real web address that anyone can open. Use when the builder says something like: put it online; publish; make it live; ship it; deploy.
|
|
3
|
+
description: "the builder's app is online at a real web address that anyone can open. Use when the builder says something like: put it online; publish; make it live; ship it; deploy."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: harden
|
|
3
|
-
description: the builder's app is protected against the common attacks every app faces — someone. Use when the builder says something like: lock down; make it safe; protect from abuse.
|
|
3
|
+
description: "the builder's app is protected against the common attacks every app faces — someone. Use when the builder says something like: lock down; make it safe; protect from abuse."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -534,41 +534,6 @@ PostHogSDK.shared.captureFeatureView(flag: "flag-key", flagVariant: "variant-key
|
|
|
534
534
|
PostHogSDK.shared.captureFeatureInteraction(flag: "flag-key", flagVariant: "variant-key")
|
|
535
535
|
```
|
|
536
536
|
|
|
537
|
-
### Bootstrapping flags
|
|
538
|
-
|
|
539
|
-
Since there is a delay between initializing PostHog and fetching feature flags, feature flags are not always available immediately. This makes them unusable if you want to do something like redirecting a user to a different page based on a feature flag.
|
|
540
|
-
|
|
541
|
-
To have your feature flags available immediately, you can initialize PostHog with precomputed values until it has had a chance to fetch them. This is called bootstrapping. After the SDK fetches feature flags from PostHog, it will use those flag values instead of bootstrapped ones.
|
|
542
|
-
|
|
543
|
-
Set `config.bootstrap` before calling `setup()` to seed identity and flag values before the first `/flags` response (requires iOS SDK `3.66.0`+):
|
|
544
|
-
|
|
545
|
-
Swift
|
|
546
|
-
|
|
547
|
-
PostHog AI
|
|
548
|
-
|
|
549
|
-
```swift
|
|
550
|
-
let config = PostHogConfig(projectToken: "<ph_project_token>", host: "https://us.i.posthog.com")
|
|
551
|
-
config.bootstrap = PostHogBootstrapConfig(
|
|
552
|
-
distinctId: "distinct_id_of_your_user",
|
|
553
|
-
isIdentifiedId: true,
|
|
554
|
-
featureFlags: [
|
|
555
|
-
"flag-1": true,
|
|
556
|
-
"variant-flag": "control"
|
|
557
|
-
],
|
|
558
|
-
featureFlagPayloads: nil
|
|
559
|
-
)
|
|
560
|
-
PostHogSDK.shared.setup(config)
|
|
561
|
-
```
|
|
562
|
-
|
|
563
|
-
- **Bootstrapped identity applies to the first session.** Setting it before `setup()` means events captured synchronously during initialization (like `Application Installed`) carry your distinct ID instead of the SDK-generated UUID.
|
|
564
|
-
- An **anonymous** bootstrap (`isIdentifiedId: false`, the default) seeds the anonymous ID only when none is persisted yet. Once an anonymous ID exists on disk, or the user has been identified, it is ignored.
|
|
565
|
-
- An **identified** bootstrap (`isIdentifiedId: true`) is for a user you've already identified outside the SDK (for example, from a backend session token). On a fresh install it seeds the distinct ID and marks the user identified. On a returning install where an anonymous user already exists, it merges that user into the identified ID via `identify()`, which emits a `$identify` event during `setup()`. A *different*, already-identified user is left untouched. The identified ID never becomes the device ID.
|
|
566
|
-
- **Bootstrapped flags are served until the first `/flags` response, then replaced.** A complete `/flags` response takes over entirely, so bootstrapped-only keys don't persist past it. Only *enabled* flags are seeded: a `true` boolean or a non-empty variant string. A `false` or empty value is dropped, matching posthog-js. Seed payloads with the separate `featureFlagPayloads` option. Flag values and payloads must be JSON-serializable, or they're dropped. Bootstrapped flags are cleared on `reset()`.
|
|
567
|
-
|
|
568
|
-
The feature-flags-loaded signal fires as soon as bootstrapped flags are applied, so startup logic can read them immediately. These SDKs don't support the `sessionID` bootstrap option.
|
|
569
|
-
|
|
570
|
-
See the [bootstrapping guide](/docs/feature-flags/bootstrapping.md) for the cross-SDK overview.
|
|
571
|
-
|
|
572
537
|
## Experiments (A/B tests)
|
|
573
538
|
|
|
574
539
|
Since [experiments](/docs/experiments/start-here.md) use feature flags, the code for running an experiment is very similar to the feature flags code. See [adding experiment code](/docs/experiments/adding-experiment-code.md) for iOS examples.
|
|
@@ -65,7 +65,7 @@ STEP 9: Set up environment variables.
|
|
|
65
65
|
STEP 10: Verify and clean up.
|
|
66
66
|
- Check the project for errors. Look for type checking or build scripts in package.json.
|
|
67
67
|
- Ensure any components created were actually used.
|
|
68
|
-
- Run any linter or prettier-like scripts found in the package.json
|
|
68
|
+
- Run any linter or prettier-like scripts found in the package.json.
|
|
69
69
|
|
|
70
70
|
## Reference files
|
|
71
71
|
|
|
@@ -566,41 +566,6 @@ PostHog.captureFeatureView("flag-key", flagVariant = "variant-key")
|
|
|
566
566
|
PostHog.captureFeatureInteraction("flag-key", flagVariant = "variant-key")
|
|
567
567
|
```
|
|
568
568
|
|
|
569
|
-
### Bootstrapping flags
|
|
570
|
-
|
|
571
|
-
Since there is a delay between initializing PostHog and fetching feature flags, feature flags are not always available immediately. This makes them unusable if you want to do something like redirecting a user to a different page based on a feature flag.
|
|
572
|
-
|
|
573
|
-
To have your feature flags available immediately, you can initialize PostHog with precomputed values until it has had a chance to fetch them. This is called bootstrapping. After the SDK fetches feature flags from PostHog, it will use those flag values instead of bootstrapped ones.
|
|
574
|
-
|
|
575
|
-
Set `config.bootstrap` before calling `setup()` to seed identity and flag values before the first `/flags` response (requires Android SDK `3.55.0`+):
|
|
576
|
-
|
|
577
|
-
Kotlin
|
|
578
|
-
|
|
579
|
-
PostHog AI
|
|
580
|
-
|
|
581
|
-
```kotlin
|
|
582
|
-
import com.posthog.PostHogBootstrapConfig
|
|
583
|
-
val config = PostHogAndroidConfig(apiKey = POSTHOG_API_KEY, host = POSTHOG_HOST)
|
|
584
|
-
config.bootstrap = PostHogBootstrapConfig(
|
|
585
|
-
distinctId = "distinct_id_of_your_user",
|
|
586
|
-
isIdentifiedId = true,
|
|
587
|
-
featureFlags = mapOf(
|
|
588
|
-
"flag-1" to true,
|
|
589
|
-
"variant-flag" to "control"
|
|
590
|
-
)
|
|
591
|
-
)
|
|
592
|
-
PostHogAndroid.setup(this, config)
|
|
593
|
-
```
|
|
594
|
-
|
|
595
|
-
- **Bootstrapped identity applies to the first session.** Setting it before `setup()` means events captured synchronously during initialization (like `Application Installed`) carry your distinct ID instead of the SDK-generated UUID.
|
|
596
|
-
- An **anonymous** bootstrap (`isIdentifiedId: false`, the default) seeds the anonymous ID only when none is persisted yet. Once an anonymous ID exists on disk, or the user has been identified, it is ignored.
|
|
597
|
-
- An **identified** bootstrap (`isIdentifiedId: true`) is for a user you've already identified outside the SDK (for example, from a backend session token). On a fresh install it seeds the distinct ID and marks the user identified. On a returning install where an anonymous user already exists, it merges that user into the identified ID via `identify()`, which emits a `$identify` event during `setup()`. A *different*, already-identified user is left untouched. The identified ID never becomes the device ID.
|
|
598
|
-
- **Bootstrapped flags are served until the first `/flags` response, then replaced.** A complete `/flags` response takes over entirely, so bootstrapped-only keys don't persist past it. Only *enabled* flags are seeded: a `true` boolean or a non-empty variant string. A `false` or empty value is dropped, matching posthog-js. Seed payloads with the separate `featureFlagPayloads` option. Flag values and payloads must be JSON-serializable, or they're dropped. Bootstrapped flags are cleared on `reset()`.
|
|
599
|
-
|
|
600
|
-
The feature-flags-loaded signal fires as soon as bootstrapped flags are applied, so startup logic can read them immediately. These SDKs don't support the `sessionID` bootstrap option.
|
|
601
|
-
|
|
602
|
-
See the [bootstrapping guide](/docs/feature-flags/bootstrapping.md) for the cross-SDK overview.
|
|
603
|
-
|
|
604
569
|
## Experiments (A/B tests)
|
|
605
570
|
|
|
606
571
|
Since [experiments](/docs/experiments/start-here.md) use feature flags, the code for running an experiment is very similar to the feature flags code:
|
|
@@ -785,7 +750,6 @@ val config = PostHogAndroidConfig(
|
|
|
785
750
|
| errorTrackingConfig | PostHogErrorTrackingConfig() | Configures error tracking. autoCapture defaults to false; set it to true to autocapture uncaught exceptions when project settings also enable error tracking. |
|
|
786
751
|
| surveys | false | Internal/experimental native Android survey support. Native Android survey UI is not fully supported or documented yet. |
|
|
787
752
|
| surveysConfig | PostHogSurveysConfig() | Internal/experimental survey display delegate configuration, primarily for hybrid SDKs. |
|
|
788
|
-
| bootstrap | null | Seeds identity (distinctId, isIdentifiedId) and feature-flag state (featureFlags, featureFlagPayloads) before the first /flags response. Bootstrapped identity applies to the first session; only enabled flags are served, until the first /flags response replaces them. See [bootstrapping](/docs/feature-flags/bootstrapping.md#behavior-on-mobile-sdks). |
|
|
789
753
|
|
|
790
754
|
### Event filtering with `beforeSend`
|
|
791
755
|
|
|
@@ -289,7 +289,6 @@ The [`PostHogConfig` object](https://github.com/PostHog/posthog-ios/blob/main/Po
|
|
|
289
289
|
| reuseAnonymousIdType: BooleanDefault: false | Whether the SDK should reuse the anonymous Id between user changes. When enabled, a single Id will be used for all anonymous users on this device. |
|
|
290
290
|
| surveysType: BooleanDefault: true | Enable Surveys. |
|
|
291
291
|
| setBeforeSendType: FunctionDefault: undefined | Hook that allows for amending, sampling, or dropping events before they are sent to PostHog. |
|
|
292
|
-
| bootstrapType: PostHogBootstrapConfigDefault: nil | Seeds identity (distinctId, isIdentifiedId) and feature-flag state (featureFlags, featureFlagPayloads) before the first /flags response. Bootstrapped identity applies to the first session; only enabled flags are served, until the first /flags response replaces them. See [bootstrapping](/docs/feature-flags/bootstrapping.md#behavior-on-mobile-sdks). |
|
|
293
292
|
|
|
294
293
|
### Community questions
|
|
295
294
|
|
|
@@ -605,43 +605,6 @@ PostHog AI
|
|
|
605
605
|
await Posthog().reloadFeatureFlags();
|
|
606
606
|
```
|
|
607
607
|
|
|
608
|
-
### Bootstrapping flags
|
|
609
|
-
|
|
610
|
-
Since there is a delay between initializing PostHog and fetching feature flags, feature flags are not always available immediately. This makes them unusable if you want to do something like redirecting a user to a different page based on a feature flag.
|
|
611
|
-
|
|
612
|
-
To have your feature flags available immediately, you can initialize PostHog with precomputed values until it has had a chance to fetch them. This is called bootstrapping. After the SDK fetches feature flags from PostHog, it will use those flag values instead of bootstrapped ones.
|
|
613
|
-
|
|
614
|
-
Set `config.bootstrap` before calling `setup()` to seed identity and flag values before the first `/flags` response (requires the Flutter SDK `5.31.0`+):
|
|
615
|
-
|
|
616
|
-
Dart
|
|
617
|
-
|
|
618
|
-
PostHog AI
|
|
619
|
-
|
|
620
|
-
```dart
|
|
621
|
-
final config = PostHogConfig('<ph_project_token>');
|
|
622
|
-
config.host = 'https://us.i.posthog.com';
|
|
623
|
-
config.bootstrap = PostHogBootstrapConfig(
|
|
624
|
-
distinctId: 'distinct_id_of_your_user',
|
|
625
|
-
isIdentifiedId: true,
|
|
626
|
-
featureFlags: {
|
|
627
|
-
'flag-1': true,
|
|
628
|
-
'variant-flag': 'control',
|
|
629
|
-
},
|
|
630
|
-
);
|
|
631
|
-
await Posthog().setup(config);
|
|
632
|
-
```
|
|
633
|
-
|
|
634
|
-
The values are forwarded to the native iOS and Android SDKs:
|
|
635
|
-
|
|
636
|
-
- **Bootstrapped identity applies to the first session.** Setting it before `setup()` means events captured synchronously during initialization (like `Application Installed`) carry your distinct ID instead of the SDK-generated UUID.
|
|
637
|
-
- An **anonymous** bootstrap (`isIdentifiedId: false`, the default) seeds the anonymous ID only when none is persisted yet. Once an anonymous ID exists on disk, or the user has been identified, it is ignored.
|
|
638
|
-
- An **identified** bootstrap (`isIdentifiedId: true`) is for a user you've already identified outside the SDK (for example, from a backend session token). On a fresh install it seeds the distinct ID and marks the user identified. On a returning install where an anonymous user already exists, it merges that user into the identified ID via `identify()`, which emits a `$identify` event during `setup()`. A *different*, already-identified user is left untouched. The identified ID never becomes the device ID.
|
|
639
|
-
- **Bootstrapped flags are served until the first `/flags` response, then replaced.** A complete `/flags` response takes over entirely, so bootstrapped-only keys don't persist past it. Only *enabled* flags are seeded: a `true` boolean or a non-empty variant string. A `false` or empty value is dropped, matching posthog-js. Seed payloads with the separate `featureFlagPayloads` option. Flag values and payloads must be JSON-serializable, or they're dropped. Bootstrapped flags are cleared on `reset()`.
|
|
640
|
-
|
|
641
|
-
The feature-flags-loaded signal fires as soon as bootstrapped flags are applied, so startup logic can read them immediately. These SDKs don't support the `sessionID` bootstrap option.
|
|
642
|
-
|
|
643
|
-
On Flutter web, `bootstrap` is not applied, so configure it in your `posthog.init({...})` snippet instead. See the [bootstrapping guide](/docs/feature-flags/bootstrapping.md) for the cross-SDK overview.
|
|
644
|
-
|
|
645
608
|
### Setting properties for flag evaluation
|
|
646
609
|
|
|
647
610
|
If a flag targets person or group properties, you can send those properties inline with the next flag evaluation request instead of waiting for a `$set` event to be ingested. This avoids the race where a flag returns a stale value right after you set a property.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# PostHog Python SDK
|
|
2
2
|
|
|
3
|
-
**SDK Version:** 7.
|
|
3
|
+
**SDK Version:** 7.22.1
|
|
4
4
|
|
|
5
5
|
Integrate PostHog into any python application.
|
|
6
6
|
|
|
@@ -73,7 +73,6 @@ Initialize a new PostHog client instance.
|
|
|
73
73
|
- **`capture_compression`** (`CaptureCompression`) - Request-body compression for capture-v1 uploads (ignored in V0, which uses ``gzip``). ``CaptureCompression.GZIP`` or ``DEFLATE`` (or the strings ``"gzip"``/``"deflate"``). When omitted, the ``POSTHOG_CAPTURE_COMPRESSION`` env var is consulted, then the legacy ``gzip`` flag, then no compression.
|
|
74
74
|
- **`secret_key`** (`any`) - A Personal API Key or Project Secret API Key, used to authenticate local feature flag evaluation, remote config payloads, and decrypted flag payloads. Example:: posthog.Client(project_api_key, secret_key="phx_...")
|
|
75
75
|
- **`_dedicated_ai_endpoint`** (`bool`)
|
|
76
|
-
- **`metrics?`** (`dict`)
|
|
77
76
|
|
|
78
77
|
### Returns
|
|
79
78
|
|
|
@@ -260,7 +259,7 @@ posthog.capture('$pageview', distinct_id="distinct_id_of_the_user", properties={
|
|
|
260
259
|
|
|
261
260
|
**Release Tag:** public
|
|
262
261
|
|
|
263
|
-
Capture an exception for error tracking.
|
|
262
|
+
Capture an exception for error tracking.
|
|
264
263
|
|
|
265
264
|
### Parameters
|
|
266
265
|
|
|
@@ -534,41 +534,6 @@ PostHogSDK.shared.captureFeatureView(flag: "flag-key", flagVariant: "variant-key
|
|
|
534
534
|
PostHogSDK.shared.captureFeatureInteraction(flag: "flag-key", flagVariant: "variant-key")
|
|
535
535
|
```
|
|
536
536
|
|
|
537
|
-
### Bootstrapping flags
|
|
538
|
-
|
|
539
|
-
Since there is a delay between initializing PostHog and fetching feature flags, feature flags are not always available immediately. This makes them unusable if you want to do something like redirecting a user to a different page based on a feature flag.
|
|
540
|
-
|
|
541
|
-
To have your feature flags available immediately, you can initialize PostHog with precomputed values until it has had a chance to fetch them. This is called bootstrapping. After the SDK fetches feature flags from PostHog, it will use those flag values instead of bootstrapped ones.
|
|
542
|
-
|
|
543
|
-
Set `config.bootstrap` before calling `setup()` to seed identity and flag values before the first `/flags` response (requires iOS SDK `3.66.0`+):
|
|
544
|
-
|
|
545
|
-
Swift
|
|
546
|
-
|
|
547
|
-
PostHog AI
|
|
548
|
-
|
|
549
|
-
```swift
|
|
550
|
-
let config = PostHogConfig(projectToken: "<ph_project_token>", host: "https://us.i.posthog.com")
|
|
551
|
-
config.bootstrap = PostHogBootstrapConfig(
|
|
552
|
-
distinctId: "distinct_id_of_your_user",
|
|
553
|
-
isIdentifiedId: true,
|
|
554
|
-
featureFlags: [
|
|
555
|
-
"flag-1": true,
|
|
556
|
-
"variant-flag": "control"
|
|
557
|
-
],
|
|
558
|
-
featureFlagPayloads: nil
|
|
559
|
-
)
|
|
560
|
-
PostHogSDK.shared.setup(config)
|
|
561
|
-
```
|
|
562
|
-
|
|
563
|
-
- **Bootstrapped identity applies to the first session.** Setting it before `setup()` means events captured synchronously during initialization (like `Application Installed`) carry your distinct ID instead of the SDK-generated UUID.
|
|
564
|
-
- An **anonymous** bootstrap (`isIdentifiedId: false`, the default) seeds the anonymous ID only when none is persisted yet. Once an anonymous ID exists on disk, or the user has been identified, it is ignored.
|
|
565
|
-
- An **identified** bootstrap (`isIdentifiedId: true`) is for a user you've already identified outside the SDK (for example, from a backend session token). On a fresh install it seeds the distinct ID and marks the user identified. On a returning install where an anonymous user already exists, it merges that user into the identified ID via `identify()`, which emits a `$identify` event during `setup()`. A *different*, already-identified user is left untouched. The identified ID never becomes the device ID.
|
|
566
|
-
- **Bootstrapped flags are served until the first `/flags` response, then replaced.** A complete `/flags` response takes over entirely, so bootstrapped-only keys don't persist past it. Only *enabled* flags are seeded: a `true` boolean or a non-empty variant string. A `false` or empty value is dropped, matching posthog-js. Seed payloads with the separate `featureFlagPayloads` option. Flag values and payloads must be JSON-serializable, or they're dropped. Bootstrapped flags are cleared on `reset()`.
|
|
567
|
-
|
|
568
|
-
The feature-flags-loaded signal fires as soon as bootstrapped flags are applied, so startup logic can read them immediately. These SDKs don't support the `sessionID` bootstrap option.
|
|
569
|
-
|
|
570
|
-
See the [bootstrapping guide](/docs/feature-flags/bootstrapping.md) for the cross-SDK overview.
|
|
571
|
-
|
|
572
537
|
## Experiments (A/B tests)
|
|
573
538
|
|
|
574
539
|
Since [experiments](/docs/experiments/start-here.md) use feature flags, the code for running an experiment is very similar to the feature flags code. See [adding experiment code](/docs/experiments/adding-experiment-code.md) for iOS examples.
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
"expo-ui",
|
|
58
58
|
"expo-upgrade",
|
|
59
59
|
"expo-web-to-native",
|
|
60
|
+
"feedback",
|
|
60
61
|
"firebase-ai-logic-basics",
|
|
61
62
|
"firebase-app-hosting-basics",
|
|
62
63
|
"firebase-auth-basics",
|
|
@@ -121,5 +122,5 @@
|
|
|
121
122
|
"wrangler",
|
|
122
123
|
"xcode-project-setup"
|
|
123
124
|
],
|
|
124
|
-
"count":
|
|
125
|
+
"count": 121
|
|
125
126
|
}
|
|
@@ -2,15 +2,17 @@
|
|
|
2
2
|
name: neon
|
|
3
3
|
description: >-
|
|
4
4
|
Overview of the Neon platform for apps and agents, spanning Postgres, Auth,
|
|
5
|
-
|
|
6
|
-
Gateway. Use
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
Data API, and the new services: Object Storage, Compute Functions, and AI
|
|
6
|
+
Gateway. Use whenever "Neon" is mentioned for an overview of how to work with Neon and how to get started. Otherwise, the individual capabilities are the triggers: "object storage" or "S3-compatible
|
|
7
|
+
storage", "serverless functions", "background jobs", or
|
|
8
|
+
"run code near my database", "AI gateway", "LLM proxy",
|
|
9
|
+
"model routing", or "call an LLM" → AI Gateway; "database", "Postgres", or
|
|
10
|
+
"authentication" → Postgres and Auth.
|
|
9
11
|
---
|
|
10
12
|
|
|
11
13
|
# Neon
|
|
12
14
|
|
|
13
|
-
Important: Neon is no longer just a Serverless Postgres provider. Neon is the backend for apps and agents with Serverless Postgres, Auth, Functions,
|
|
15
|
+
Important: Neon is no longer just a Serverless Postgres provider. Neon is the backend for apps and agents with Serverless Postgres, Auth, Functions, Storage, and an AI Gateway: instant, branchable, serverless.
|
|
14
16
|
|
|
15
17
|
Use this skill as the starting point for anything Neon: get an overview of its capabilities, find your way around the Neon agent skills and documentation, and follow best practices for getting started and for branch-first development workflows.
|
|
16
18
|
|
|
@@ -20,15 +22,15 @@ Neon bundles several backend primitives for building apps and agents that all br
|
|
|
20
22
|
|
|
21
23
|
- **Postgres** — Serverless Postgres that scales and branches with your app. _Generally available._
|
|
22
24
|
- **Auth** — Managed authentication with users and sessions stored in Postgres. _Generally available._
|
|
23
|
-
- **Object Storage** — S3-compatible object storage that branches with your projects.
|
|
24
|
-
- **Functions** — Long-running serverless functions
|
|
25
|
-
- **AI Gateway** — One API for all frontier and open-source models, with routing, logging, and cost controls, powered by Databricks.
|
|
25
|
+
- **Object Storage** — S3-compatible object storage that branches with your projects. _Preview / early access._
|
|
26
|
+
- **Compute Functions** — Long-running serverless functions running close to your database — for WebSocket servers, long agent HTTP streams, APIs, and server-sent event servers. _Preview / early access._
|
|
27
|
+
- **AI Gateway** — One API for all frontier and open-source models, with routing, logging, and cost controls, powered by Databricks. _Preview / early access._
|
|
26
28
|
|
|
27
|
-
###
|
|
29
|
+
### Preview Service Availability
|
|
28
30
|
|
|
29
|
-
Object Storage, Functions, and AI Gateway are
|
|
31
|
+
Object Storage, Compute Functions, and AI Gateway are preview (early access) features.
|
|
30
32
|
|
|
31
|
-
|
|
33
|
+
Early access features are only available on net-new projects created in the `us-east-2` region; they cannot be enabled on existing projects for now. Before guiding a user through any of these services, confirm they are working with a new project in `us-east-2`. If not, they will need to create a new project in that region. Then confirm the user already has early access; otherwise, point them to the private beta sign-up: https://neon.com/blog/were-building-backends#access.
|
|
32
34
|
|
|
33
35
|
## Architecture: how Neon fits
|
|
34
36
|
|
|
@@ -72,7 +74,7 @@ Common doc URLs are organized in the topic links below. If you need a page not l
|
|
|
72
74
|
- Choosing or creating the right branch type for dev, preview, test, or CI workflows → `neon-postgres-branches`.
|
|
73
75
|
- Storing and serving files (uploads, images, blobs) that branch with the database → `neon-object-storage`.
|
|
74
76
|
- Deploying long-running or streaming serverless functions — APIs, agents, SSE/WebSocket servers — next to the database → `neon-functions`.
|
|
75
|
-
- Calling an LLM or routing across model providers with one credential
|
|
77
|
+
- Calling an LLM or routing across model providers with one credential → `neon-ai-gateway`.
|
|
76
78
|
- Provisioning instant, claimable temporary Postgres databases (for example, one per end user or demo) → `claimable-postgres`.
|
|
77
79
|
- Diagnosing or fixing excessive Postgres egress (network data-transfer) costs in a codebase → `neon-postgres-egress-optimizer`.
|
|
78
80
|
|
|
@@ -96,8 +98,6 @@ For example, to install the object storage skill globally for a specific agent w
|
|
|
96
98
|
npx skills add neondatabase/agent-skills -s neon-object-storage -g -y -a <agent-name>
|
|
97
99
|
```
|
|
98
100
|
|
|
99
|
-
You should also make sure the skills are up to date. You can run the same command or replace `add` with `update` to update all Neon skills.
|
|
100
|
-
|
|
101
101
|
## Getting Started with Neon
|
|
102
102
|
|
|
103
103
|
Use this section when guiding a user through first-time Neon setup, or when adding a new Neon service (Auth, object storage, functions, and so on) to a project that is already onboarded (for example, one already using Neon Postgres).
|
|
@@ -129,7 +129,7 @@ If `init` is not suitable, the individual steps can be run non-interactively, us
|
|
|
129
129
|
- **MCP server:** `npx -y add-mcp https://mcp.neon.tech/mcp -g -n Neon -y -a <agent-name>`
|
|
130
130
|
- **Agent skill:** `npx skills add neondatabase/agent-skills --skill neon-postgres --skill neon --agent <agent-name> -y`
|
|
131
131
|
|
|
132
|
-
Prefer the CLI over the MCP server unless the user instructs otherwise, since it provides more capabilities, including deploying Neon Functions. For full CLI installation options, see https://neon.com/docs/cli
|
|
132
|
+
Prefer the CLI over the MCP server unless the user instructs otherwise, since it provides more capabilities, including deploying Neon Functions. For full CLI installation options, see https://neon.com/docs/reference/cli-install.md
|
|
133
133
|
|
|
134
134
|
### Setup Flow
|
|
135
135
|
|
|
@@ -178,7 +178,7 @@ If env vars are injected at runtime instead of written to disk — or you simply
|
|
|
178
178
|
- `neon-env run -- <your dev command>` (from `@neon/env`) fetches the branch's vars from your `neon.ts` and injects them into the child process at runtime — no `.env` file needed. This is the runtime counterpart to the on-disk `env pull`.
|
|
179
179
|
- `neon-env export` (from `@neon/env`) prints the branch's env to stdout as dotenv lines or, with `--format json`, JSON — for piping into another env manager rather than running a command. For example, [varlock](https://varlock.dev) can bulk-load it from a `.env.schema` with `@setValuesBulk(exec("neon-env export --format json"), format=json)`.
|
|
180
180
|
- `fetchEnv` from `@neon/env` is the programmatic version of the same thing: resolve the branch's env in code at runtime instead of shelling out to `neon-env run`.
|
|
181
|
-
- `neon dev` injects the same vars into your local dev server — it's part of Neon Functions local development (a
|
|
181
|
+
- `neon dev` injects the same vars into your local dev server — it's part of Neon Functions local development (a private preview feature).
|
|
182
182
|
|
|
183
183
|
When an agent should not write a local `.env`, instruct it (for example in your `AGENTS.md`) to run `neon checkout <branch> --no-env-pull` and rely on runtime injection.
|
|
184
184
|
|
|
@@ -212,13 +212,9 @@ export default defineConfig({
|
|
|
212
212
|
auth: true,
|
|
213
213
|
dataApi: true,
|
|
214
214
|
preview: {
|
|
215
|
-
functions: {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
buckets: {
|
|
219
|
-
/* ... */
|
|
220
|
-
}, // see the neon-object-storage skill
|
|
221
|
-
aiGateway: true, // see the neon-ai-gateway skill
|
|
215
|
+
functions: { /* ... */ }, // see the neon-functions skill
|
|
216
|
+
buckets: { /* ... */ }, // see the neon-object-storage skill
|
|
217
|
+
aiGateway: true, // see the neon-ai-gateway skill
|
|
222
218
|
},
|
|
223
219
|
});
|
|
224
220
|
```
|
|
@@ -324,10 +320,7 @@ export default defineConfig({ auth: true, dataApi: true });
|
|
|
324
320
|
|
|
325
321
|
// 2. Or verify a third-party IdP instead of Neon Auth:
|
|
326
322
|
export default defineConfig({
|
|
327
|
-
dataApi: {
|
|
328
|
-
authProvider: "external",
|
|
329
|
-
jwksUrl: "https://your-idp/.well-known/jwks.json",
|
|
330
|
-
},
|
|
323
|
+
dataApi: { authProvider: "external", jwksUrl: "https://your-idp/.well-known/jwks.json" },
|
|
331
324
|
});
|
|
332
325
|
```
|
|
333
326
|
|
|
@@ -16,7 +16,7 @@ description: >-
|
|
|
16
16
|
|
|
17
17
|
# Neon AI Gateway
|
|
18
18
|
|
|
19
|
-
This is a
|
|
19
|
+
This is a preview feature and only available in `us-east-2`. The Neon AI Gateway is the LLM inference layer built into your Neon branch: one API and one Neon credential give you access to frontier and open-source models from Anthropic, OpenAI, Google, Meta, Alibaba, DeepSeek, and Databricks — powered by Databricks. Your existing OpenAI/Anthropic/Gemini SDK works by changing only the base URL.
|
|
20
20
|
|
|
21
21
|
Use this skill to help the user send model calls through the gateway, wire it into the AI SDK or Mastra, and switch providers without rewiring code. Deliver a working inference request, a configured agent, or a precise answer from the official Neon docs.
|
|
22
22
|
|
|
@@ -215,75 +215,9 @@ Use a model's catalog ID directly in the `model` field — e.g. `claude-sonnet-4
|
|
|
215
215
|
- **models.dev Neon provider page: https://models.dev/providers/neon** — the canonical, always-current list of the Neon provider's model IDs and their underlying models. The machine-readable catalog is at https://models.dev/api.json (the `neon` key).
|
|
216
216
|
- **Models doc:** see Further reading.
|
|
217
217
|
|
|
218
|
-
## List available models at runtime (`/v1/models`)
|
|
219
|
-
|
|
220
|
-
The gateway also exposes the model catalog **live from your own branch endpoint**, so an app or agent can discover exactly which models this branch serves without hard-coding the list. It is an OpenAI-compatible list endpoint, served **only on the unified dialect** (`/v1`):
|
|
221
|
-
|
|
222
|
-
```bash
|
|
223
|
-
curl "$NEON_AI_GATEWAY_BASE_URL/v1/models" \
|
|
224
|
-
-H "Authorization: Bearer $NEON_AI_GATEWAY_TOKEN"
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
- `GET ${NEON_AI_GATEWAY_BASE_URL}/v1/models` → **200**
|
|
228
|
-
- `GET ${NEON_AI_GATEWAY_BASE_URL}/openai/v1/models` → **404** (not served on the Responses dialect — use `/v1`)
|
|
229
|
-
|
|
230
|
-
**Getting the credentials for the request.** Both values come from the same branch-scoped Neon credential the gateway uses everywhere else — you never manage a provider key:
|
|
231
|
-
|
|
232
|
-
- **Provision via `neon.ts` (recommended).** Enable `preview.aiGateway` in `neon.ts` and run `neon deploy` (or `neon config apply`). Provisioning, `neon link`, and `neon checkout` pull `NEON_AI_GATEWAY_TOKEN` + `NEON_AI_GATEWAY_BASE_URL` into your local `.env.local`; inside a deployed Neon Function they're injected automatically. See **Setup** and **Environment variables** above.
|
|
233
|
-
- **Pull into the environment via CLI.** On a branch that already has the gateway enabled, `neon env pull` writes the two vars to `.env`/`.env.local`, or `neon-env run -- <cmd>` injects them at runtime without a file.
|
|
234
|
-
- **Provision via the Console UI.** Enable the AI Gateway on the branch in the Neon Console and copy the branch's gateway base URL and a Neon credential (token) from the project's connection/credentials view.
|
|
235
|
-
|
|
236
|
-
Any Neon credential (`nt_live_...`) valid for the branch works as the bearer token; `NEON_AI_GATEWAY_BASE_URL` is the bare branch host (no path).
|
|
237
|
-
|
|
238
|
-
**Response shape** — OpenAI/OpenRouter-compatible list:
|
|
239
|
-
|
|
240
|
-
```jsonc
|
|
241
|
-
{
|
|
242
|
-
"object": "list",
|
|
243
|
-
"data": [
|
|
244
|
-
{
|
|
245
|
-
"id": "claude-sonnet-4-6", // catalog model ID — use directly in the `model` field
|
|
246
|
-
"canonical_slug": "claude-sonnet-4-6",
|
|
247
|
-
"name": "Claude Sonnet 4.6", // human-readable display name
|
|
248
|
-
"object": "model",
|
|
249
|
-
"owned_by": "anthropic", // anthropic | openai | google | meta | alibaba | databricks
|
|
250
|
-
"created": 0,
|
|
251
|
-
"enabled": true,
|
|
252
|
-
"context_length": null,
|
|
253
|
-
"architecture": {
|
|
254
|
-
"modality": "text->text",
|
|
255
|
-
"input_modalities": ["text"],
|
|
256
|
-
"output_modalities": ["text"],
|
|
257
|
-
"tokenizer": "Claude", // Claude | Gemini | GPT | "" (empty for open-source)
|
|
258
|
-
"instruct_type": null
|
|
259
|
-
},
|
|
260
|
-
"top_provider": {
|
|
261
|
-
"is_moderated": false,
|
|
262
|
-
"context_length": null,
|
|
263
|
-
"max_completion_tokens": null
|
|
264
|
-
},
|
|
265
|
-
"pricing": null,
|
|
266
|
-
"per_request_limits": null
|
|
267
|
-
}
|
|
268
|
-
// ... one entry per model in the branch's catalog
|
|
269
|
-
]
|
|
270
|
-
}
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
> Note: `context_length`, `pricing`, and `per_request_limits` are currently `null` and `created` is `0` for every entry — for context windows, pricing, and capabilities use the models.dev catalog above. Use `/v1/models` when you need the live, branch-scoped list of servable model IDs (e.g. to populate a model picker or validate a `model` before a request).
|
|
274
|
-
|
|
275
218
|
## Availability
|
|
276
219
|
|
|
277
|
-
The AI Gateway is a
|
|
278
|
-
|
|
279
|
-
### Enabling the gateway: plan and model-catalog gating
|
|
280
|
-
|
|
281
|
-
The AI Gateway is credential-gated rather than a provisioning step, but two plan/beta limits gate it — one blocks provisioning, the other only trims the catalog — and the CLI surfaces each:
|
|
282
|
-
|
|
283
|
-
- **Free plan → provisioning is blocked.** `neon config apply` / `deploy` and `neon checkout` **refuse** to enable the gateway on a Free plan (the gateway can't serve requests there), with a friendly "upgrade to a paid plan, or remove `preview.aiGateway`" error. A dry-run `neon config plan` and `neon env pull` don't provision, so they only **warn**. So: to use the gateway the project's account must be on a paid Neon plan.
|
|
284
|
-
- **Paid plan with a reduced model catalog.** On a paid plan the gateway provisions and serves, but during the beta an account can start with a trimmed catalog — some flagship models (e.g. Anthropic Opus, OpenAI Codex / `*-pro`) are missing from `GET /v1/models`. This is expected; `neon env pull` (and the env pull bundled into `apply` / `deploy` / `checkout`) warns and links the user to their branch's AI Gateway page in the Neon Console (`https://console.neon.tech/app/projects/<project-id>/branches/<branch-id>/ai-gateway`) to request access to more models. Verify what's actually available for the branch by reading `/v1/models` (see the models section above) rather than assuming the full catalog.
|
|
285
|
-
|
|
286
|
-
When helping a user debug "the gateway isn't working" or "a model is missing", use `/v1/models` plus the account's plan to distinguish these two cases — a Free plan blocks provisioning entirely, while a reduced catalog on a paid plan just needs a model-access request.
|
|
220
|
+
The AI Gateway is a preview (early access) feature available only on new projects in the `us-east-2` region; it can't be enabled on existing projects. Foundation model access requires a paid Neon plan. Confirm the user's project is a new project in `us-east-2`. If the user does not yet have access, point them to the private beta sign-up: https://neon.com/blog/were-building-backends#access
|
|
287
221
|
|
|
288
222
|
## Neon Documentation
|
|
289
223
|
|