Does NestJS Work With Firebase?

Fully CompatibleLast verified: 2026-02-26

NestJS and Firebase integrate seamlessly, with Firebase providing authentication, real-time database, and hosting while NestJS handles backend logic and API structure.

Quick Facts

Compatibility
full
Setup Difficulty
Easy
Official Integration
No — community maintained
Confidence
high
Minimum Versions
NestJS: 9.0.0
Firebase: 9.0.0

How NestJS Works With Firebase

NestJS and Firebase work together naturally because Firebase is a backend-as-a-service platform that complements NestJS's role as an API framework. Developers typically use Firebase for authentication (Firebase Auth), real-time database (Firestore or Realtime Database), and file storage, while NestJS handles business logic, API routing, and microservices orchestration. You install the Firebase Admin SDK as an npm package and create a service in NestJS to wrap Firebase operations—this gives you dependency injection, error handling, and testability. The developer experience is smooth: you write NestJS controllers and services normally, inject the Firebase service, and call Firestore or Auth methods. The architecture is clean because Firebase handles infrastructure concerns (scaling, security rules, backups) while NestJS focuses on application logic. Token verification happens via Firebase Admin SDK middleware, and real-time updates can be streamed through WebSockets or HTTP long-polling if needed.

Best Use Cases

Real-time collaborative apps (NestJS API + Firestore for instant data sync)
Multi-tenant SaaS with Firebase Auth managing user identity and role-based access
Rapid MVP development where Firebase handles infrastructure and NestJS provides REST/GraphQL APIs
Social platforms combining Firebase messaging with NestJS business logic

Quick Setup

bash
npm install firebase-admin nestjs @nestjs/common @nestjs/core
typescript
// firebase.service.ts
import { Injectable } from '@nestjs/common';
import * as admin from 'firebase-admin';

@Injectable()
export class FirebaseService {
  private db = admin.firestore();
  private auth = admin.auth();

  async getUserById(uid: string) {
    const doc = await this.db.collection('users').doc(uid).get();
    return doc.exists ? doc.data() : null;
  }

  async createUser(email: string, password: string) {
    return this.auth.createUser({ email, password });
  }

  async verifyToken(token: string) {
    return this.auth.verifyIdToken(token);
  }
}

// app.module.ts
import { Module } from '@nestjs/common';
import * as admin from 'firebase-admin';

admin.initializeApp({
  credential: admin.credential.applicationDefault(),
  projectId: process.env.FIREBASE_PROJECT_ID,
});

@Module({
  providers: [FirebaseService],
  exports: [FirebaseService],
})
export class FirebaseModule {}

Known Issues & Gotchas

warning

Firebase SDK is large (~100KB+ min); cold start times can exceed 5 seconds on serverless functions

Fix: Use Firebase Cloud Functions (Node.js runtime) instead of external serverless, or accept higher latency; optimize with code splitting and lazy loading

warning

Firestore security rules and NestJS authorization logic can conflict or duplicate; developers often get confused about where to enforce access control

Fix: Enforce rules at Firestore level for data integrity, NestJS for business logic and rate limiting; never rely solely on one layer

critical

Firebase Admin SDK initializes synchronously on server start; if credentials are missing, the entire NestJS app fails to boot

Fix: Use environment variables with validation at startup; wrap initialization in try-catch and provide clear error messages; use NestJS ConfigModule

warning

Firestore charges per read/write; inefficient queries in NestJS can cause unexpected billing spikes

Fix: Use Firestore indexes, batch operations, and implement caching in NestJS; monitor usage via Firebase console

Alternatives

  • Express + Firebase: Similar setup but without NestJS's structure, decorators, and dependency injection; requires more manual scaffolding
  • NestJS + MongoDB Atlas: More control over backend logic but loses managed authentication and hosting; better for teams wanting full infrastructure ownership
  • Next.js + Firebase: Simpler for full-stack apps with file-based routing, but less modular for pure API backends

Resources

Related Compatibility Guides

Explore more compatibility guides