vybekiit 0.7.29 → 0.7.33
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 +3407 -2769
- package/dist/global-guidance/language.md +7 -102
- package/dist/global-skills/add-ai/SKILL.md +7 -8
- package/dist/global-skills/add-analytics/SKILL.md +4 -7
- package/dist/global-skills/add-app-clip/SKILL.md +1 -0
- package/dist/global-skills/add-blog/SKILL.md +4 -7
- package/dist/global-skills/add-files/SKILL.md +4 -7
- package/dist/global-skills/add-images/SKILL.md +4 -7
- package/dist/global-skills/add-language/SKILL.md +5 -8
- package/dist/global-skills/add-notifications/SKILL.md +4 -7
- package/dist/global-skills/add-realtime/SKILL.md +4 -7
- package/dist/global-skills/add-search/SKILL.md +4 -7
- package/dist/global-skills/add-signin/SKILL.md +4 -8
- package/dist/global-skills/add-teams/SKILL.md +4 -7
- package/dist/global-skills/aws-cdk/SKILL.md +1 -0
- package/dist/global-skills/aws-cloudformation/SKILL.md +1 -0
- package/dist/global-skills/aws-serverless/SKILL.md +169 -32
- package/dist/global-skills/aws-serverless/references/api-gateway.md +17 -0
- package/dist/global-skills/aws-serverless/references/architecture.md +9 -13
- package/dist/global-skills/aws-serverless/references/compute-decision-edge-cases.md +77 -0
- package/dist/global-skills/aws-serverless/references/lambda.md +3 -3
- package/dist/global-skills/aws-serverless/references/orchestration.md +46 -20
- package/dist/global-skills/aws-serverless/references/production.md +1 -1
- package/dist/global-skills/better-auth-best-practices/SKILL.md +1 -0
- package/dist/global-skills/better-auth-security-best-practices/SKILL.md +1 -0
- package/dist/global-skills/building-native-ui/SKILL.md +1 -0
- package/dist/global-skills/buy-domain/SKILL.md +4 -7
- package/dist/global-skills/check-safety/SKILL.md +5 -8
- package/dist/global-skills/claimable-postgres/SKILL.md +1 -0
- package/dist/global-skills/configure-capabilities/SKILL.md +1 -1
- package/dist/global-skills/connect-account/SKILL.md +1 -1
- package/dist/global-skills/create-auth-skill/SKILL.md +1 -0
- package/dist/global-skills/doctor/SKILL.md +1 -1
- package/dist/global-skills/eas-app-stores/SKILL.md +2 -1
- package/dist/global-skills/eas-app-stores/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-hosting/SKILL.md +2 -1
- package/dist/global-skills/eas-hosting/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-observe/SKILL.md +2 -1
- package/dist/global-skills/eas-observe/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-simulator/SKILL.md +24 -16
- package/dist/global-skills/eas-simulator/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-simulator/references/controllers.md +11 -7
- package/dist/global-skills/eas-simulator/references/logs-and-crashes.md +101 -0
- package/dist/global-skills/eas-simulator/references/run-your-app.md +8 -8
- package/dist/global-skills/eas-simulator/references/troubleshooting.md +14 -6
- package/dist/global-skills/eas-update/SKILL.md +2 -1
- package/dist/global-skills/eas-update/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-update-insights/SKILL.md +2 -1
- package/dist/global-skills/eas-update-insights/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-workflows/SKILL.md +2 -1
- package/dist/global-skills/eas-workflows/agents/openai.yaml +1 -1
- package/dist/global-skills/email-best-practices/SKILL.md +1 -0
- package/dist/global-skills/email-best-practices/references/sending-reliability.md +17 -22
- package/dist/global-skills/expo-animation/SKILL.md +2 -1
- package/dist/global-skills/expo-api-routes/SKILL.md +1 -0
- package/dist/global-skills/expo-app-clip/SKILL.md +2 -1
- package/dist/global-skills/expo-brownfield/SKILL.md +2 -1
- package/dist/global-skills/expo-cicd-workflows/SKILL.md +1 -0
- package/dist/global-skills/expo-data-fetching/SKILL.md +2 -1
- package/dist/global-skills/expo-deployment/SKILL.md +1 -0
- package/dist/global-skills/expo-design-system/SKILL.md +2 -1
- package/dist/global-skills/expo-dev-client/SKILL.md +2 -1
- package/dist/global-skills/expo-dom/SKILL.md +2 -1
- package/dist/global-skills/expo-examples/SKILL.md +2 -1
- package/dist/global-skills/expo-migrate-module/SKILL.md +2 -1
- package/dist/global-skills/expo-module/SKILL.md +2 -1
- package/dist/global-skills/expo-native-ui/SKILL.md +2 -1
- package/dist/global-skills/expo-observe/SKILL.md +1 -0
- package/dist/global-skills/expo-overview/SKILL.md +2 -1
- package/dist/global-skills/expo-project-structure/SKILL.md +2 -1
- package/dist/global-skills/expo-router/SKILL.md +2 -1
- package/dist/global-skills/expo-skill-eval/SKILL.md +1 -0
- package/dist/global-skills/expo-skill-feedback/SKILL.md +1 -0
- package/dist/global-skills/expo-tailwind-setup/SKILL.md +1 -0
- package/dist/global-skills/expo-ui/SKILL.md +2 -1
- package/dist/global-skills/expo-upgrade/SKILL.md +2 -1
- package/dist/global-skills/expo-web-to-native/SKILL.md +2 -1
- package/dist/global-skills/extension-to-functions-codebase/SKILL.md +2 -0
- package/dist/global-skills/firebase-ai-logic-basics/SKILL.md +162 -76
- package/dist/global-skills/firebase-ai-logic-basics/references/flutter_setup.md +37 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/ios_setup.md +97 -3
- package/dist/global-skills/firebase-ai-logic-basics/references/tts_generation.md +676 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_android.md +88 -3
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_web.md +91 -3
- package/dist/global-skills/firebase-app-hosting-basics/SKILL.md +6 -1
- package/dist/global-skills/firebase-auth-basics/SKILL.md +12 -6
- package/dist/global-skills/firebase-auth-basics/references/client_sdk_android.md +61 -23
- 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 +22 -19
- package/dist/global-skills/firebase-auth-basics/references/security_rules.md +2 -2
- package/dist/global-skills/firebase-basics/SKILL.md +8 -2
- package/dist/global-skills/firebase-basics/references/android_setup.md +229 -23
- package/dist/global-skills/firebase-basics/references/ios_setup.md +57 -0
- package/dist/global-skills/firebase-basics/references/web_setup.md +52 -0
- package/dist/global-skills/firebase-crashlytics/SKILL.md +2 -0
- package/dist/global-skills/firebase-crashlytics/references/android_setup.md +99 -71
- package/dist/global-skills/firebase-crashlytics/references/ios_setup.md +1 -0
- package/dist/global-skills/firebase-data-connect/SKILL.md +2 -0
- package/dist/global-skills/firebase-data-connect/reference/config.md +8 -8
- package/dist/global-skills/firebase-data-connect/reference/realtime.md +4 -1
- package/dist/global-skills/firebase-data-connect/reference/sdk_android.md +84 -29
- package/dist/global-skills/firebase-data-connect/reference/sdk_web.md +8 -3
- package/dist/global-skills/firebase-data-connect/reference/security.md +13 -13
- package/dist/global-skills/firebase-firestore/SKILL.md +18 -7
- package/dist/global-skills/firebase-firestore/references/enterprise/android_sdk_usage.md +47 -21
- package/dist/global-skills/firebase-firestore/references/enterprise/indexes.md +2 -1
- package/dist/global-skills/firebase-firestore/references/standard/android_sdk_usage.md +63 -27
- package/dist/global-skills/firebase-firestore/references/standard/indexes.md +2 -1
- package/dist/global-skills/firebase-hosting-basics/SKILL.md +2 -0
- package/dist/global-skills/firebase-remote-config-basics/SKILL.md +3 -1
- package/dist/global-skills/firebase-remote-config-basics/references/android_setup.md +83 -92
- package/dist/global-skills/firebase-security-rules-auditor/SKILL.md +8 -6
- package/dist/global-skills/firestore-rules-creation/SKILL.md +23 -10
- package/dist/global-skills/go-live/SKILL.md +7 -7
- package/dist/global-skills/harden/SKILL.md +7 -10
- package/dist/global-skills/instrument-feature-flags/SKILL.md +1 -0
- package/dist/global-skills/instrument-product-analytics/SKILL.md +1 -0
- package/dist/global-skills/manifest.json +2 -1
- package/dist/global-skills/mongodb-atlas-stream-processing/SKILL.md +1 -0
- package/dist/global-skills/mongodb-connection/SKILL.md +1 -0
- package/dist/global-skills/mongodb-mcp-setup/SKILL.md +1 -0
- package/dist/global-skills/mongodb-natural-language-querying/SKILL.md +1 -0
- package/dist/global-skills/mongodb-qe-size-estimation/SKILL.md +224 -0
- package/dist/global-skills/mongodb-query-optimizer/SKILL.md +1 -0
- package/dist/global-skills/mongodb-schema-design/SKILL.md +1 -0
- package/dist/global-skills/mongodb-search-and-ai/SKILL.md +1 -0
- package/dist/global-skills/native-data-fetching/SKILL.md +1 -0
- package/dist/global-skills/neon/SKILL.md +34 -5
- package/dist/global-skills/neon-ai-gateway/SKILL.md +44 -14
- package/dist/global-skills/neon-auth/SKILL.md +1 -0
- package/dist/global-skills/neon-functions/SKILL.md +12 -0
- package/dist/global-skills/neon-functions/references/native-binaries.md +188 -0
- package/dist/global-skills/neon-object-storage/SKILL.md +1 -0
- package/dist/global-skills/neon-postgres/SKILL.md +2 -1
- package/dist/global-skills/neon-postgres/references/full-text-search.md +27 -17
- package/dist/global-skills/neon-postgres/references/hybrid-search.md +19 -15
- package/dist/global-skills/neon-postgres/references/lakebase-search-drizzle.md +99 -14
- package/dist/global-skills/neon-postgres/references/vector-search.md +93 -10
- package/dist/global-skills/neon-postgres-branches/SKILL.md +1 -0
- package/dist/global-skills/neon-postgres-egress-optimizer/SKILL.md +1 -0
- package/dist/global-skills/onboarding/SKILL.md +14 -13
- 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/resend/SKILL.md +5 -15
- package/dist/global-skills/resend/references/domains.md +1 -1
- package/dist/global-skills/resend/references/installation.md +3 -3
- package/dist/global-skills/resend/references/sending/best-practices.md +3 -3
- package/dist/global-skills/resend/references/sending/single-email-examples.md +3 -3
- package/dist/global-skills/resend/references/webhooks.md +2 -0
- package/dist/global-skills/reset-password/SKILL.md +4 -6
- package/dist/global-skills/save-data/SKILL.md +3 -0
- package/dist/global-skills/sentry-sdk-setup/SKILL.md +1 -0
- package/dist/global-skills/sentry-workflow/SKILL.md +1 -0
- package/dist/global-skills/setup-email/SKILL.md +7 -8
- package/dist/global-skills/setup-payments/SKILL.md +10 -12
- package/dist/global-skills/setup-sms/SKILL.md +1 -1
- package/dist/global-skills/sign-in-with-email-link/SKILL.md +4 -6
- package/dist/global-skills/sign-in-with-google/SKILL.md +14 -13
- package/dist/global-skills/sign-in-with-phone/SKILL.md +5 -7
- package/dist/global-skills/stripe-best-practices/SKILL.md +20 -19
- package/dist/global-skills/stripe-best-practices/references/billing.md +2 -0
- package/dist/global-skills/stripe-best-practices/references/payments.md +1 -1
- package/dist/global-skills/stripe-best-practices/references/tax.md +27 -15
- package/dist/global-skills/supabase/CHANGELOG.md +19 -0
- package/dist/global-skills/supabase/SKILL.md +1 -0
- package/dist/global-skills/supabase-postgres-best-practices/SKILL.md +1 -0
- package/dist/global-skills/track-errors/SKILL.md +12 -13
- package/dist/global-skills/update-kit/SKILL.md +1 -1
- package/dist/global-skills/upgrading-expo/SKILL.md +1 -0
- package/dist/global-skills/use-dom/SKILL.md +1 -0
- package/dist/global-skills/use-railway/SKILL.md +9 -8
- package/dist/global-skills/use-railway/references/configure.md +34 -1
- package/dist/global-skills/use-railway/references/iac.md +3 -0
- package/dist/global-skills/use-railway/references/tracing.md +97 -44
- package/dist/global-skills/vercel-composition-patterns/SKILL.md +1 -0
- package/dist/global-skills/vercel-react-best-practices/SKILL.md +1 -0
- package/dist/global-skills/vybekiitReferences/backend/AGENTS.md +11 -3
- package/dist/global-skills/vybekiitReferences/backend/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/backend/agent/goal-routes.json +229 -0
- package/dist/global-skills/vybekiitReferences/backend/agent/mcp-setup.md +11 -2
- package/dist/global-skills/vybekiitReferences/backend/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/backend/agent/tech-references.md +1 -1
- package/dist/global-skills/vybekiitReferences/backend/language.md +7 -102
- package/dist/global-skills/vybekiitReferences/backend/platform-skills/deploy-railway-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/backend/platform-skills/extend-capabilities-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/backend/platform-skills/mongodb-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/AGENTS.md +11 -3
- package/dist/global-skills/vybekiitReferences/extension/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/agent/goal-routes.json +239 -0
- package/dist/global-skills/vybekiitReferences/extension/agent/mcp-setup.md +10 -1
- package/dist/global-skills/vybekiitReferences/extension/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/agent/tech-references.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/agent/ui-sources.md +11 -8
- package/dist/global-skills/vybekiitReferences/extension/language.md +7 -92
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/browser-automation-vybekiit.md +9 -1
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/env-secrets-vybekiit.md +1 -0
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/extend-capabilities-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/observability-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/sentry-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/AGENTS.md +27 -12
- package/dist/global-skills/vybekiitReferences/mobile/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/agent/goal-routes.json +279 -0
- package/dist/global-skills/vybekiitReferences/mobile/agent/mcp-setup.md +10 -1
- package/dist/global-skills/vybekiitReferences/mobile/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/agent/tech-references.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/agent/ui-sources.mobile.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/language.md +7 -93
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/env-secrets-vybekiit.md +1 -0
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/extend-capabilities-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/i18n-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/observability-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/sentry-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/ui-port-from-web-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/spa/AGENTS.md +11 -3
- package/dist/global-skills/vybekiitReferences/spa/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/spa/agent/goal-routes.json +267 -0
- package/dist/global-skills/vybekiitReferences/spa/agent/mcp-setup.md +10 -1
- package/dist/global-skills/vybekiitReferences/spa/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/spa/agent/ui-sources.md +11 -8
- package/dist/global-skills/vybekiitReferences/spa/language.md +7 -11
- package/dist/global-skills/vybekiitReferences/web/AGENTS.md +15 -30
- package/dist/global-skills/vybekiitReferences/web/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/agent/goal-routes.json +366 -0
- package/dist/global-skills/vybekiitReferences/web/agent/mcp-setup.md +11 -2
- package/dist/global-skills/vybekiitReferences/web/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/language.md +7 -102
- package/dist/global-skills/vybekiitReferences/web/platform-skills/ai-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/analytics-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/assets-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/better-auth-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/browser-automation-vybekiit.md +9 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/cms-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/compliance-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/deploy-github-pages-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/web/platform-skills/deploy-railway-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/web/platform-skills/deploy-vercel-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/web/platform-skills/env-secrets-vybekiit.md +1 -0
- package/dist/global-skills/vybekiitReferences/web/platform-skills/extend-capabilities-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/i18n-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/jobs-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/kv-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/lemon-squeezy-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/mongodb-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/notifications-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/observability-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/paypal-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/realtime-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/registrar-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/search-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/sentry-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/seo-vybekiit.md +1 -3
- package/dist/global-skills/vybekiitReferences/web/platform-skills/supabase-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/tenancy-vybekiit.md +1 -1
- package/dist/global-skills/web-to-native/SKILL.md +1 -0
- package/dist/global-skills/workers-best-practices/SKILL.md +5 -4
- package/dist/global-skills/workers-best-practices/references/configuration.md +1 -1
- package/dist/global-skills/workers-best-practices/references/platform-apis.md +5 -5
- package/dist/global-skills/workers-best-practices/references/runtime-patterns.md +1 -1
- package/dist/global-skills/wrangler/SKILL.md +28 -25
- package/dist/global-skills/xcode-project-setup/SKILL.md +2 -0
- package/package.json +10 -8
|
@@ -47,15 +47,15 @@ schema:
|
|
|
47
47
|
connectorDirs: ["./connector"]
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
-
| Field
|
|
51
|
-
|
|
|
52
|
-
| `specVersion`
|
|
53
|
-
| `serviceId`
|
|
54
|
-
| `location`
|
|
50
|
+
| Field | Description |
|
|
51
|
+
| ----------------------------------------------- | ---------------------------------------------------------------------------------------- |
|
|
52
|
+
| `specVersion` | Always `"v1"` |
|
|
53
|
+
| `serviceId` | Unique identifier for the service |
|
|
54
|
+
| `location` | GCP region (us-central1, us-east4, europe-west1, etc.) |
|
|
55
55
|
| `schema.datasource.postgresql.schemaValidation` | Deployment mode: `"STRICT"` (must match exactly) or `"COMPATIBLE"` (backward compatible) |
|
|
56
|
-
| `schema.source`
|
|
57
|
-
| `schema.datasource`
|
|
58
|
-
| `connectorDirs`
|
|
56
|
+
| `schema.source` | Path to schema directory |
|
|
57
|
+
| `schema.datasource` | PostgreSQL connection config |
|
|
58
|
+
| `connectorDirs` | List of connector directories |
|
|
59
59
|
|
|
60
60
|
### Cloud SQL Configuration
|
|
61
61
|
|
|
@@ -23,7 +23,10 @@ based on what you're querying:
|
|
|
23
23
|
List queries require explicit `@refresh` to tell SQL Connect which mutations
|
|
24
24
|
affect the result set.
|
|
25
25
|
|
|
26
|
-
Clients consume all three using `subscribe()` instead of `execute()`. See
|
|
26
|
+
Clients consume all three using `subscribe()` instead of `execute()`. See
|
|
27
|
+
[sdk_web.md](sdk_web.md), [sdk_android.md](sdk_android.md),
|
|
28
|
+
[sdk_ios.md](sdk_ios.md), and [sdk_flutter.md](sdk_flutter.md) for per-platform
|
|
29
|
+
subscribe patterns.
|
|
27
30
|
|
|
28
31
|
______________________________________________________________________
|
|
29
32
|
|
|
@@ -1,9 +1,20 @@
|
|
|
1
|
-
# Android
|
|
1
|
+
# Firebase SQL Connect - Android Setup Guide (Kotlin)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
This guide describes the SDK setup and basic usage patterns for Firebase SQL
|
|
4
|
+
Connect in an Android app using Kotlin DSL (`build.gradle.kts`) and Kotlin code.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
## Prerequisites
|
|
7
|
+
|
|
8
|
+
IMPORTANT: Before specifically working with Firebase SQL Connect, make sure to
|
|
9
|
+
use the skill and reference `firebase_basics/references/android_setup` to ensure
|
|
10
|
+
the following is done.
|
|
11
|
+
|
|
12
|
+
- The Firebase CLI is available and authenticated.
|
|
13
|
+
- An Android project exists and is registered with a Firebase Project.
|
|
14
|
+
- The Android project has a Firebase config file (`google-services.json`) and
|
|
15
|
+
the Google services Gradle plugin (`google-services`).
|
|
16
|
+
|
|
17
|
+
## Best practices for agents working with Firebase SQL Connect
|
|
7
18
|
|
|
8
19
|
- **Understand Operation Storage**: SQL Connect queries and mutations are stored
|
|
9
20
|
on the server like Cloud Functions. **Whenever you update operations, you must
|
|
@@ -19,26 +30,66 @@ with the SQL Connect backend.
|
|
|
19
30
|
- **Leverage Coroutines**: Call `.execute()` within a coroutine scope for
|
|
20
31
|
asynchronous operations.
|
|
21
32
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
______________________________________________________________________
|
|
34
|
+
|
|
35
|
+
## 1. Add dependencies to Gradle build files
|
|
36
|
+
|
|
37
|
+
> [!IMPORTANT] **[AGENT] RESOLVING THE SDK VERSION DETERMINISTICALLY** Never
|
|
38
|
+
> guess or hardcode a memorized out-of-date SDK or plugin version. Before adding
|
|
39
|
+
> dependencies, you MUST query the latest available versions directly from the
|
|
40
|
+
> Google Maven Repository:
|
|
41
|
+
>
|
|
42
|
+
> ```bash
|
|
43
|
+
> # Find the latest Firebase Android BoM version
|
|
44
|
+
> curl -s https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-bom/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2
|
|
45
|
+
>
|
|
46
|
+
> # Find the latest firebase-dataconnect version
|
|
47
|
+
> curl -s https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-dataconnect/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2
|
|
48
|
+
> ```
|
|
49
|
+
>
|
|
50
|
+
> If the dependency is already declared, fetch the exact resolved version
|
|
51
|
+
> currently active in the workspace's build graph:
|
|
52
|
+
>
|
|
53
|
+
> ```bash
|
|
54
|
+
> ./gradlew -q :app:dependencyInsight --dependency firebase-dataconnect --configuration releaseRuntimeClasspath
|
|
55
|
+
> ```
|
|
56
|
+
|
|
57
|
+
In the **module (app-level)** `build.gradle.kts` (usually
|
|
58
|
+
`<project>/<app-module>/build.gradle.kts`), add the Kotlin serialization plugin
|
|
59
|
+
and the dependency for Firebase SQL Connect:
|
|
60
|
+
|
|
61
|
+
1. Add the Kotlin serialization plugin to the `plugins` block:
|
|
62
|
+
|
|
63
|
+
```kotlin
|
|
64
|
+
plugins {
|
|
65
|
+
// ... other plugins
|
|
66
|
+
kotlin("plugin.serialization") version "1.8.22" // Must match Kotlin version
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
1. Add the required Firebase SQL Connect dependencies to the `dependencies`
|
|
71
|
+
block:
|
|
72
|
+
|
|
73
|
+
```kotlin
|
|
74
|
+
dependencies {
|
|
75
|
+
// ... other dependencies
|
|
76
|
+
|
|
77
|
+
// [AGENT] Fetch the latest resolved version using the Gradle command above
|
|
78
|
+
implementation(platform("com.google.firebase:firebase-bom:<latest_bom_version>"))
|
|
79
|
+
|
|
80
|
+
// Add the dependency for the Firebase SQL Connect library
|
|
81
|
+
// When using the BoM, don't specify versions in Firebase library dependencies
|
|
82
|
+
implementation("com.google.firebase:firebase-dataconnect")
|
|
83
|
+
|
|
84
|
+
// Add additional required dependencies
|
|
85
|
+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
|
|
86
|
+
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1")
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
______________________________________________________________________
|
|
91
|
+
|
|
92
|
+
## 2. Initialize
|
|
42
93
|
|
|
43
94
|
Retrieve the generated connector instance:
|
|
44
95
|
|
|
@@ -54,9 +105,13 @@ connector.dataConnect.useEmulator()
|
|
|
54
105
|
// connector.dataConnect.useEmulator(port = 9999)
|
|
55
106
|
```
|
|
56
107
|
|
|
57
|
-
|
|
108
|
+
______________________________________________________________________
|
|
109
|
+
|
|
110
|
+
## 3. Work with SQL Connect
|
|
111
|
+
|
|
112
|
+
### Calling operations
|
|
58
113
|
|
|
59
|
-
#### Basic
|
|
114
|
+
#### Basic query
|
|
60
115
|
|
|
61
116
|
```kotlin
|
|
62
117
|
val result = connector.listMovies.execute()
|
|
@@ -76,7 +131,7 @@ val newMovie = connector.createMovie.execute(
|
|
|
76
131
|
)
|
|
77
132
|
```
|
|
78
133
|
|
|
79
|
-
### Resilient
|
|
134
|
+
### Resilient enum handling
|
|
80
135
|
|
|
81
136
|
Unwrap the `EnumValue` to handle known and unknown cases safely.
|
|
82
137
|
|
|
@@ -91,7 +146,7 @@ result.data.movies.forEach { movie ->
|
|
|
91
146
|
}
|
|
92
147
|
```
|
|
93
148
|
|
|
94
|
-
### Client-
|
|
149
|
+
### Client-side caching
|
|
95
150
|
|
|
96
151
|
Enable caching in `connector.yaml` to reduce requests and support offline
|
|
97
152
|
scenarios.
|
|
@@ -113,7 +168,7 @@ val queryResult = queryRef.execute(QueryRef.FetchPolicy.CACHE_ONLY)
|
|
|
113
168
|
val queryResult = queryRef.execute(QueryRef.FetchPolicy.SERVER_ONLY)
|
|
114
169
|
```
|
|
115
170
|
|
|
116
|
-
### Data
|
|
171
|
+
### Data type mapping reference
|
|
117
172
|
|
|
118
173
|
- GraphQL `String` -> Kotlin `String`
|
|
119
174
|
- GraphQL `Int` -> Kotlin `Int` (32-bit)
|
|
@@ -106,9 +106,14 @@ await executeQuery(queryRef, { fetchPolicy: QueryFetchPolicy.SERVER_ONLY });
|
|
|
106
106
|
|
|
107
107
|
### Subscriptions (Realtime)
|
|
108
108
|
|
|
109
|
-
Use `subscribe()` to receive live updates. It accepts either an observer object
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
Use `subscribe()` to receive live updates. It accepts either an observer object
|
|
110
|
+
(`SubscriptionOptions`) or positional callbacks:
|
|
111
|
+
|
|
112
|
+
> **Note:** When passing an observer object literal, the error callback property
|
|
113
|
+
> is named **`onErr`** (`{ onNext, onErr, onComplete }`). Passing `onError` in
|
|
114
|
+
> an object literal fails TypeScript compilation (`TS2769`) and is ignored at
|
|
115
|
+
> runtime. The name `onError` is only used as the parameter name in the
|
|
116
|
+
> positional callback overload (`subscribe(ref, onNext, onError, onComplete)`).
|
|
112
117
|
|
|
113
118
|
#### Web (Vanilla JS / TypeScript)
|
|
114
119
|
|
|
@@ -32,13 +32,13 @@ ______________________________________________________________________
|
|
|
32
32
|
|
|
33
33
|
## Access Levels
|
|
34
34
|
|
|
35
|
-
| Level | Who Can Access | CEL Equivalent
|
|
36
|
-
| --------------------- | -------------------------------------------- |
|
|
37
|
-
| `PUBLIC` | Anyone, authenticated or not | `true`
|
|
38
|
-
| `USER_ANON` | Any authenticated user (including anonymous) | `auth != null`
|
|
39
|
-
| `USER` | Authenticated users (excludes anonymous) | `auth != null && auth.token.firebase.sign_in_provider != 'anonymous'`
|
|
40
|
-
| `USER_EMAIL_VERIFIED` | Users with verified email | `auth != null && auth.token.email_verified`
|
|
41
|
-
| `NO_ACCESS` | Admin SDK only | `false`
|
|
35
|
+
| Level | Who Can Access | CEL Equivalent |
|
|
36
|
+
| --------------------- | -------------------------------------------- | --------------------------------------------------------------------- |
|
|
37
|
+
| `PUBLIC` | Anyone, authenticated or not | `true` |
|
|
38
|
+
| `USER_ANON` | Any authenticated user (including anonymous) | `auth != null` |
|
|
39
|
+
| `USER` | Authenticated users (excludes anonymous) | `auth != null && auth.token.firebase.sign_in_provider != 'anonymous'` |
|
|
40
|
+
| `USER_EMAIL_VERIFIED` | Users with verified email | `auth != null && auth.token.email_verified` |
|
|
41
|
+
| `NO_ACCESS` | Admin SDK only | `false` |
|
|
42
42
|
|
|
43
43
|
> **Important:** Levels like `USER` are starting points. Always add filters or
|
|
44
44
|
> expressions to verify the user can access specific data.
|
|
@@ -49,12 +49,12 @@ ______________________________________________________________________
|
|
|
49
49
|
|
|
50
50
|
### Available Bindings
|
|
51
51
|
|
|
52
|
-
| Binding | Description
|
|
53
|
-
| ----------------------- |
|
|
54
|
-
| `auth.uid` | Current user's Firebase UID
|
|
55
|
-
| `auth.token` | Auth token claims (see below)
|
|
56
|
-
| `vars` | Operation variables (e.g., `vars.movieId`)
|
|
57
|
-
| `request.time` | Server timestamp
|
|
52
|
+
| Binding | Description |
|
|
53
|
+
| ----------------------- | ----------------------------------------------------------------- |
|
|
54
|
+
| `auth.uid` | Current user's Firebase UID |
|
|
55
|
+
| `auth.token` | Auth token claims (see below) |
|
|
56
|
+
| `vars` | Operation variables (e.g., `vars.movieId`) |
|
|
57
|
+
| `request.time` | Server timestamp |
|
|
58
58
|
| `request.operationName` | Name of the GraphQL operation being executed (e.g., `"GetMovie"`) |
|
|
59
59
|
|
|
60
60
|
### auth.token Fields
|
|
@@ -4,15 +4,23 @@ description: >-
|
|
|
4
4
|
Sets up, manages, queries, and configures Cloud Firestore databases (Standard/Enterprise edition), including data modeling, security rules, indexes, and SDK integrations (Web, Python, iOS, Android, Flutter). Use when creating/listing Firestore databases, defining data models/indexes, writing SDK queries, or integrating Firestore SDKs. For authoring or modifying Firestore Security Rules (firestore.rules), delegate to the firestore-rules-author subagent if subagent delegation is available, or use firestore-rules-creation otherwise. Don't use for Firebase Hosting, Data Connect, Auth, Storage/GCS, Crashlytics, Functions, or BigQuery.
|
|
5
5
|
compatibility: This skill is best used with the Firebase CLI, but does not require it. Firebase CLI can be accessed through `npx -y firebase-tools@latest`.
|
|
6
6
|
metadata:
|
|
7
|
+
author: Google LLC
|
|
7
8
|
category: Databases
|
|
9
|
+
disable-model-invocation: true
|
|
8
10
|
---
|
|
9
11
|
|
|
10
12
|
# Cloud Firestore Database and Operations
|
|
11
13
|
|
|
12
|
-
> [!IMPORTANT] **Security Rules Authoring (`firestore.rules`)**
|
|
13
|
-
>
|
|
14
|
-
>
|
|
15
|
-
> - **If subagent delegation
|
|
14
|
+
> [!IMPORTANT] **Security Rules Authoring (`firestore.rules`)** Whenever your
|
|
15
|
+
> task requires creating, authoring, or modifying `firestore.rules`:
|
|
16
|
+
>
|
|
17
|
+
> - **If subagent delegation AND the `firestore-rules-author` subagent are
|
|
18
|
+
> available**: delegate authoring `firestore.rules` to the
|
|
19
|
+
> `firestore-rules-author` subagent rather than writing `firestore.rules`
|
|
20
|
+
> directly in the main agent.
|
|
21
|
+
> - **If subagent delegation is unavailable** (e.g., subagents not enabled in
|
|
22
|
+
> the IDE) **OR `firestore-rules-author` is not installed**: read and follow
|
|
23
|
+
> the `firestore-rules-creation` skill to write `firestore.rules` directly.
|
|
16
24
|
|
|
17
25
|
Before setting up dependencies, writing data models, or configuring security
|
|
18
26
|
rules, you MUST always identify the Firestore instance edition.
|
|
@@ -29,12 +37,15 @@ npx -y firebase-tools@latest firestore:databases:list
|
|
|
29
37
|
|
|
30
38
|
1. For each database found, inspect its edition and details:
|
|
31
39
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
```bash
|
|
41
|
+
npx -y firebase-tools@latest firestore:databases:get <database-id>
|
|
42
|
+
```
|
|
43
|
+
|
|
35
44
|
1. Ask the user which database instance they wish to target or if they would
|
|
36
45
|
prefer to create a new instance.
|
|
46
|
+
|
|
37
47
|
1. Once the target instance is established:
|
|
48
|
+
|
|
38
49
|
- If the **`edition`** is `STANDARD`, follow the guides under
|
|
39
50
|
`references/standard/`.
|
|
40
51
|
- If the **`edition`** is `ENTERPRISE` or native mode, follow the guides
|
|
@@ -1,25 +1,45 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Cloud Firestore (Enterprise edition) - Android Setup Guide (Kotlin)
|
|
2
2
|
|
|
3
|
-
This guide
|
|
4
|
-
|
|
3
|
+
This guide describes the SDK setup and basic usage patterns for Cloud Firestore
|
|
4
|
+
(Enterprise edition in Native mode) in an Android app using Kotlin DSL
|
|
5
|
+
(`build.gradle.kts`) and Kotlin code.
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
|
|
9
|
+
IMPORTANT: Before specifically working with Cloud Firestore, make sure to use
|
|
10
|
+
the skill and reference `firebase_basics/references/android_setup` to ensure the
|
|
11
|
+
following is done.
|
|
12
|
+
|
|
13
|
+
- The Firebase CLI is available and authenticated.
|
|
14
|
+
- An Android project exists and is registered with a Firebase Project.
|
|
15
|
+
- The Android project has a Firebase config file (`google-services.json`) and
|
|
16
|
+
the Google services Gradle plugin (`google-services`).
|
|
5
17
|
|
|
6
18
|
______________________________________________________________________
|
|
7
19
|
|
|
8
|
-
## 1.
|
|
20
|
+
## 1. Provision Firestore
|
|
9
21
|
|
|
10
|
-
|
|
22
|
+
Follow the instructions in
|
|
23
|
+
`firebase_firestore/references/enterprise/provisioning` to do the following:
|
|
11
24
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
25
|
+
- Provision a Firestore instance (Enterprise edition in Native mode)
|
|
26
|
+
- Create or append a `firebase.json` file
|
|
27
|
+
- Create a `firestore.rules` file
|
|
28
|
+
- Create a `firestore.indexes.json` file
|
|
29
|
+
- Deploy database, rules, and indexes
|
|
30
|
+
- Run Firestore locally for development and testing
|
|
31
|
+
|
|
32
|
+
______________________________________________________________________
|
|
15
33
|
|
|
16
|
-
|
|
17
|
-
|
|
34
|
+
## 2. Add dependencies to Gradle build files
|
|
35
|
+
|
|
36
|
+
> [!IMPORTANT] **[AGENT] RESOLVING THE SDK VERSION DETERMINISTICALLY** Never
|
|
37
|
+
> guess or hardcode a memorized out-of-date SDK or plugin version. Before adding
|
|
18
38
|
> dependencies, you MUST query the latest available versions directly from the
|
|
19
39
|
> Google Maven Repository:
|
|
20
40
|
>
|
|
21
41
|
> ```bash
|
|
22
|
-
> # Find the latest Firebase BoM version
|
|
42
|
+
> # Find the latest Firebase Android BoM version
|
|
23
43
|
> curl -s https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-bom/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2
|
|
24
44
|
>
|
|
25
45
|
> # Find the latest firebase-firestore version
|
|
@@ -33,20 +53,26 @@ Firestore:
|
|
|
33
53
|
> ./gradlew -q :app:dependencyInsight --dependency firebase-firestore --configuration releaseRuntimeClasspath
|
|
34
54
|
> ```
|
|
35
55
|
|
|
56
|
+
In the **module (app-level)** `build.gradle.kts` (usually
|
|
57
|
+
`<project>/<app-module>/build.gradle.kts`), add the dependency for Cloud
|
|
58
|
+
Firestore:
|
|
59
|
+
|
|
36
60
|
```kotlin
|
|
37
61
|
dependencies {
|
|
38
62
|
// [AGENT] Fetch the latest resolved version using the Gradle command above
|
|
39
63
|
implementation(platform("com.google.firebase:firebase-bom:<latest_bom_version>"))
|
|
40
64
|
|
|
41
65
|
// Add the dependency for the Cloud Firestore library
|
|
42
|
-
// When using the BoM,
|
|
66
|
+
// When using the BoM, don't specify versions in Firebase library dependencies
|
|
43
67
|
implementation("com.google.firebase:firebase-firestore")
|
|
44
68
|
}
|
|
45
69
|
```
|
|
46
70
|
|
|
47
|
-
|
|
71
|
+
______________________________________________________________________
|
|
72
|
+
|
|
73
|
+
## 3. Initialize Firestore
|
|
48
74
|
|
|
49
|
-
Initialize the `FirebaseFirestore` instance in your ComponentActivity (Jetpack
|
|
75
|
+
Initialize the `FirebaseFirestore` instance in your `ComponentActivity` (Jetpack
|
|
50
76
|
Compose) or standard Activity/Fragment:
|
|
51
77
|
|
|
52
78
|
```kotlin
|
|
@@ -63,7 +89,7 @@ class MainActivity : ComponentActivity() {
|
|
|
63
89
|
super.onCreate(savedInstanceState)
|
|
64
90
|
// Initialize the Firestore instance
|
|
65
91
|
val db = FirebaseFirestore.getInstance("<database-name>")
|
|
66
|
-
|
|
92
|
+
|
|
67
93
|
setContent {
|
|
68
94
|
MaterialTheme {
|
|
69
95
|
Text("Firestore initialized!")
|
|
@@ -75,7 +101,7 @@ class MainActivity : ComponentActivity() {
|
|
|
75
101
|
|
|
76
102
|
______________________________________________________________________
|
|
77
103
|
|
|
78
|
-
##
|
|
104
|
+
## 4. Decision framework: Mandatory pipeline architecture
|
|
79
105
|
|
|
80
106
|
> [!CRITICAL] **MANDATORY PIPELINE ARCHITECTURE (ZERO TOLERANCE)** You are
|
|
81
107
|
> strictly forbidden from using standard collection queries (e.g.,
|
|
@@ -85,7 +111,7 @@ ______________________________________________________________________
|
|
|
85
111
|
> Server-side execution via pipelines is the superior, non-negotiable core
|
|
86
112
|
> architecture for Enterprise instances.
|
|
87
113
|
|
|
88
|
-
### Strict
|
|
114
|
+
### Strict rules & accountability
|
|
89
115
|
|
|
90
116
|
1. **Mandatory Execution Engine**: Every repository lookup requiring related
|
|
91
117
|
data mapping, textual relevance scoring, or multi-document counting MUST be
|
|
@@ -110,9 +136,9 @@ ______________________________________________________________________
|
|
|
110
136
|
|
|
111
137
|
______________________________________________________________________
|
|
112
138
|
|
|
113
|
-
##
|
|
139
|
+
## 5. Pipeline examples
|
|
114
140
|
|
|
115
|
-
### Relational
|
|
141
|
+
### Relational joins pattern
|
|
116
142
|
|
|
117
143
|
When querying related data (e.g., articles and their author profiles), perform
|
|
118
144
|
the join at the database level via pipeline stages instead of executing multiple
|
|
@@ -142,7 +168,7 @@ val articlesWithAuthProfile = db.pipeline().collection("articles")
|
|
|
142
168
|
)
|
|
143
169
|
```
|
|
144
170
|
|
|
145
|
-
### Full-
|
|
171
|
+
### Full-text search
|
|
146
172
|
|
|
147
173
|
Leverage the database-native `.search()` stage within your pipelines to run
|
|
148
174
|
high-performance text query matches on the database level.
|
|
@@ -164,7 +190,7 @@ val searchPipeline = db.pipeline()
|
|
|
164
190
|
|
|
165
191
|
______________________________________________________________________
|
|
166
192
|
|
|
167
|
-
##
|
|
193
|
+
## 6. Real-time listener & document operations
|
|
168
194
|
|
|
169
195
|
When real-time data sync or transaction-based document mutations are strictly
|
|
170
196
|
required by application specifications, write clean operations as shown in this
|
|
@@ -53,7 +53,8 @@ create index entries with duplicate values.
|
|
|
53
53
|
- Index Required: **Composite Index** on field `a` and `b`
|
|
54
54
|
- **Multiple Ranges**: `where("a", ">", 1).where("b", ">", 2)`
|
|
55
55
|
- Index Required: **Composite Index** on field `a` and `b`
|
|
56
|
-
- **Array Contains + Equality**:
|
|
56
|
+
- **Array Contains + Equality**:
|
|
57
|
+
`where("tags", "array-contains", "news").where("active", "==", true)`
|
|
57
58
|
- Index Required: **Composite Index** on field `tags` and `active`
|
|
58
59
|
|
|
59
60
|
If no indexes is present, Firestore Enterprise will perform a full collection
|
|
@@ -1,40 +1,78 @@
|
|
|
1
|
-
# Cloud Firestore
|
|
1
|
+
# Cloud Firestore (Standard edition) - Android Setup Guide (Kotlin)
|
|
2
2
|
|
|
3
|
-
This guide
|
|
4
|
-
Kotlin.
|
|
3
|
+
This guide describes the SDK setup and basic usage patterns for Cloud Firestore
|
|
4
|
+
(Standard edition) in an Android app using Kotlin DSL (`build.gradle.kts`) and
|
|
5
|
+
Kotlin code.
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
## Prerequisites
|
|
7
8
|
|
|
8
|
-
Before
|
|
9
|
-
|
|
9
|
+
IMPORTANT: Before specifically working with Cloud Firestore, make sure to use
|
|
10
|
+
the skill and reference `firebase_basics/references/android_setup` to ensure the
|
|
11
|
+
following is done.
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
- The Firebase CLI is available and authenticated.
|
|
14
|
+
- An Android project exists and is registered with a Firebase Project.
|
|
15
|
+
- The Android project has a Firebase config file (`google-services.json`) and
|
|
16
|
+
the Google services Gradle plugin (`google-services`).
|
|
14
17
|
|
|
15
18
|
______________________________________________________________________
|
|
16
19
|
|
|
17
|
-
|
|
20
|
+
## 1. Provision Firestore
|
|
21
|
+
|
|
22
|
+
Follow the instructions in `firebase_firestore/references/standard/provisioning`
|
|
23
|
+
to do the following:
|
|
18
24
|
|
|
19
|
-
|
|
20
|
-
|
|
25
|
+
- Provision a Firestore instance (Standard edition)
|
|
26
|
+
- Create or append a `firebase.json` file
|
|
27
|
+
- Create a `firestore.rules` file
|
|
28
|
+
- Create a `firestore.indexes.json` file
|
|
29
|
+
- Deploy database, rules, and indexes
|
|
30
|
+
- Run Firestore locally for development and testing
|
|
31
|
+
|
|
32
|
+
______________________________________________________________________
|
|
33
|
+
|
|
34
|
+
## 2. Add dependencies to Gradle build files
|
|
35
|
+
|
|
36
|
+
> [!IMPORTANT] **[AGENT] RESOLVING THE SDK VERSION DETERMINISTICALLY** Never
|
|
37
|
+
> guess or hardcode a memorized out-of-date SDK or plugin version. Before adding
|
|
38
|
+
> dependencies, you MUST query the latest available versions directly from the
|
|
39
|
+
> Google Maven Repository:
|
|
40
|
+
>
|
|
41
|
+
> ```bash
|
|
42
|
+
> # Find the latest Firebase Android BoM version
|
|
43
|
+
> curl -s https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-bom/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2
|
|
44
|
+
>
|
|
45
|
+
> # Find the latest firebase-firestore version
|
|
46
|
+
> curl -s https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-firestore/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2
|
|
47
|
+
> ```
|
|
48
|
+
>
|
|
49
|
+
> If the dependency is already declared, fetch the exact resolved version
|
|
50
|
+
> currently active in the workspace's build graph:
|
|
51
|
+
>
|
|
52
|
+
> ```bash
|
|
53
|
+
> ./gradlew -q :app:dependencyInsight --dependency firebase-firestore --configuration releaseRuntimeClasspath
|
|
54
|
+
> ```
|
|
55
|
+
|
|
56
|
+
In the **module (app-level)** `build.gradle.kts` (usually
|
|
57
|
+
`<project>/<app-module>/build.gradle.kts`), add the dependency for Cloud
|
|
58
|
+
Firestore:
|
|
21
59
|
|
|
22
60
|
```kotlin
|
|
23
61
|
dependencies {
|
|
24
|
-
// [AGENT] Fetch the latest
|
|
62
|
+
// [AGENT] Fetch the latest resolved version using the Gradle command above
|
|
25
63
|
implementation(platform("com.google.firebase:firebase-bom:<latest_bom_version>"))
|
|
26
64
|
|
|
27
65
|
// Add the dependency for the Cloud Firestore library
|
|
28
|
-
// When using the BoM,
|
|
66
|
+
// When using the BoM, don't specify versions in Firebase library dependencies
|
|
29
67
|
implementation("com.google.firebase:firebase-firestore")
|
|
30
68
|
}
|
|
31
69
|
```
|
|
32
70
|
|
|
33
71
|
______________________________________________________________________
|
|
34
72
|
|
|
35
|
-
|
|
73
|
+
## 3. Initialize Firestore
|
|
36
74
|
|
|
37
|
-
In
|
|
75
|
+
In the Activity or Fragment, initialize the `FirebaseFirestore` instance:
|
|
38
76
|
|
|
39
77
|
```kotlin
|
|
40
78
|
import com.google.firebase.Firebase
|
|
@@ -58,7 +96,7 @@ class MainActivity : AppCompatActivity() {
|
|
|
58
96
|
}
|
|
59
97
|
```
|
|
60
98
|
|
|
61
|
-
|
|
99
|
+
### Jetpack Compose (Modern)
|
|
62
100
|
|
|
63
101
|
Initialize inside a `ComponentActivity` using `setContent`:
|
|
64
102
|
|
|
@@ -87,7 +125,11 @@ class MainActivity : ComponentActivity() {
|
|
|
87
125
|
|
|
88
126
|
______________________________________________________________________
|
|
89
127
|
|
|
90
|
-
|
|
128
|
+
## 4. Work with data
|
|
129
|
+
|
|
130
|
+
After Firestore is initialized, you can work with data in the following ways.
|
|
131
|
+
|
|
132
|
+
### Add data
|
|
91
133
|
|
|
92
134
|
Add a new document with a generated ID using `add()`:
|
|
93
135
|
|
|
@@ -125,9 +167,7 @@ db.collection("cities").document("LA")
|
|
|
125
167
|
.addOnFailureListener { e -> Log.w(TAG, "Error writing document", e) }
|
|
126
168
|
```
|
|
127
169
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
### 4. Read Data
|
|
170
|
+
### Read data
|
|
131
171
|
|
|
132
172
|
Read a single document using `get()`:
|
|
133
173
|
|
|
@@ -162,9 +202,7 @@ db.collection("cities")
|
|
|
162
202
|
}
|
|
163
203
|
```
|
|
164
204
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
### 5. Update Data
|
|
205
|
+
### Update data
|
|
168
206
|
|
|
169
207
|
Update some fields of a document using `update()` without overwriting the entire
|
|
170
208
|
document:
|
|
@@ -179,9 +217,7 @@ washingtonRef
|
|
|
179
217
|
.addOnFailureListener { e -> Log.w(TAG, "Error updating document", e) }
|
|
180
218
|
```
|
|
181
219
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
### 6. Delete Data
|
|
220
|
+
### Delete data
|
|
185
221
|
|
|
186
222
|
Delete a document using `delete()`:
|
|
187
223
|
|
|
@@ -51,7 +51,8 @@ specific index.
|
|
|
51
51
|
- Index Required: **Composite Index**
|
|
52
52
|
- **Multiple Ranges**: `where("a", ">", 1).where("b", ">", 2)`
|
|
53
53
|
- Index Required: **Composite Index** (limited query support)
|
|
54
|
-
- **Array Contains + Equality**:
|
|
54
|
+
- **Array Contains + Equality**:
|
|
55
|
+
`where("tags", "array-contains", "news").where("active", "==", true)`
|
|
55
56
|
- Index Required: **Composite Index**
|
|
56
57
|
|
|
57
58
|
## Best Practices & Exemptions
|
|
@@ -3,7 +3,9 @@ name: firebase-hosting-basics
|
|
|
3
3
|
description: >-
|
|
4
4
|
Deploys and configures classic Firebase Hosting for static websites, single-page apps (SPAs), and microservices. Use when deploying static sites/SPAs, setting up custom domains, configuring firebase.json hosting settings (redirects, rewrites, headers, multi-site), or managing preview channels. Don't use for Firebase App Hosting (Next.js/SSR), Auth, Firestore queries/rules, Data Connect, or Crashlytics.
|
|
5
5
|
metadata:
|
|
6
|
+
author: Google LLC
|
|
6
7
|
category: Serverless
|
|
8
|
+
disable-model-invocation: true
|
|
7
9
|
---
|
|
8
10
|
|
|
9
11
|
# hosting-basics
|
|
@@ -4,7 +4,9 @@ description: >-
|
|
|
4
4
|
Manages Firebase Remote Config templates, feature flags, loading strategies, and SDKs (Android, iOS). Use when downloading/deploying remoteconfig JSON templates, managing version history/feature flags, setting in-app defaults, fetchAndActivate(), real-time listeners, or SDK setup. Don't use for Firebase Hosting, Auth, Firestore, Data Connect, Crashlytics, or App Hosting.
|
|
5
5
|
compatibility: This skill is best used with the Firebase CLI, but does not require it. Firebase CLI can be accessed through `npx -y firebase-tools@latest`.
|
|
6
6
|
metadata:
|
|
7
|
+
author: Google LLC
|
|
7
8
|
category: ApplicationDevelopment
|
|
9
|
+
disable-model-invocation: true
|
|
8
10
|
---
|
|
9
11
|
|
|
10
12
|
# Remote Config
|
|
@@ -100,7 +102,7 @@ history through the terminal:
|
|
|
100
102
|
```
|
|
101
103
|
|
|
102
104
|
- Deploy: Execute the partial deployment command
|
|
103
|
-
|
|
105
|
+
|
|
104
106
|
```bash
|
|
105
107
|
npx -y firebase-tools@latest deploy --only remoteconfig
|
|
106
108
|
```
|