Workflows
Blocks
Database
Firebase

Firebase Database Block

What is Firebase?

Firebase is like a smart cloud database that updates in real-time everywhere at once. Built by Google, it's perfect for apps that need live updates - think chat apps, collaborative tools, or any app where users see changes instantly without refreshing the page.

When to Use Firebase

Perfect for:

  • Real-time chat applications
  • Live collaborative tools (like Google Docs)
  • Social media feeds and notifications
  • Live dashboards and monitoring
  • Mobile apps that sync across devices
  • Gaming leaderboards and multiplayer features

Not ideal for:

  • Complex data relationships and joins
  • Advanced querying and analytics
  • Large-scale data warehousing
  • Applications requiring ACID transactions
  • Highly regulated data (some compliance issues)

How It Works

  1. Connect to Firebase: Set up your project credentials
  2. Choose Collection: Select which data collection to work with
  3. Perform Operation: Add, get, update, or delete documents
  4. Real-time Updates: Changes sync instantly across all connected devices

Real-World Examples

💬 Real-Time Chat App

User Sends Message → Add to Firebase → All Users See Message Instantly

Messages appear instantly for everyone in the chat without page refresh

👥 Collaborative Whiteboard

User Draws Line → Update Firebase → All Connected Users See Drawing Live

Multiple users can work on the same document simultaneously

🎮 Live Gaming Leaderboard

Player Scores Points → Update Firebase → Leaderboard Updates for All Players

See rankings change in real-time as players compete

📊 Live Dashboard

New Data Arrives → Firebase Updates → Dashboard Charts Update Automatically

Monitor metrics that update live without manual refresh

Easy Setup Guide

🔌 Step 1: Firebase Project Setup

Get Your Credentials:

  1. Go to Firebase Console (opens in a new tab)
  2. Create or select your project
  3. Go to Project Settings → Service Accounts
  4. Generate new private key (downloads JSON file)

Required Information:

  • Project ID: Your Firebase project identifier
  • Service Account: JSON credentials file content
  • Database URL: Your Firestore database URL

⚙️ Step 2: Choose Your Operation

GET - Retrieve Documents:

Collection: "users"
Document ID: "{{user_id}}" (optional - gets all if empty)

SET - Create/Update Document:

Collection: "messages"
Document ID: "{{message_id}}" (auto-generated if empty)
Data: {
  "text": "{{message_text}}",
  "sender": "{{user_name}}",
  "timestamp": "{{current_time}}"
}

UPDATE - Modify Existing Document:

Collection: "users"
Document ID: "{{user_id}}"
Fields: {
  "last_active": "{{current_time}}",
  "status": "online"
}

DELETE - Remove Document:

Collection: "old_messages"
Document ID: "{{message_id}}"

🗂️ Step 3: Structure Your Data

Collections and Documents:

// Collection: users
{
  "user_123": {
    "name": "John Doe",
    "email": "john@example.com",
    "created_at": "2023-01-15T10:30:00Z",
    "profile": {
      "avatar": "avatar_url",
      "bio": "Software developer"
    }
  }
}
 
// Collection: chat_rooms
{
  "room_456": {
    "name": "General Discussion",
    "created_by": "user_123",
    "members": ["user_123", "user_789"],
    "last_message": "Hello everyone!"
  }
}
 
// Collection: messages
{
  "msg_001": {
    "room_id": "room_456",
    "sender_id": "user_123",
    "text": "Hello everyone!",
    "timestamp": "2023-01-15T14:30:00Z",
    "type": "text"
  }
}

Common Firebase Operations

📝 Creating Data

Add New User:

Collection: "users"
Document ID: "{{user_id}}" // or leave empty for auto-ID
Data: {
  "name": "{{user_name}}",
  "email": "{{user_email}}",
  "created_at": "{{timestamp}}",
  "settings": {
    "notifications": true,
    "theme": "light"
  }
}

Add Chat Message:

Collection: "messages"
Data: {
  "chat_room": "{{room_id}}",
  "sender": "{{user_id}}",
  "message": "{{message_text}}",
  "timestamp": "{{current_time}}",
  "read_by": []
}

Create Product Listing:

Collection: "products"
Data: {
  "name": "{{product_name}}",
  "description": "{{description}}",
  "price": {{price}},
  "category": "{{category}}",
  "seller_id": "{{user_id}}",
  "images": ["{{image_url1}}", "{{image_url2}}"],
  "available": true,
  "created_at": "{{timestamp}}"
}

🔍 Reading Data

Get Single Document:

Collection: "users"
Document ID: "{{user_id}}"
// Returns the user's complete profile

Get All Documents in Collection:

Collection: "products"
// Returns all products (use with caution for large collections)

Query with Conditions:

// Get products by category
Collection: "products"
Where: "category" == "{{selected_category}}"
Limit: 20
 
// Get recent messages
Collection: "messages"
Where: "chat_room" == "{{room_id}}"
Order By: "timestamp" DESC
Limit: 50

✏️ Updating Data

Update User Profile:

Collection: "users"
Document ID: "{{user_id}}"
Update Fields: {
  "last_active": "{{current_time}}",
  "status": "{{status}}",
  "settings.notifications": {{notification_preference}}
}

Mark Message as Read:

Collection: "messages"
Document ID: "{{message_id}}"
Update Fields: {
  "read_by": firebase.FieldValue.arrayUnion("{{user_id}}")
}

Update Product Availability:

Collection: "products"
Document ID: "{{product_id}}"
Update Fields: {
  "available": false,
  "sold_to": "{{buyer_id}}",
  "sold_at": "{{current_time}}"
}

