| name | firebase-deployer |
| description | Deploy Firebase Firestore security rules and indexes automatically. Use when Firestore query errors mention "requires an index", when firestore.rules or firestore.indexes.json are modified, or when user requests Firebase deployment. |
| allowed-tools | Bash, Read, Edit |
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 collectionCOLLECTION_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.