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/ios_setup.md
Firestore Enterprise Native Mode on iOS
This guide walks you through using the Cloud Firestore SDK in your iOS app using Swift.
⛔️ CRITICAL RULE: NO FirebaseFirestoreSwift ⛔️
UNDER NO CIRCUMSTANCES should you import, link against, or configure a project
to use FirebaseFirestoreSwift.
As of Firebase SDK v11+, all Swift-specific features (including @DocumentID,
@ServerTimestamp, and Codable support) have been fully merged into the main
FirebaseFirestore module.
NEVER add
.external(name: "FirebaseFirestoreSwift")or similar to SPM or Xcode configurations.NEVER write
import FirebaseFirestoreSwiftin any Swift file.ONLY use
import FirebaseFirestore.
This is a zero-tolerance constraint. Using FirebaseFirestoreSwift is
fundamentally incorrect and unacceptable.
⛔️ CRITICAL RULE: NO INLINE INITIALIZATION ⛔️
NEVER write let db = Firestore.firestore() or Firestore.firestore(database:)
as an inline class or struct property if there is ANY chance the object is
instantiated before FirebaseApp.configure() executes in the app root.
FATAL CRASH:
@Observable class DataManager { let db = Firestore.firestore() }initialized as a@Statein the App root.SAFE PATTERN: Initialize
Firestore.firestore()lazily (lazy var db = Firestore.firestore()) OR explicitly initialize the manager afterFirebaseApp.configure()finishes.
1. Import and Initialize
Ensure you have installed the FirebaseFirestore SDK. Use the
xcode-project-setup skill to automate adding the SPM dependency to the Xcode
project.
import FirebaseFirestoreInitialize an instance of Cloud Firestore. CRITICAL: Enterprise databases
require a custom database ID and cannot use the (default) instance.
// Replace "your-enterprise-database-id" with your actual database ID
let db = Firestore.firestore(database: "your-enterprise-database-id")2. Type-Safe Data Models (Codable)
To leverage modern Swift data modeling, define your data as Codable structs.
The main FirebaseFirestore module automatically supports mapping these types.
struct User: Codable {
@DocumentID var id: String?
var firstName: String
var lastName: String
var born: Int
}3. Basic CRUD Operations
The operations are identical to standard Firestore, but ensure you use the db
instance initialized with your Enterprise database ID.
Writing Data (Modern Concurrency & Codable)
let user = User(firstName: "Ada", lastName: "Lovelace", born: 1815)
do {
// Add a new document with a generated ID using Codable
let ref = try db.collection("users").addDocument(from: user)
print("Document added with ID: \(ref.documentID)")
} catch {
print("Error adding document: \(error)")
}Reading Data (Modern Concurrency & Codable)
do {
let querySnapshot = try await db.collection("users").getDocuments()
// Map documents to the User struct automatically
let users = querySnapshot.documents.compactMap { document in
try? document.data(as: User.self)
}
for user in users {
print("Found user: \(user.firstName) \(user.lastName)")
}
} catch {
print("Error getting documents: \(error)")
}4. Pipeline Queries
Firestore Enterprise supports Pipeline operations for complex queries.
Initialization
let pipeline = db.pipeline()Examples
// Return all documents across all collections in the database
let results = try await db.pipeline().database().execute()
// Filtered query
let results = try await db.pipeline()
.collection("cities")
.where(Field("name").equal(Constant("Toronto")))
.execute()
// Compound query
let results = try await db.pipeline()
.collection("books")
.where(Field("rating").equal(5) && Field("published").lessThan(1900))
.execute()5. Realtime Listeners in SwiftUI (Lifecycle Best Practices)
When implementing Firestore realtime listeners (addSnapshotListener) within a
SwiftUI application, you MUST tie the listener lifecycle to the view's
identity using .task(id:), NOT .onDisappear.
⛔️ UNSAFE PATTERN (.onDisappear)
Presenting a .sheet or .fullScreenCover can trigger the underlying view's
onDisappear method. If you stop your listener here, the feed will stop
updating while the sheet is open, and won't resume when it's dismissed.
✅ SAFE PATTERN (.task with deinit)
Because addSnapshotListener is a synchronous call, placing it inside a .task
means the task completes immediately. This breaks SwiftUI's automatic
cancellation mechanism.
To safely manage traditional Firebase listeners in SwiftUI, you must use
deinit to handle memory cleanup when the view is destroyed, and
.task(id:) to handle data identity changes while the view is active.
import SwiftUI
import FirebaseFirestore
@MainActor
@Observable
final class DataManager {
private var listenerHandle: ListenerRegistration?
var data: [String] = []
func startListening(for userId: String) {
// 1. Clean up any existing listener to prevent duplicates if the ID changes
stopListening()
// 2. Start the regular listener and capture the handle
// Note: Using the global default instance here, make sure to use your enterprise instance if applicable
// For enterprise, you might need to pass the db instance or use a shared manager.
listenerHandle = Firestore.firestore(database: "your-enterprise-database-id").collection("users").document(userId).addSnapshotListener { snapshot, error in
// Handle updates
}
}
func stopListening() {
listenerHandle?.remove()
listenerHandle = nil
}
// 3. Guarantee cleanup when the View is destroyed and this object is deallocated
isolated deinit {
stopListening()
}
}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