Firebase Deployer
When to Use
Activate this skill when:
- •Firestore query errors indicate missing indexes
- •User modifies
firestore.rulesorfirestore.indexes.json - •User requests "deploy firebase rules" or "deploy indexes"
- •Error messages mention "FAILED_PRECONDITION" or "composite index"
- •User says "deploy firebase", "push rules", or "update firestore"
- •New Firestore queries need composite indexes
- •Security rules need updating for new features
Instructions
Step 1: Identify What Needs Deployment
- •Check for modified files:
git status | grep -E "(firestore.rules|firestore.indexes.json)"
- •If query error occurred, extract index requirements from error message:
- •Collection name
- •Fields being queried
- •Order direction (ASCENDING/DESCENDING)
- •Query filters (array-contains, etc.)
Step 2: Update Index Configuration (if needed)
If missing index detected:
- •Read current indexes:
cat firestore.indexes.json
- •Add new index to
firestore.indexes.json:
{
"indexes": [
{
"collectionGroup": "collection_name",
"queryScope": "COLLECTION",
"fields": [
{
"fieldPath": "field1",
"order": "ASCENDING"
},
{
"fieldPath": "field2",
"order": "DESCENDING"
}
]
}
]
}
Step 3: Verify Firebase Project
- •Check current project:
firebase use
- •If project not set or wrong project:
firebase use project-id
- •Verify configuration:
firebase projects:list
Step 4: Deploy Rules and Indexes
Deploy both rules and indexes together:
firebase deploy --only firestore:rules,firestore:indexes
Or deploy separately:
# Deploy only indexes firebase deploy --only firestore:indexes # Deploy only rules firebase deploy --only firestore:rules
Step 5: Verify Deployment
- •Check index status:
firebase firestore:indexes
- •
Monitor index building (can take several minutes):
- •Indexes show as "Building" initially
- •Check Firebase Console for progress
- •Wait for "Ready" status before querying
- •
Test the query that triggered the error
Examples
Example 1: Deploy After Query Error
# Error received: # "The query requires an index. You can create it here: https://console.firebase.google.com/..." # Step 1: Extract index requirements from error URL # Collection: posts # Fields: userId (ASCENDING), createdAt (DESCENDING) # Step 2: Update firestore.indexes.json # (use Edit tool to add index) # Step 3: Deploy firebase deploy --only firestore:indexes # Step 4: Verify firebase firestore:indexes
Example 2: Deploy Modified Security Rules
# User modified firestore.rules to add new collection rules # Step 1: Verify changes cat firestore.rules # Step 2: Deploy rules only firebase deploy --only firestore:rules # Step 3: Verify in console # Check Firebase Console > Firestore > Rules
Example 3: Deploy Both Rules and Indexes
# User updated both rules and indexes # Deploy together for consistency firebase deploy --only firestore:rules,firestore:indexes # Verify both firebase firestore:indexes # Check console for rules
Example 4: Multi-Project Deployment
# Deploy to specific project firebase deploy --only firestore:rules,firestore:indexes --project production-id # Switch project for subsequent deploys firebase use staging-id firebase deploy --only firestore:rules,firestore:indexes
Best Practices
✅ DO:
- •Always verify current Firebase project before deploying
- •Deploy rules and indexes together when both changed
- •Test queries after index deployment completes
- •Check index status after deployment
- •Read error messages carefully to extract index requirements
- •Deploy to staging environment first (if available)
- •Wait for indexes to finish building before testing
- •Keep firestore.indexes.json in version control
❌ DON'T:
- •Don't deploy without checking current project
- •Don't assume indexes are ready immediately (they build asynchronously)
- •Don't deploy rules that could break production
- •Don't ignore index URL in error messages (contains exact requirements)
- •Don't delete indexes still in use by queries
- •Don't deploy without reviewing changes first
- •Don't forget to commit firestore.indexes.json after adding indexes
Index Configuration Tips:
- •
Query Scope:
- •
COLLECTION: Index for specific collection - •
COLLECTION_GROUP: Index across all collections with same name
- •
- •
Field Order:
- •List fields in query order
- •Use
ASCENDINGorDESCENDINGto match query - •Array-contains queries need special handling
- •
Compound Indexes:
- •Required for queries with multiple filters
- •Required for orderBy on different field than filter
- •Required for inequality filters on multiple fields
- •
Index Exemptions:
- •Single field ascending/descending: Auto-indexed
- •Simple equality queries: Usually auto-indexed
- •Check Firestore docs for exemption list
Security Rules Best Practices:
- •Default Deny:
match /{document=**} {
allow read, write: if false;
}
- •Authenticated Users:
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
- •Field Validation:
match /posts/{postId} {
allow create: if request.auth != null
&& request.resource.data.title is string
&& request.resource.data.title.size() <= 100;
}
Deployment Checklist
Before deploying:
- • Verified correct Firebase project
- • Reviewed changes to rules/indexes
- • Tested rules in Firebase Console simulator (if changed)
- • No breaking changes to production queries
- • Index configuration matches query requirements
- • Have backup of previous rules (git history)
After deploying:
- • Verified deployment success message
- • Checked index status (building/ready)
- • Tested queries that use new indexes
- • Monitored for errors in Firebase Console
- • Committed firestore.indexes.json changes
Troubleshooting
Issue: "Project not found" error
Solution: Run firebase use project-id or firebase projects:list
Issue: "Permission denied" during deployment
Solution: Re-authenticate with firebase login or check IAM roles
Issue: Index still showing as "Building" after long time Solution: Normal for large collections. Check Firebase Console for progress.
Issue: Query still failing after index deployment Solution: Verify index matches exact query requirements (field order, direction)
Issue: Rules deployment breaks existing queries Solution: Review rules for overly restrictive conditions. Test in simulator first.
Issue: Multiple index errors for same query Solution: Create single composite index with all required fields
Firebase CLI Commands Reference
# Project management firebase projects:list # List all projects firebase use project-id # Switch to project firebase use --add # Add project alias # Deployment firebase deploy --only firestore:rules # Deploy rules only firebase deploy --only firestore:indexes # Deploy indexes only firebase deploy --only firestore # Deploy both # Index management firebase firestore:indexes # List all indexes firebase firestore:indexes --status # Show build status # Verification firebase use # Show current project firebase projects:list # Verify project access # Authentication firebase login # Re-authenticate firebase logout # Sign out firebase login:list # List authenticated accounts
Integration with Development Workflow
- •
During Development:
- •Write Firestore queries
- •Note index errors
- •Add indexes to firestore.indexes.json
- •Deploy immediately
- •
Before Committing:
- •Ensure all indexes deployed
- •Verify rules match new features
- •Test queries in development
- •
Before Production Deploy:
- •Deploy indexes to production first
- •Wait for indexes to build
- •Then deploy application code
- •Verify queries work in production
Error Message Patterns
Common error messages that trigger this skill:
- •Missing Index:
The query requires an index. You can create it here: https://...
- •Failed Precondition:
FAILED_PRECONDITION: The query requires an index...
- •Permission Denied (rules issue):
Missing or insufficient permissions
- •Invalid Argument:
Cannot have inequality filters on multiple properties
Extract index requirements and deploy accordingly.