🗑️ Deleting Data

Delete Old Messages:

Collection: "messages"
Where: "timestamp" < "{{cutoff_date}}"
// Delete messages older than cutoff date

Remove User Account:

Collection: "users"
Document ID: "{{user_id}}"
// This removes the entire user document

Working with Real-Time Features

🔴 Live Chat Implementation

Send Message Workflow:

1. User types message
2. Add to Firebase: {
   "room_id": "{{room_id}}",
   "sender": "{{user_id}}",
   "text": "{{message}}",
   "timestamp": firebase.FieldValue.serverTimestamp()
}
3. All connected users see message instantly

Listen for New Messages:

Collection: "messages"
Where: "room_id" == "{{current_room}}"
Order By: "timestamp" DESC
Limit: 50
Real-time: true // Messages appear as they're sent

👥 User Presence System

User Goes Online:

Collection: "users"
Document ID: "{{user_id}}"
Update: {
  "status": "online",
  "last_seen": firebase.FieldValue.serverTimestamp()
}

User Goes Offline:

Collection: "users"
Document ID: "{{user_id}}"
Update: {
  "status": "offline",
  "last_seen": firebase.FieldValue.serverTimestamp()
}

📊 Live Analytics Dashboard

Update Metrics:

Collection: "analytics"
Document ID: "{{metric_name}}"
Update: {
  "value": {{new_value}},
  "updated_at": firebase.FieldValue.serverTimestamp(),
  "trend": "{{up_or_down}}"
}

Dashboard Auto-Updates:

  • Connect dashboard to Firebase
  • Metrics update automatically when data changes
  • No need to refresh or poll for updates

Security and Rules

🔒 Firebase Security Rules

Basic User Data Protection:

// Only users can read/write their own data
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

Public Read, Authenticated Write:

// Anyone can read products, only authenticated users can write
match /products/{productId} {
  allow read: if true;
  allow write: if request.auth != null;
}

Chat Room Security:

// Only room members can read/write messages
match /messages/{messageId} {
  allow read, write: if request.auth != null && 
    request.auth.uid in resource.data.room_members;
}

Best Practices

For Performance

  • Limit Query Results: Use limit() to avoid loading too much data
  • Use Indexes: Create indexes for complex queries
  • Paginate Large Lists: Load data in chunks
  • Optimize Document Structure: Keep frequently accessed data together

🔒 For Security

  • Set Up Security Rules: Never leave your database open to all
  • Validate Data: Check data on the client AND server
  • Use Authentication: Require users to sign in
  • Audit Access: Monitor who accesses what data

💰 For Cost Management

  • Minimize Reads: Cache data when possible
  • Efficient Queries: Use compound queries instead of multiple simple ones
  • Clean Up Old Data: Delete unused documents
  • Monitor Usage: Keep track of read/write operations

🎯 For Data Organization

  • Flat Structure: Avoid deep nesting in documents
  • Consistent Naming: Use clear, consistent field names
  • Document Size: Keep documents under 1MB
  • Collection Organization: Group related data logically

Common Use Cases

💬 Chat Application

// Chat rooms collection
Collection: "chat_rooms"
{
  "room_id": {
    "name": "General",
    "members": ["user1", "user2"],
    "created_at": "timestamp",
    "last_activity": "timestamp"
  }
}
 
// Messages collection
Collection: "messages"
{
  "message_id": {
    "room_id": "room_id",
    "sender": "user1",
    "text": "Hello world!",
    "timestamp": "timestamp",
    "type": "text"
  }
}

🎮 Gaming Leaderboard

Collection: "leaderboard"
{
  "player_id": {
    "username": "ProGamer",
    "score": 15420,
    "level": 25,
    "achievements": ["first_win", "speed_demon"],
    "last_played": "timestamp"
  }
}
 
// Query for top players
Where: true
Order By: "score" DESC
Limit: 10

📝 Collaborative Notes

Collection: "documents"
{
  "doc_id": {
    "title": "Meeting Notes",
    "content": "Document content...",
    "collaborators": ["user1", "user2"],
    "last_modified": "timestamp",
    "version": 5
  }
}
 
// Real-time collaboration
Collection: "document_edits"
{
  "edit_id": {
    "document_id": "doc_id",
    "user": "user1",
    "action": "insert",
    "position": 145,
    "text": "New text",
    "timestamp": "timestamp"
  }
}

Troubleshooting

Connection Issues

Authentication Failed:

  • Check your service account JSON credentials
  • Verify project ID is correct
  • Ensure Firebase project is active

Permission Denied:

  • Review Firebase Security Rules
  • Check if user is authenticated
  • Verify user has required permissions

🔧 Common Problems

Real-time Updates Not Working:

  • Check if you're using real-time listeners
  • Verify network connectivity
  • Check Firebase console for service issues

Slow Queries:

  • Add appropriate indexes
  • Limit query results
  • Optimize document structure
  • Check query complexity

High Costs:

  • Monitor read/write operations
  • Implement caching strategies
  • Clean up unused data
  • Use efficient query patterns

Node Display

The Firebase block shows:

  • Collection Name: Which Firebase collection you're working with
  • Operation Type: GET, SET, UPDATE, DELETE
  • Document Count: Number of documents affected
  • Real-time Status: Whether real-time updates are active
  • Connection Status: Connected, error, or authenticating

Ready to add real-time magic to your workflows? Firebase makes it easy to build apps that update instantly across all devices!

Indite Documentation v1.4.0
PrivacyTermsSupport