Firebase Firestore
Firebase (Google)OfficialCreated by Google LLCDistributed by Firebase (Google)
- Skill
- Tool integration
- Data and AI
- Apache-2.0
- Low risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a comprehensive framework for interacting with Google Cloud Firestore. It guides users through the lifecycle of a Firestore database, including instance provisioning, edition selection (Standard vs. Enterprise), data modeling, index management, and SDK integration across multiple platforms like Web, Android, iOS, and Flutter. It emphasizes architectural best practices, such as mandatory reference reading for SDK usage and proper security rule deployment.
What it does
- Lists and inspects existing Firestore database instances.
- Provisions new Firestore databases with specific edition and location settings.
- Provides structured guidance for data modeling using documents, collections, and subcollections.
- Facilitates SDK integration by providing platform-specific setup and initialization patterns.
- Manages database indexes and security rule deployment workflows.
- Enforces mandatory architectural checks before application code implementation.
When to use it
- When setting up a new Cloud Firestore database for an application.
- When migrating existing data or configuring database indexes.
- When integrating Firestore SDKs into Web, Android, iOS, or Flutter projects.
- When defining or updating data models for a NoSQL document-oriented structure.
- When troubleshooting or verifying database instance editions and configurations.
Advantages
- Ensures consistent database provisioning and configuration across environments.
- Provides clear paths for both Standard and Enterprise edition workflows.
- Promotes secure development practices by mandating security rule management.
- Reduces errors by requiring verification of SDK versions and architectural patterns.
Usage examples
- “List all my current Firestore databases and their editions.”
- The agent will execute the list command and provide a summary of all database IDs and their respective editions.
- “I need to set up a new Firestore database in the us-central1 region.”
- The agent will guide you through creating an Enterprise edition database in the specified location.
- “How do I query across all subcollections with the same name?”
- The agent will explain the concept of collection group queries and provide the necessary syntax for your platform.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/firebase/firebase-firestore/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip firebase-firestore.zip -d .agents/skills
Documentation by Google LLC
Cloud Firestore Database and Operations
[!IMPORTANT] Security Rules Authoring (
firestore.rules) Whenever setting up a Firestore-backed app or creating/modifyingfirestore.rules, configure"firestore": { "rules": "firestore.rules" }infirebase.jsonand deployfirestore.rules(npx -y firebase-tools@latest deploy --only firestore:rules), even if server routes use the Admin SDK:
If subagent delegation AND the
firestore-rules-authorsubagent are available: delegate authoringfirestore.rulesto thefirestore-rules-authorsubagent rather than writingfirestore.rulesdirectly in the main agent.If subagent delegation is unavailable (e.g., subagents not enabled in the IDE) OR
firestore-rules-authoris not installed: read and follow thefirestore-rules-creationskill to writefirestore.rulesdirectly.
Before setting up dependencies, writing data models, or configuring security rules, you MUST always identify the Firestore instance edition.
1. Instance Selection and Edition Detection
Run the following command to list current Firestore databases:
npx -y firebase-tools@latest firestore:databases:listA. Instance Found
For each database found, inspect its edition and details:
npx -y firebase-tools@latest firestore:databases:get <database-id>Ask the user which database instance they wish to target or if they would prefer to create a new instance.
Once the target instance is established:
If the
editionisSTANDARD, follow the guides underreferences/standard/.If the
editionisENTERPRISEor native mode, follow the guides underreferences/enterprise/.
B. No Instance Found (or New Requested)
If no databases exist or the user requests a new one, default to provisioning an
Enterprise edition database and ask the user what location to use. Run
npx -y firebase-tools@latest firestore:locations to get the list of options.
Suggest colocating with other resources if applicable.
Once the location is determined, create the database:
npx -y firebase-tools@latest firestore:databases:create <database-id> --edition="enterprise" --location="<selected-location>"Proceed with using the guides under references/enterprise/.
2. Specialized Guides
Based on the identified or created instance edition, open and read the corresponding reference guides:
Standard Edition (references/standard/)
Provisioning: Read provisioning.md
Security Rules: See the
firestore-rules-creationskillSDK Usage: Read web_sdk_usage.md, android_sdk_usage.md, ios_setup.md, or flutter_setup.md
Indexes: Read indexes.md
Enterprise Edition / Native Mode (references/enterprise/)
Provisioning: Read provisioning.md
Data Model: Read data_model.md
Security Rules: See the
firestore-rules-creationskillSDK Usage:
[!CRITICAL] Mandatory Reference Reading Before writing or modifying any application code for Firestore Enterprise Edition, you MUST read at least one of the relevant reference documents below for the target platform/language to understand specific architectural requirements and pipeline initialization patterns.
Read web_sdk_usage.md, python_sdk_usage.md, android_sdk_usage.md, ios_setup.md, or flutter_setup.md
Indexes: Read indexes.md
Files
- ATTRIBUTION.mdAdded by AutoGineer966 B
- LICENSELicence file added by AutoGineer11.1 KiB
- SKILL.md4.9 KiB
- references/enterprise/android_sdk_usage.md9.7 KiB
- references/enterprise/data_model.md2.8 KiB
- references/enterprise/flutter_setup.md4.6 KiB
- references/enterprise/indexes.md3.9 KiB
- references/enterprise/ios_setup.md5.8 KiB
- references/enterprise/provisioning.md3.2 KiB
- references/enterprise/python_sdk_usage.md3.0 KiB
- references/enterprise/web_sdk_usage.md4.6 KiB
- references/standard/android_sdk_usage.md6.6 KiB
- references/standard/flutter_setup.md4.5 KiB
- references/standard/indexes.md3.4 KiB
- references/standard/ios_setup.md5.3 KiB
- references/standard/provisioning.md2.8 KiB
- references/standard/web_sdk_usage.md4.4 KiB
references/enterprise/android_sdk_usage.md
Cloud Firestore (Enterprise edition) - Android Setup Guide (Kotlin)
This guide describes the SDK setup and basic usage patterns for Cloud Firestore
(Enterprise edition in Native mode) in an Android app using Kotlin DSL
(build.gradle.kts) and Kotlin code.
Prerequisites
IMPORTANT: Before specifically working with Cloud Firestore, make sure to use
the skill and reference firebase_basics/references/android_setup to ensure the
following is done.
The Firebase CLI is available and authenticated.
An Android project exists and is registered with a Firebase Project.
The Android project has a Firebase config file (
google-services.json) and the Google services Gradle plugin (google-services).
1. Provision Firestore
Follow the instructions in
firebase_firestore/references/enterprise/provisioning to do the following:
Provision a Firestore instance (Enterprise edition in Native mode)
Create or append a
firebase.jsonfileCreate a
firestore.rulesfileCreate a
firestore.indexes.jsonfileDeploy database, rules, and indexes
Run Firestore locally for development and testing
2. Add dependencies to Gradle build files
[!IMPORTANT] [AGENT] RESOLVING THE SDK VERSION DETERMINISTICALLY Never guess or hardcode a memorized out-of-date SDK or plugin version. Before adding dependencies, you MUST query the latest available versions directly from the Google Maven Repository:
# Find the latest Firebase Android BoM version curl -s https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-bom/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2 # Find the latest firebase-firestore version curl -s https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-firestore/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2If the dependency is already declared, fetch the exact resolved version currently active in the workspace's build graph:
./gradlew -q :app:dependencyInsight --dependency firebase-firestore --configuration releaseRuntimeClasspath
In the module (app-level) build.gradle.kts (usually
<project>/<app-module>/build.gradle.kts), add the dependency for Cloud
Firestore:
dependencies {
// [AGENT] Fetch the latest resolved version using the Gradle command above
implementation(platform("com.google.firebase:firebase-bom:<latest_bom_version>"))
// Add the dependency for the Cloud Firestore library
// When using the BoM, don't specify versions in Firebase library dependencies
implementation("com.google.firebase:firebase-firestore")
}3. Initialize Firestore
Initialize the FirebaseFirestore instance in your ComponentActivity (Jetpack
Compose) or standard Activity/Fragment:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import com.google.firebase.Firebase
import com.google.firebase.firestore.FirebaseFirestore
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Initialize the Firestore instance
val db = FirebaseFirestore.getInstance("<database-name>")
setContent {
MaterialTheme {
Text("Firestore initialized!")
}
}
}
}4. Decision framework: Mandatory pipeline architecture
[!CRITICAL] MANDATORY PIPELINE ARCHITECTURE (ZERO TOLERANCE) You are strictly forbidden from using standard collection queries (e.g.,
db.collection(...).where(...)or client-side mapping loops) as the primary implementation for relational joins, aggregations, or search algorithms.Server-side execution via pipelines is the superior, non-negotiable core architecture for Enterprise instances.
Strict rules & accountability
Mandatory Execution Engine: Every repository lookup requiring related data mapping, textual relevance scoring, or multi-document counting MUST be authored natively using the server-side
db.pipeline()API.Required Proof of Use: In your task execution summaries, you MUST explicitly highlight the exact pipeline stages (
.define(),.addFields(),.search(),.aggregate()) integrated into your primary data layer return paths. Failure to implement pipelines natively constitutes an immediate violation of instructions.Check API References:
Locate: Locate the standard Maven sources JAR (
-sources.jar) corresponding to the resolvedfirebase-firestoredependency version inside your local Gradle or Maven dependency cache.Extract Once: Extract the documentation files
pipeline.docs.txtandexpressions.docs.txtfrom the root directory of that-sources.jararchive into a temporary workspace scratch directory of your choice.Read & Reference:
Read the extracted
pipeline.docs.txtonce fully to understand core pipeline structure and stage capabilities.Reference the extracted
expressions.docs.txton-demand for specific function overloads and parameters.
5. Pipeline examples
Relational joins pattern
When querying related data (e.g., articles and their author profiles), perform the join at the database level via pipeline stages instead of executing multiple sequential lookups on the client-side.
Use
.define()to bind parameters or document properties as variables.Use
.addFields()and a nested subquery with a matching filter.Use
.toScalarExpression()to convert a nested pipeline subquery to a single field value.Assign variable and field aliases using
.alias(...)(note: while the Web SDK uses.as(), the Kotlin SDK uses.alias()to avoid keyword conflicts with Kotlin'sasoperator).
import com.google.firebase.firestore.pipeline.Expression.field
import com.google.firebase.firestore.pipeline.Expression.variable
// Fetch articles and join the associated author Profile side-by-side
val articlesWithAuthProfile = db.pipeline().collection("articles")
.define(field("authorUid").alias("author_id"))
.addFields(
db.pipeline().collection("users")
.where(field("__name__").documentId().equal(variable("author_id")))
.select(field("displayName"), field("avatarUrl"), field("handle"))
.toScalarExpression()
.alias("author")
)Full-text search
Leverage the database-native .search() stage within your pipelines to run
high-performance text query matches on the database level.
import com.google.firebase.firestore.pipeline.Expression.documentMatches
import com.google.firebase.firestore.pipeline.Expression.score
import com.google.firebase.firestore.pipeline.SearchStage
// Execute full-text search inside a pipeline, sorted by relevance score descending
val searchPipeline = db.pipeline()
.collection("articles")
.search(
SearchStage.withQuery(documentMatches("machine learning"))
.withSort(score().descending())
)
.limit(5)6. Real-time listener & document operations
When real-time data sync or transaction-based document mutations are strictly required by application specifications, write clean operations as shown in this comprehensive example.
import android.util.Log
import com.google.firebase.Firebase
import com.google.firebase.firestore.DocumentChange
import com.google.firebase.firestore.firestore
val db = Firebase.firestore("<database-name>")
// 1. Add a new document to a collection
val taskData = hashMapOf(
"title" to "Refactor Android SDK Usage Guide",
"status" to "pending"
)
db.collection("tasks")
.add(taskData)
.addOnSuccessListener { documentReference ->
val taskId = documentReference.id
Log.d("Firestore", "Document added with ID: $taskId")
// 2. Update specific fields of an existing document without replacing it
db.collection("tasks").document(taskId)
.update("priority", "high")
.addOnSuccessListener {
Log.d("Firestore", "Document successfully updated!")
}
.addOnFailureListener { e ->
Log.w("Firestore", "Error updating document", e)
}
}
.addOnFailureListener { e ->
Log.w("Firestore", "Error adding document", e)
}
// 3. Establish a real-time listener on a collection query
db.collection("tasks")
.whereEqualTo("status", "pending")
.addSnapshotListener { snapshot, error ->
if (error != null) {
Log.w("Firestore", "Listen failed.", error)
return@addSnapshotListener
}
snapshot?.documentChanges?.forEach { change ->
val docId = change.document.id
val docData = change.document.data
when (change.type) {
DocumentChange.Type.ADDED -> {
Log.d("Firestore", "Added Task: $docId => $docData")
}
DocumentChange.Type.MODIFIED -> {
Log.d("Firestore", "Updated Task: $docId => $docData")
}
DocumentChange.Type.REMOVED -> {
Log.d("Firestore", "Removed Task: $docId => $docData")
}
}
}
}Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Node.js
The author says: 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`.
Security
What our scanner noticed· Low risk
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Google LLC
- Publisher
- Firebase (Google) (Official)
- Distributed by
- Firebase (Google)
- Source
- firebase/agent-skills · skills/firebase-firestore · commit b76be96
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Google LLC or Firebase (Google).
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download firebase-firestore.zip