Does Firebase Work With Netlify?
Firebase and Netlify work together seamlessly for building modern JAMstack applications with serverless backends and real-time databases.
Quick Facts
How Firebase Works With Netlify
Firebase and Netlify are complementary services that solve different layers of modern web development. Netlify handles your front-end hosting, CI/CD pipeline, and edge functions, while Firebase provides the backend infrastructure: authentication, Firestore/Realtime Database, and Cloud Functions. The typical architecture has your React/Vue/Next.js app deployed to Netlify, which then makes API calls to Firebase services. Firebase SDKs run directly in the browser for real-time features, or you can use Netlify Functions to create a secure middleware layer that authenticates requests before hitting Firebase. This combination is particularly powerful because Netlify's build process can access Firebase Admin SDK, allowing you to pre-generate static content with real-time data. The developer experience is smooth—environment variables sync easily between platforms, and both have excellent local development stories.
Best Use Cases
Firebase + Netlify Setup with Authentication
npm install firebase netlify-cli// netlify/functions/protected-endpoint.ts
import { Handler } from '@netlify/functions';
import * as admin from 'firebase-admin';
admin.initializeApp();
export const handler: Handler = async (event) => {
const token = event.headers.authorization?.split(' ')[1];
if (!token) {
return { statusCode: 401, body: 'Missing token' };
}
try {
const decoded = await admin.auth().verifyIdToken(token);
const db = admin.firestore();
const doc = await db.collection('users').doc(decoded.uid).get();
return {
statusCode: 200,
body: JSON.stringify({ user: decoded, data: doc.data() })
};
} catch (error) {
return { statusCode: 403, body: 'Invalid token' };
}
};
// src/app.tsx (Client-side)
import { initializeApp } from 'firebase/app';
import { getAuth, signInWithPopup, GoogleAuthProvider } from 'firebase/auth';
const app = initializeApp({
apiKey: import.meta.env.VITE_FIREBASE_API_KEY,
projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID
});
const auth = getAuth(app);
export async function loginAndFetchData() {
const credential = await signInWithPopup(auth, new GoogleAuthProvider());
const token = await credential.user.getIdToken();
const response = await fetch('/.netlify/functions/protected-endpoint', {
headers: { authorization: `Bearer ${token}` }
});
return response.json();
}Known Issues & Gotchas
Firebase client SDK bundle size can bloat your JavaScript (80-150KB gzipped)
Fix: Use dynamic imports, tree-shake unused services, or consider the modular SDK format. Netlify Functions can handle auth/database operations server-side to reduce client-side Firebase exposure.
Cold starts on Netlify Functions may delay Firebase operations that need immediate response
Fix: Use background functions for non-critical operations. For time-sensitive auth, rely on Firebase client SDK directly in the browser.
Firebase security rules are client-side validated by SDK; Netlify Functions bypass them if you're not careful
Fix: Always authenticate in Netlify Functions using Firebase Admin SDK and verify ID tokens before database operations. Never trust client claims.
Environment variables containing Firebase private keys must be marked as 'sensitive' in Netlify to avoid exposure in build logs
Fix: Use Netlify UI to set sensitive variables, never commit .env files. Use separate Firebase projects for dev/prod.
Alternatives
- •Supabase + Vercel: PostgreSQL-based alternative with similar ease of use and tighter Vercel integration
- •AWS Amplify + AWS Hosting: Amazon's opinionated full-stack solution with more granular control
- •Appwrite + Heroku/Railway: Self-hosted backend option with more customization but higher operational overhead
Resources
Related Compatibility Guides
Explore more compatibility guides