Réponse rapide : Supabase pour 90 % des SaaS web (Postgres + Auth + RLS + always-on, prix prévisible, EU dispo). Neon si workflow Vercel + preview environments par feature. Firebase uniquement pour apps mobiles native temps-réel. Postgres bat Firestore sur quasi toutes les métriques en 2026 — flexibilité, coût, portabilité.
En résumé (TL;DR)
- Supabase : tout-en-un (DB + Auth + Storage + Realtime + RLS natif). Always-on, prix prévisible.
- Neon : Postgres serverless avec branching git-like. Scale-to-zero gratuit, cold start 0,5-30 s.
- Firebase : NoSQL temps-réel, SDK mobile excellent, mais facturation imprévisible et lock-in Google.
- Coût à 100K MAU : Supabase ~$50-100, Neon ~$130, Firebase ~$400-800 selon les reads.
- RLS Postgres = sécurité au niveau DB, protège même contre les bugs applicatifs.
- pgvector dispo sur Supabase et Neon = stockage embeddings RAG sans DB vectorielle séparée.
1. Comparatif 12 critères
| Critère | Supabase | Firebase | Neon |
|---|---|---|---|
| Modèle DB | Postgres relationnel | Firestore NoSQL | Postgres relationnel |
| Free tier (DB) | 500 MB | 1 GB Firestore | 500 MB |
| Free tier Auth | 50 000 MAU | Illimité (basique) | Pas d'auth (séparé) |
| Always-on / cold start | Always-on | Always-on | Cold start 0,5-30 s |
| Branching DB par feature | Limité (preview branches Pro) | Non | Oui (natif, illimité) |
| Realtime / WebSocket | Oui (Realtime channels) | Oui (natif Firestore) | Non (à coder) |
| Storage fichiers | Inclus (S3-compatible) | Inclus (Cloud Storage) | Non |
| Edge Functions | Oui (Deno) | Oui (Cloud Functions) | Non |
| Hébergement EU | Frankfurt, Paris | Multi-régions Google EU | Frankfurt |
| RLS (Row Level Security) | Oui (natif Postgres) | Security Rules (DSL custom) | Oui (natif Postgres) |
| pgvector / vector search | Oui | Vertex AI Vector Search (séparé) | Oui |
| Open-source / self-hostable | Oui (entièrement) | Non (Google managed) | Partiellement (Postgres standard) |
2. Tarifs 2026 et coût réel à 100 000 users
| Solution | Free tier | Plan suivant | Coût type 100K MAU |
|---|---|---|---|
| Supabase | 500 MB DB + 50K MAU Auth + 1 GB Storage | Pro $25/mois (8 GB DB inclus) | $50–100 / mois (avec compute add-on si charge) |
| Firebase | Spark : 1 GB Firestore + 50K reads/jour | Blaze pay-as-you-go (par read/write) | $400–800 / mois (très variable selon les reads) |
| Neon | 500 MB + 191 compute hours / mois | Launch $19/mois · Scale $69/mois | $130–250 / mois selon activité |
Le cas Firebase est trompeur. Sur le papier, le free tier semble généreux (1 GB Firestore, 50K reads/jour). En réalité, dès qu'un user ouvre une page qui liste 50 documents, vous comptez 50 reads. Pour 100K MAU avec 10 reads/MAU/jour = 1 M reads/jour = 30 M reads/mois → ~$120/mois Firestore, plus le coût des fonctions et du storage. Le doublement du trafic double exactement la facture, ce qui rend la planification délicate.
3. RLS : la feature qui change tout
Row Level Security est une feature Postgres native qui définit des règles d'accès au niveau de la ligne. Au lieu d'écrire WHERE user_id = current_user_id dans 50 endroits de votre code, vous écrivez UNE policy SQL et toutes les queries sont automatiquement filtrées.
Pattern type Supabase
-- Activer RLS sur la table
ALTER TABLE projects ENABLE ROW LEVEL SECURITY;
-- Policy : un user voit uniquement ses propres projets
CREATE POLICY "Users see own projects"
ON projects FOR SELECT
USING (auth.uid() = user_id);
-- Policy : un user crée des projets pour lui-même
CREATE POLICY "Users insert own projects"
ON projects FOR INSERT
WITH CHECK (auth.uid() = user_id);
-- Policy : update/delete uniquement ses projets
CREATE POLICY "Users update own projects"
ON projects FOR UPDATE
USING (auth.uid() = user_id);
CREATE POLICY "Users delete own projects"
ON projects FOR DELETE
USING (auth.uid() = user_id);
Une fois ces policies en place, le client Supabase côté front ne peut JAMAIS voir les données d'un autre user. Même si votre code applicatif a un bug, même si quelqu'un appelle l'API REST avec sa propre clé : la DB filtrera. C'est la sécurité ultime.
Avantages vs vérification applicative
- Centralisation : invariants de sécurité dans la DB, pas répliqués dans 20 routes.
- Defense in depth : même un bug code n'expose pas les données.
- Auditabilité : audit de sécurité = lecture des policies SQL.
- Multi-tenant facile : ajouter
org_iddans le RLS gère le multi-tenancy à zéro coût.
L'équivalent Firebase : Security Rules
// firestore.rules
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /projects/{projectId} {
allow read: if request.auth != null && resource.data.userId == request.auth.uid;
allow create: if request.auth != null && request.resource.data.userId == request.auth.uid;
allow update, delete: if request.auth != null && resource.data.userId == request.auth.uid;
}
}
}
Ça marche, mais c'est un DSL Firebase spécifique, plus difficile à auditer, à tester, à reuser que du SQL standard. Et vous ne pouvez pas le porter ailleurs.
4. Migration Firebase → Supabase : les étapes
Si vous décidez de quitter Firebase pour Postgres (Supabase ou Neon), voici la procédure standard. Comptez 1 à 1,5 semaine selon le volume de données et la complexité du code.
Semaine 1 : Schéma + export
- Lister toutes les collections Firestore (top-level + sub-collections).
- Pour chaque collection, dessiner une table Postgres équivalente. Sub-collections → table liée par foreign key.
- Exporter Firestore via
gcloud firestore exportou Firebase Admin SDK + script Node.js. - Données denormalisées Firestore → normalisées Postgres (split en plusieurs tables).
Semaine 2 : Import + tests
- Script de transformation : JSON Firestore → COPY Postgres.
- Validation des contraintes (unique, foreign keys).
- Tests sur un sous-ensemble : 1000 users, 10 000 documents.
Semaine 3 : Code refactoring
- Remplacer les imports
firebase/firestorepar@supabase/supabase-js. - Convertir les listeners
onSnapshot→ Supabase Realtime channels ou polling SWR. - Convertir les queries Firestore → SQL via Supabase client ou Drizzle/Prisma.
- Migrer les Cloud Functions → Supabase Edge Functions ou API routes Next.js.
Semaine 4 : Auth + Storage + Cutover
- Migrer Firebase Auth → Supabase Auth (réutilisation des UIDs si possible).
- Migrer Firebase Storage → Supabase Storage (copy SDK to SDK).
- Double-run : 24-48h avec écritures en double pour valider la cohérence.
- Cutover : DNS / config switch, monitoring intensif.
Semaines 5-6 : Cleanup
- Décommissionner Firebase (downgrade vers Spark plan, garder en lecture pour audit).
- Mettre à jour mentions légales / RGPD (changement de sous-traitant).
- Documenter le nouveau schéma + RLS policies.
Coût accompagnement Visionary : 5 600 à 17 500 € HT selon volume (nombre de collections, complexité du code, multi-tenant ou non, real-time ou non).
5. Choisissez Supabase si…
- Vous lancez un SaaS web standard (B2B ou B2C) et voulez tout-en-un.
- Vous voulez Postgres + Auth + Storage + Realtime sans assembler 4 services.
- Vous voulez RLS pour la sécurité multi-tenant.
- Vous voulez un prix prévisible (Pro $25/mois inclut beaucoup).
- Hébergement EU obligatoire (RGPD, secteur public).
- Vous voulez la portabilité Postgres (pouvoir déménager si besoin).
6. Choisissez Neon si…
- Vous travaillez en workflow Vercel et voulez une DB par preview environment.
- Vous lancez plusieurs micro-services qui auraient besoin de DB séparées (les branches Neon sont gratuites).
- Vos charges sont très intermittentes (le scale-to-zero gratuit fait sens).
- Vous gérez vous-même Auth + Storage ailleurs (vous voulez juste Postgres pur).
- Vous êtes confortable avec le risque de cold start (ou prêt à payer pour l'éviter).
7. Choisissez Firebase si…
- Vous développez une app mobile native (Flutter, iOS, Android) avec besoin temps-réel.
- Votre app a peu de logique business complexe — ce sont surtout des feeds temps-réel, des notifications, du chat.
- Vous êtes déjà dans l'écosystème Google Cloud Platform.
- Vous acceptez le coût variable + le verrouillage (sortie complexe).
La règle 2026 : Postgres par défaut, Firebase pour cas mobile temps-réel uniquement. Postgres a gagné la bataille du SaaS web. Le triplet Supabase + Next.js + Vercel est devenu le stack défaut français en 2026.
8. Pattern recommandé : Supabase + Drizzle + Next.js 15
Notre stack défaut chez Visionary pour les SaaS livrés en 2026 :
- Supabase Postgres pour la DB + Auth + Storage + Realtime (region Frankfurt pour RGPD).
- Drizzle ORM pour le schéma typé et les migrations (alternative moderne à Prisma, ~30 % plus rapide en runtime).
- RLS policies pour la sécurité multi-tenant.
- Next.js 15 App Router + Server Components pour le rendu serveur typé.
- Vercel pour le hosting (région Paris).
Setup typique en 1 journée pour un dev expérimenté : npm create supabase, schéma drizzle, push à Supabase, génération des types, premier composant qui fetch.
Exemple : query typée Drizzle + Supabase
// lib/db/schema.ts
import { pgTable, uuid, text, timestamp } from 'drizzle-orm/pg-core';
export const projects = pgTable('projects', {
id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(),
name: text('name').notNull(),
createdAt: timestamp('created_at').defaultNow().notNull(),
});
// app/projects/page.tsx (Server Component)
import { db } from '@/lib/db';
import { projects } from '@/lib/db/schema';
import { eq } from 'drizzle-orm';
import { verifySession } from '@/lib/dal';
export default async function ProjectsPage() {
const { userId } = await verifySession();
// RLS protège déjà côté DB, mais on filtre aussi explicitement
const items = await db.select().from(projects).where(eq(projects.userId, userId));
return (
<ul>
{items.map(p => <li key={p.id}>{p.name}</li>)}
</ul>
);
}
9. Mythes courants démontés
"Postgres ne scale pas" — faux
Postgres tient 100K+ writes/sec sur une instance dédiée moderne (16 vCPU). 99 % des SaaS n'atteindront jamais ces volumes. Si vous y arrivez, vous avez les ressources pour optimiser (indexes, partitioning, read replicas, Neon autoscaling). Stripe, Notion, OpenAI tournent sur Postgres.
"Firebase est plus simple à apprendre" — partiellement vrai
Le SDK Firebase est plus simple en apparence (pas de SQL à apprendre). Mais dès que nous dépassons les CRUD basiques, Firestore Security Rules + indexes composites + denormalization manuelle deviennent plus complexes que SQL. SQL est documenté, enseigné, audité depuis 50 ans. Le ROI d'apprentissage Postgres dépasse largement Firestore en 6 mois de pratique.
"Supabase, c'est juste un wrapper Postgres" — sous-estime la valeur
Supabase est en effet du Postgres, mais avec : Auth integrated, Storage S3-compatible, Realtime via WebSockets sur les changements de la DB, Edge Functions Deno, Vector embeddings, dashboard joli, RLS GUI. Reproduire tout cela soi-même prend 3-6 mois de dev. Supabase = stack SaaS complet.
10. Quoi tester avant de choisir
- Cold start (Neon) : créer un compte free, attendre 5 min d'inactivité, mesurer le temps avant la première réponse.
- Latence read/write : créer une table, insérer 1000 lignes, mesurer p50/p95/p99 lecture.
- RLS : implémenter une policy multi-tenant simple, vérifier qu'un user ne peut pas voir les données d'un autre via l'API REST.
- Migration : importer un dump de 100 MB, mesurer le temps.
- DX : générer les types TypeScript depuis le schéma, voir si l'autocomplete vous plaît.
- Coût simulé : entrer vos volumes attendus dans le tableur Visionary (lead magnet ci-dessus) ou dans les calculateurs officiels.
Questions fréquentes
Postgres ou Firebase NoSQL pour un SaaS en 2026 ?
Postgres dans 90 % des cas. Firebase Firestore reste pertinent pour les apps mobiles temps-réel avec des données très simples. Pour un SaaS B2B/B2C web, Postgres gagne sur la flexibilité, la portabilité, et le coût à scale.
Supabase ou Neon pour Postgres serverless ?
Supabase si vous voulez une plateforme tout-en-un (DB + Auth + Storage + Realtime + Edge Functions) avec instances always-on. Neon si vous voulez du Postgres pur avec scale-to-zero, branching git-like, intégration Vercel parfaite. En 2026, Supabase est le choix par défaut pour la plupart des SaaS.
Combien coûte une base de données SaaS à 100 000 users ?
Estimation pour 100K MAU avec ~1 GB de données par 1000 users + ~10 reads/MAU/jour : Supabase ~$50-100/mois, Neon ~$130/mois, Firebase $400-800/mois (très variable). À 100K MAU, Supabase est généralement le moins cher.
Le cold start de Neon (30 s) est-il un problème ?
Cela dépend de votre profil d'usage. Pour un SaaS B2B avec users dispersés dans le temps, le cold start peut frapper plusieurs fois par jour. Pour un SaaS qui a 1+ requête / 5 minutes en heures ouvrées, la DB reste warm. Neon a réduit le cold start à ~500 ms en 2025 pour les plans payants (Launch et Scale).
Qu'est-ce que Row Level Security (RLS) et comment l'utiliser ?
RLS est une feature Postgres native qui permet de définir des policies au niveau de la table. Sécurité ultime : même si votre code applicatif a un bug, la DB ne renvoie pas les données d'un autre user. Pattern type : CREATE POLICY "users see own data" ON projects FOR SELECT USING (auth.uid() = user_id);
Comment migrer de Firebase à Supabase ?
1-1,5 semaine de travail. 1) Schéma SQL équivalent (collections → tables). 2) Export Firebase + import Postgres. 3) Refactoring code (listeners → Realtime ou polling, queries Firestore → SQL). 4) Auth Firebase → Supabase. 5) Storage. Comptez 5 600-17 500 € HT pour un accompagnement complet.
Firebase est-il encore une bonne option en 2026 ?
Oui pour 2 cas : apps mobiles native temps-réel et apps avec beaucoup d'écritures temps-réel. Pour un SaaS web B2B/B2C standard, Firebase a 3 problèmes : verrouillage Google, facturation imprévisible, schéma NoSQL difficile à requêter.
Que penser de PlanetScale, Turso, Xata ?
PlanetScale (MySQL) : excellent en branching et performance, mais a fermé son free tier en 2024. Turso (SQLite distribué edge) : génial en latence globale. Xata (Postgres + search + AI) : bonne alternative tout-en-un mais plus jeune. Supabase reste le défaut pour 90 % des SaaS.
Postgres pgvector : pourquoi c'est important ?
pgvector est une extension Postgres qui permet de stocker des embeddings et faire des recherches similarity en SQL. Game-changer pour le RAG : pas besoin d'une DB vectorielle séparée. Supabase et Neon le supportent en natif. Pour 100K vecteurs : ~50ms p95.
Comment choisir entre les 3 en 2026 ?
SaaS B2B/B2C web standard : Supabase. SaaS avec preview environments / Vercel-first : Neon. App mobile native temps-réel : Firebase. Vous changez d'avis plus tard : Supabase ↔ Neon = facile (Postgres standard). Firebase ↔ Postgres = projet à part entière.
Architecture SaaS sur-mesure ?
Choix DB optimal, schéma + RLS, intégration Auth, monitoring. Stack production-ready en 1-2 semaines. Dès 5600 €.
Voir l'offre SaaS →