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.
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
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.rules` or `firestore.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
1. Check for modified files:
```bash
git status | grep -E "(firestore.rules|firestore.indexes.json)"
```
2. 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:
1. Read current indexes:
```bash
cat firestore.indexes.json
```
2. Add new index to `firestore.indexes.json`:
```json
{
"indexes": [
{
"collectionGroup": "collection_name",
"queryScope": "COLLECTION",
"fields": [
{
"fieldPath": "field1",
"order": "ASCENDING"
},
{
"fieldPath": "field2",
"order": "DESCENDING"
}
]
}
]
}
```
### Step 3: Verify Firebase Project
1. Check current project:
```bash
firebase use
```
2. If project not set or wrong project:
```bash
firebase use project-id
```
3. Verify configuration:
```bash
firebase projects:list
```
### Step 4: Deploy Rules and Indexes
Deploy both rules and indexes together:
```bash
firebase deploy --only firestore:rules,firestore:indexes
```
Or deploy separately:
```bash
# Deploy only indexes
firebase deploy --only firestore:indexes
# Deploy only rules
firebase deploy --only firestore:rules
```
### Step 5: Verify Deployment
1. Check index status:
```bash
firebase firestore:indexes
```
2. Monitor index building (can take several minutes):
- Indexes show as "Building" initially
- Check Firebase Console for progress
- Wait for "Ready" status before querying
3. Test the query that triggered the error
## Examples
### Example 1: Deploy After Query Error
```bash
# 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
```bash
# 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
```bash
# 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
```bash
# 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:
1. **Query Scope**:
- `COLLECTION`: Index for specific collection
- `COLLECTION_GROUP`: Index across all collections with same name
2. **Field Order**:
- List fields in query order
- Use `ASCENDING` or `DESCENDING` to match query
- Array-contains queries need special handling
3. **Compound Indexes**:
- Required for queries with multiple filters
- Required for orderBy on different field than filter
- Required for inequality filters on multiple fields
4. **Index Exemptions**:
- Single field ascending/descending: Auto-indexed
- Simple equality queries: Usually auto-indexed
- Check Firestore docs for exemption list
### Security Rules Best Practices:
1. **Default Deny**:
```javascript
match /{document=**} {
allow read, write: if false;
}
```
2. **Authenticated Users**:
```javascript
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
```
3. **Field Validation**:
```javascript
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
```bash
# 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
1. **During Development**:
- Write Firestore queries
- Note index errors
- Add indexes to firestore.indexes.json
- Deploy immediately
2. **Before Committing**:
- Ensure all indexes deployed
- Verify rules match new features
- Test queries in development
3. **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:
1. **Missing Index**:
```
The query requires an index. You can create it here: https://...
```
2. **Failed Precondition**:
```
FAILED_PRECONDITION: The query requires an index...
```
3. **Permission Denied** (rules issue):
```
Missing or insufficient permissions
```
4. **Invalid Argument**:
```
Cannot have inequality filters on multiple properties
```
Extract index requirements and deploy accordingly.
No comments yet. Be the first to comment!