firebase-deployer
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.
Packaged view
This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.
Install command
npx @skill-hub/cli install ainexllc-claudecodetraining-firebase-deployer
Repository
Skill path: .claude/skills/firebase-deployer
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.
Open repositoryBest for
Primary workflow: Run DevOps.
Technical facets: Full Stack, DevOps, Security.
Target audience: everyone.
License: Unknown.
Original source
Catalog source: SkillHub Club.
Repository owner: ainexllc.
This is still a mirrored public skill entry. Review the repository before installing into production workflows.
What it helps with
- Install firebase-deployer into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
- Review https://github.com/ainexllc/ClaudeCodeTraining before adding firebase-deployer to shared team environments
- Use firebase-deployer for development workflows
Works across
Favorites: 0.
Sub-skills: 0.
Aggregator: No.
Original source / Raw SKILL.md
---
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.