Comme dâhabitude, voici les conclusions pour ceux qui nâont pas le temps de toute lire đ
Quand choisir Firebase ?
|
Quand choisir Supabase ?
|
Si tu as plus de temps, je tâinvite bien Ă©videmment Ă tout lire, oĂč Ă te rendre directement Ă la partie conclusion pour un peu plus de dĂ©tails.
Introduction
Avant de comparer Firebase et Supabase, posons les bases. Parce que si tu dĂ©butes dans le dĂ©veloppement mobile, il y a de fortes chances pour que tu te demandes: câest quoi, exactement, un backend ?
Un backend, c'est quoi ?
Imagine ton application mobile comme un restaurant. Ce que lâutilisateur voit, câest la salle du restaurant : jolie, accueillante, oĂč tout se passe. Câest ce quâon appelle le frontend.
Mais derriĂšre, il y a la cuisine : lĂ oĂč on prĂ©pare les plats, oĂč on stocke les ingrĂ©dients, oĂč on gĂšre les commandes. Câest le backend. Lâutilisateur ne le voit jamais, mais sans lui, le restaurant ne peut pas fonctionner.
ConcrĂštement, le backend gĂšre :
- Le stockage des données: tous les profils utilisateurs, les contenus, les paramÚtres de ton app
- L'authentification: vérifier qui se connecte, gérer les mots de passe, les sessions
- La logique métier: calculer des stats, traiter des paiements, envoyer des notifications
- La synchronisation: faire en sorte que tes données soient à jour sur tous les appareils
Traditionnellement, crĂ©er un backend, câĂ©tait monter un serveur : louer une machine, installer une base de donnĂ©es, coder des APIs, gĂ©rer la sĂ©curitĂ©, sâoccuper des backups, surveiller les performances⊠Bref, un boulot Ă temps plein.
BaaS: Backend-as-a-Service
Câest lĂ quâinterviennent les BaaS (Backend-as-a-Service) comme Firebase et Supabase. LâidĂ©e ? Quelquâun dâautre gĂšre toute la complexitĂ© du backend pour toi.
Tu nâas pas besoin de :
- Configurer et maintenir des serveurs
- Gérer la scalabilité (si demain tu passes de 100 à 10 000 utilisateurs)
- Coder des systĂšmes d'authentification from scratch
- Te préoccuper de la sécurité des données et des backups
- Surveiller les performances et gérer les pannes
Ă la place, tu utilises des SDKs (des librairies de code) qui te permettent dâaccĂ©der Ă toutes ces fonctionnalitĂ©s en quelques lignes. Câest plug-and-play.
Pourquoi je me pose la question Firebase vs Supabase
Quand jâai dĂ©marrĂ© mes projets (Organizer et Habit Saga), jâai, je lâavoue, foncĂ© un peu tĂȘte baissĂ©e vers la premiĂšre solution que jâai trouvĂ©e. Et Firebase a rĂ©pondu parfaitement Ă mes attentes: relativement facile Ă prendre en main, la rĂ©fĂ©rence utilisĂ©e partout, beaucoup de docs et de tutos.
Mais au fil des mois, jâai commencĂ© Ă me poser des questions.
Les requĂȘtes complexes dans Firestore deviennent vite un casse-tĂȘte. Le pricing basĂ© sur lâusage me rend pas mal nerveuse. Et je me demande si je ne suis pas entrain de mâenfermer dans lâĂ©cosystĂšme Google sans vraie porte de sortie.
Supabase, de son cÎté, promet du SQL classique (ce que je connais déjà , ça a un cÎté rassurant), des prix plus prévisibles, et la possibilité de self-host si besoin.
Mais est-ce vraiment mieux ? Est-ce que ça vaut le coup de migrer ? Câest ce quâon va dĂ©cortiquer ensemble.
Tour d'horizon des deux solutions
Firebase: le vétéran de Google
Firebase, câest le mastodonte du backend-as-a-service. LancĂ© en 2011 puis rachetĂ© par Google en 2014, câest devenu LA rĂ©fĂ©rence pour les dĂ©veloppeurs mobile qui ne veulent pas se prendre la tĂȘte avec un backend.
LâidĂ©e de Firebase, câest simple : tu te concentres sur ton app, et Google gĂšre toute lâinfrastructure. Authentification, base de donnĂ©es temps rĂ©el, storage de fichiers, notifications push, analytics, crash reporting⊠bref, câest une suite complĂšte dâoutils intĂ©grĂ©s.
Le gros avantage, câest que tout est pensĂ© pour fonctionner ensemble. Tu configures lâauth Firebase, et automatiquement ta base de donnĂ©es Firestore peut utiliser ces infos dâauthentification pour gĂ©rer les permissions. Tu intĂšgres Firebase Analytics, et hop, tu peux cibler tes notifications push selon le comportement utilisateur. Câest un Ă©cosystĂšme cohĂ©rent et mature.
CÎté technologie, Firebase repose sur des bases de données NoSQL : Firestore pour les données structurées et Realtime Database pour le temps réel old school. Si tu viens du monde SQL avec tes belles tables et tes jointures, prépare-toi à un changement de paradigme.
Supabase: le challenger open-source
Supabase, câest le petit nouveau qui fait du bruit. LancĂ© en 2020, il se positionne clairement comme lâalternative open-source Ă Firebase. Dâailleurs, il ne sâen cachent absolument pas, comme le dĂ©montre leur tagline: âThe open source Firebase alternativeâ.
La philosophie de Supabase est diffĂ©rente : plutĂŽt que de rĂ©inventer la roue, ils utilisent des technologies Ă©prouvĂ©es et les assemblent intelligemment. Au cĆur de Supabase, il y a PostgreSQL - une vraie base de donnĂ©es relationnelle que tu peux interroger en SQL. Pour lâauth, ils utilisent GoTrue. Pour le storage, ils ont leur propre solution built on top de S3.
Le truc cool avec Supabase, câest que câest open-source. Si demain tu nâes pas content de leur hĂ©bergement, tu peux self-host lâintĂ©gralitĂ© de ta stack. Avec Firebase, tu es mariĂ© avec Google pour le meilleur et pour le pire.
Différence fondamentale d'approche
La vraie diffĂ©rence entre les deux, câest la philosophie de la base de donnĂ©es.
Firebase, câest du NoSQL. Tes donnĂ©es sont organisĂ©es en collections et documents, un peu comme du JSON. Câest flexible, câest rapide pour certaines opĂ©rations, mais dĂšs que tu veux faire des requĂȘtes complexes avec des relations entre plusieurs collections, ça devient vite le bordel. Et les jointures ? Oublie. Tu dois soit dĂ©normaliser tes donnĂ©es (dupliquer lâinfo Ă plusieurs endroits), soit faire plusieurs requĂȘtes et joindre cĂŽtĂ© client.
Supabase, câest du SQL classique avec PostgreSQL. Tables, relations, contraintes dâintĂ©gritĂ©, transactions, jointures⊠tout ce que tu connais dĂ©jĂ si tu as fait du dev backend. Câest plus rigide au dĂ©part, mais pour des structures de donnĂ©es complexes avec plein de relations, câest infiniment plus puissant.
Set up initial et prise en main
Bon, assez de thĂ©orie. Mettons les mains dans le cambouis et voyons ce que ça donne concrĂštement de dĂ©marrer un projet avec Firebase puis avec Supabase. Parce que la facilitĂ© de setup, câest quand mĂȘme un critĂšre important quand tu veux avancer vite et/ou que tu nâas pas beaucoup de temps.
Configuration du projet Firebase
Firebase, câest pensĂ© pour que tu sois opĂ©rationnel rapidement. Le setup se fait en plusieurs Ă©tapes, mais Google a bien balisĂ© le chemin.
Ătape 1 : CrĂ©er le projet dans la console Firebase
Tu vas sur console.firebase.google.com, tu cliques sur âAjouter un projetâ, tu choisis un nom. Firebase te demande si tu veux activer Google Analytics (dis-oui, câest gratuit et utile). Quelques clics, et ton projet existe.
Ătape 2 : Ajouter ton app Flutter
Dans la console Firebase, tu ajoutes une app (iOS et/ou Android). Firebase te génÚre des fichiers de configuration :
- google-services.json pour Android
- GoogleService-Info.plist pour iOS
Tu tĂ©lĂ©charges ces fichiers et tu les colles dans ton projet Flutteraux bons endroits (on part toujours du principe que tu codes comme moi en Flutter, mais sinon câest certainement trĂšs similaire), respectivement dans android/app/ et ios/Runner/.
Ătape 3 : Installer les packages Flutter
Dans ton pubspec.yaml, tu ajoutes les packages Firebase dont tu as besoin, un petit flutter pub get, et câest installĂ©.
Ătape 4 : Initialiser Firebase dans ton app
Dans ton main.dart, tu initialises Firebase avant de lancer lâapp :
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
Et voilĂ , techniquement, tu es prĂȘt. Tu peux commencer Ă utiliser Firebase Auth, Firestore, etc. Le petit piĂšge iOS : Sur iOS, il faut aussi configurer les capabilities dans Xcode (Push Notifications, Background Modes, etc.) et parfois jouer avec les certificates Apple.
Configuration du projet Supabase
Supabase, câest un setup diffĂ©rent, plus orientĂ© backend traditionnel. Mais eux aussi ont fait des efforts pour simplifier le process.
Ătape 1 : CrĂ©er le projet sur Supabase
Tu vas sur supabase.com, tu créés un compte (ou tu te connectes avec GitHub), et tu crées un nouveau projet. Tu choisis un nom, un mot de passe pour ta base de données, et une région (prends celle la plus proche de tes utilisateurs).
Supabase met environ 2 minutes Ă provisionner ton projet. Pendant ce temps, il crĂ©e ta base PostgreSQL, configure lâauth, le storage, gĂ©nĂšre les APIsâŠ
Ătape 2 : RĂ©cupĂ©rer tes credentials
Une fois le projet créé, tu vas dans Settings > API. Tu y trouves deux infos cruciales :
- L'URL du projet (genre https://xxxxx.supabase.co)
- La clé API anonyme (anon key) pour accéder aux APIs depuis ton app
Tu notes ça précieusement (ou mieux, tu les mets dans un fichier .env que tu ne commit surtout pas).
Ătape 3 : Installer le package Flutter
Dans ton pubspec.yaml, tu rajoutes le package supabase_flutter. Un seul package pour tout (auth, database, storage, realtime). Câest plus simple que Firebase qui a un package par fonctionnalitĂ©.
Ătape 4 : Initialiser Supabase dans ton app
Dans ton main.dart :
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Supabase.initialize(
url: 'https://ton-projet.supabase.co',
anonKey: 'ta-cle-anon-super-longue',
);
runApp(MyApp());
}
Et câest tout. Pas de fichiers de config Ă tĂ©lĂ©charger, pas de diffĂ©rence iOS/Android. Juste ton URL et ta clĂ©.
Premier contact : ce qui change
Firebase te force Ă penser âmobile firstâ. Tout est pensĂ© pour des apps mobiles qui appellent directement la base de donnĂ©es. Câest intuitif si tu viens de ce monde-lĂ .
Supabase te met dans une logique plus âweb/backendâ. Tu as une vraie base de donnĂ©es PostgreSQL que tu peux interroger en SQL directement depuis lâinterface. Câest plus flexible, mais ça demande de connaĂźtre un minimum SQL.
Authentification
Lâauthentification, câest la porte dâentrĂ©e de ton app. Si ça bug, tes utilisateurs ne vont mĂȘme pas passer la premiĂšre Ă©tape. Alors voyons comment Firebase et Supabase gĂšrent ça en pratique.
Firebase authentification
Firebase Auth, câest vraiment son point fort. Câest simple, câest robuste, et ça marche du premier coup (ou presque).
Les points forts
- Les erreurs sont bien gérées et documentées
- La vérification d'email est intégrée
- Tu peux forcer la mise Ă jour du mot de passe
- La gestion des sessions est automatique (tokens refresh, etc.)
- Intégration parfaite avec Firestore pour les rÚgles de sécurité
Les points faibles
- La personnalisation des emails est limités via des templates pré-définis
- Pas de contrĂŽle sur les rĂšgles de validation du mot de passe (Firebase impose son minimum)
- Si tu veux ajouter des données custom au profil utilisateur, tu dois les stocker dans Firestore à cÎté
Supabase authentification
CĂŽtĂ© Supabase, lâauthentification est basĂ©e sur GoTrue (un systĂšme dâauth open-source). Câest trĂšs bien fait, et Ă©tonnamment similaire Ă Firebase dans lâutilisation.
Les points forts
- Customisation complĂšte des emails (templates HTML)
- RĂšgles de mot de passe configurables dans les settings
- Tu peux stocker des métadonnées custom directement dans le profil auth, pas besoin d'une table séparée
- L'auth est automatiquement liée à PostgreSQL via Row Level Security
Les points faibles
- Les messages d'erreur sont moins structurés que Firebase
- Moins de ressources communautaires si tu bloques
Providers disponibles
Bon soyons francs, personne nâa encore envie de crĂ©er un Ă©niĂšme compte avec mot de passe. Donc vraiment, ajouter la possibilitĂ© de te connecter Ă ton app via des providers externes, câest une nĂ©cessitĂ©.
Les plus connus, Ă savoir Google, Apple, et Facebook, sont tous supportĂ©s par Firebase et Supabase. Et tu as encore dâautres options si tu le souhaites.
Mention spĂ©ciale: tu es obligĂ© dâajouter le sign-in with Apple du moment oĂč tu ajoutes un quelconque provider externe. Câest pas une obligation technique, mais juste une rĂšgle de lâApp Store.
Si ça tâintĂ©resse, je pourrai te faire un tuto complet sur la mise en place du provider Google, qui nĂ©cessite de configurer un OAuth dans la Google Cloud Console. Jâai franchement galĂ©rĂ© la premiĂšre fois⊠Et pourquoi pas Ă©galement sur la mise en place du provider Apple, qui lui nĂ©cessite de crĂ©er un ServiceID dans le portail dĂ©veloppeur Apple. NĂ©anmoins, ces deux passages obligatoires nâont rien Ă voir avec le backend et sont nĂ©cessaires si tu implĂ©mentes le provider Google/Apple sur Firebase comme sur Supabase, donc passons.
Base de donneés
Bon, on arrive au cĆur du sujet : la base de donnĂ©es. Câest lĂ que Firebase et Supabase divergent vraiment, et câest aussi lĂ que ton choix va avoir le plus dâimpact sur ton quotidien de dev.
Firestore vs PostgreSQL : philosophies opposées
Firestore, câest du NoSQL. Tes donnĂ©es sont organisĂ©es en collections (comme des dossiers) contenant des documents (comme des fichiers JSON). Pas de schĂ©ma fixe, pas de relations explicites, juste des objets imbriquĂ©s.
Exemple : tu peux créer une collection users avec des documents qui ressemblent à ça :
{
"uid": "abc123",
"name": "Lydia",
"email": "lydia@example.com",
"premium": true
}
Maintenant allons plus loin. Prends mon app Organizer. Chaque utilisateur peut crĂ©er des tĂąches. Alors, deux options: soit je les imbriques directement dans le document user (mais ça devient vite le bordel), soit je crĂ©e une collection sĂ©parĂ©e tasks avec un champ userId pour faire le lien (câest ce que jâai fait).
PostgreSQL avec Supabase, câest du SQL classique. Tes donnĂ©es sont organisĂ©es en tables avec des colonnes typĂ©es et des relations explicites.
Reprenons le mĂȘme exemple, dâabord pour lâutilisateur. On crĂ©e une table users :
CREATE TABLE users (
id UUID PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
premium BOOLEAN DEFAULT false
);
Et une table tasks reliée :
CREATE TABLE tasks (
id UUID PRIMARY KEY,
user_id UUID REFERENCES users(id),
title TEXT NOT NULL,
completed BOOLEAN DEFAULT false
);
La relation entre tasks et users est explicite via la foreign key UUID de lâuser_id.
RequĂȘtes simples : lecture/Ă©criture
Je trouve que regarder directement quelques requĂȘtes aide Ă avoir une vue un peu plus directe et âintuitiveâ de ce qui nous attend. Alors voici quelques exemples.
Firestore
Créer un document :
await FirebaseFirestore.instance.collection('tasks').add({
'userId': currentUser.uid,
'title': 'Acheter du lait',
'completed': false,
'createdAt': FieldValue.serverTimestamp(),
});
Lire des documents :
final snapshot = await FirebaseFirestore.instance
.collection('tasks')
.where('userId', isEqualTo: currentUser.uid)
.get();
final tasks = snapshot.docs.map((doc) => doc.data()).toList();
Mettre Ă jour :
await FirebaseFirestore.instance
.collection('tasks')
.doc(taskId)
.update({'completed': true});
Câest intuitif, ça ressemble Ă manipuler des objets JSON. Par contre, chaque opĂ©ration (read, write) te coĂ»te de lâargent. On y reviendra dans le pricing.
Supabase
Créer une ligne :
await Supabase.instance.client.from('tasks').insert({
'user_id': currentUser.id,
'title': 'Acheter du lait',
'completed': false,
});
Lire des lignes :
final response = await Supabase.instance.client
.from('tasks')
.select()
.eq('user_id', currentUser.id);
final tasks = response as List<dynamic>;
Mettre Ă jour :
await Supabase.instance.client
.from('tasks')
.update({'completed': true})
.eq('id', taskId);
Câest aussi simple que Firestore, mais avec une syntaxe qui rappelle SQL (.select(), .eq(), .update()). Si tu connais SQL, tu te sens tout de suite Ă lâaise.
Bon honnĂȘtement, les deux restent clairement accessibles.
RequĂȘtes complexes : filtres, jointures, agrĂ©gations
Augmentons la complexité, histoire de voir une différence.
Firestore
Imaginons que tu veux rĂ©cupĂ©rer toutes les tĂąches dâun utilisateur qui sont non complĂ©tĂ©es et créées aprĂšs une certaine date.
final snapshot = await FirebaseFirestore.instance
.collection('tasks')
.where('userId', isEqualTo: currentUser.uid)
.where('completed', isEqualTo: false)
.where('createdAt', isGreaterThan: lastWeek)
.get();
Ăa marche⊠mais seulement si tu as créé un index composite dans la console Firebase. Sinon, erreur. Et ces index, tu dois les crĂ©er manuellement pour chaque combinaison de filtres que tu veux utiliser.
Maintenant, imagine que tu veux faire une jointure. Genre rĂ©cupĂ©rer toutes les tĂąches avec les infos de lâutilisateur qui les a créées. Impossible en une requĂȘte. Tu dois faire :
// 1. Récupérer les tùches
final tasksSnapshot = await FirebaseFirestore.instance
.collection('tasks')
.get();
// 2. Pour chaque tùche, récupérer l'utilisateur
for (var taskDoc in tasksSnapshot.docs) {
final userId = taskDoc.data()['userId'];
final userDoc = await FirebaseFirestore.instance
.collection('users')
.doc(userId)
.get();
// Joindre manuellement cÎté client
}
Câest lent, câest moche, et ça te coĂ»te plein de lectures. La solution ? DĂ©normaliser : dupliquer les infos de lâutilisateur directement dans chaque document task. Mais maintenant, si lâutilisateur change de nom, tu dois mettre Ă jour toutes ses tĂąches⊠Et puis la dĂ©normalisation, on essaie dâĂ©viter, ou a minima de limiter.
Et les agrĂ©gations (compter, faire des sommes, des moyennes) ? Firestore nâen a presque pas. Tu dois tout ramener cĂŽtĂ© client et calculer toi-mĂȘme. Si tu as 10 000 tĂąches, tu tĂ©lĂ©charges les 10 000 juste pour en compter quelques-unes.
Supabase
Avec PostgreSQL, tout devient simple. Jointure ? Facile :
final response = await Supabase.instance.client
.from('tasks')
.select('*, users(*)') // RécupÚre la task ET l'utilisateur
.eq('user_id', currentUser.id);
Agrégation ? No problem :
final response = await Supabase.instance.client
.from('tasks')
.select('id', const FetchOptions(count: CountOption.exact))
.eq('completed', false);
final count = response.count; // Nombre de tùches non complétées
Tu peux mĂȘme faire des requĂȘtes SQL complexes directement :
final response = await Supabase.instance.client.rpc('get_user_stats',
params: {'user_id': currentUser.id}
);
OĂč get_user_stats est une fonction SQL que tu crĂ©es dans Supabase :
CREATE FUNCTION get_user_stats(user_id UUID)
RETURNS TABLE(total_tasks INT, completed_tasks INT, completion_rate FLOAT)
AS $$
SELECT
COUNT(*) as total_tasks,
SUM(CASE WHEN completed THEN 1 ELSE 0 END) as completed_tasks,
AVG(CASE WHEN completed THEN 1.0 ELSE 0.0 END) as completion_rate
FROM tasks
WHERE tasks.user_id = $1;
$$ LANGUAGE SQL;
Enfaite le terrain de jeu est beaucoup plus vaste.
Verdict sur les requĂȘtes complexes : Supabase gagne haut la main. Si ton app a des besoins simples (CRUD basique), Firestore fait le job. Mais dĂšs que tu veux des relations, des jointures, des stats⊠PostgreSQL nâa pas de concurrence.
Temps réel et synchronisation
Le temps rĂ©el, câest quand ta base de donnĂ©es te notifie instantanĂ©ment dĂšs quâune donnĂ©e change. Super pratique pour des apps collaboratives, des chats, ou juste pour rafraĂźchir lâUI sans recharger.
Firestore
Le temps rĂ©el, câest dans son ADN. CâĂ©tait mĂȘme sa feature principale Ă la base.
FirebaseFirestore.instance
.collection('tasks')
.where('userId', isEqualTo: currentUser.uid)
.snapshots()
.listen((snapshot) {
// Cette fonction est appelée à chaque changement
final tasks = snapshot.docs.map((doc) => doc.data()).toList();
updateUI(tasks);
});
Câest fluide, câest instantanĂ©, ça marche impeccablement. Par contre, attention : chaque fois que tu Ă©coutes un snapshot, tu paies pour chaque document lu, mĂȘme si câest juste une mise Ă jour. Si tu as 100 tĂąches et quâune seule change, tu paies quand mĂȘme pour 100 lectures.
Supabase
Supabase a ajoutĂ© le temps rĂ©el avec PostgreSQL (via des extensions comme pg_notify). Câest plus rĂ©cent, mais ça marche bien.
final subscription = Supabase.instance.client
.from('tasks')
.stream(primaryKey: ['id'])
.eq('user_id', currentUser.id)
.listen((data) {
// Appelé à chaque changement
updateUI(data);
});
Le truc cool : Supabase te dit quel type de changement a eu lieu (INSERT, UPDATE, DELETE). Avec Firestore, tu dois dĂ©duire ça toi-mĂȘme en comparant les snapshots.
Par contre, le temps rĂ©el de Supabase est encore un peu moins mature que Firestore. Parfois il y a des petits dĂ©lais, et la reconnexion aprĂšs une perte de rĂ©seau nâest pas toujours aussi smooth.
Stockage de fichiers
Au-delà des données structurées, tu as souvent besoin de stocker des fichiers : photos de profil, documents, images uploadées par les utilisateurs. Les deux plateformes proposent une solution de storage, mais avec des approches différentes.
Firebase Storage
Firebase Storage, câest du stockage de fichiers basĂ© sur Google Cloud Storage. Câest robuste, câest rapide, et ça sâintĂšgre parfaitement avec le reste de lâĂ©cosystĂšme Firebase.
Le truc, câest que Firebase Storage est assez basique. Tu peux upload, download, delete, et câest Ă peu prĂšs tout.
Pas de redimensionnement automatique dâimages. Si un utilisateur upload une photo de 10 MB, elle reste Ă 10 MB. Tu dois gĂ©rer ça cĂŽtĂ© client ou utiliser Firebase Cloud Functions (qui coĂ»tent plus cher).
Pas de transformation dâimages Ă la volĂ©e. Tu veux des thumbnails ? Tu dois les crĂ©er et les stocker manuellement. Tu veux servir lâimage en webp plutĂŽt quâen jpg ? Pareil, Ă faire toi-mĂȘme.
La gestion des mĂ©tadonnĂ©es est limitĂ©e. Tu peux dĂ©finir le content-type, des custom metadata, mais câest assez basique. Et niveau pricing, Firebase Storage te facture pour :
- Le stockage (Go/mois)
- Le bandwidth de download (Go téléchargés)
- Les opérations (nombre d'uploads, downloads, deletes)
Si ton app devient populaire et que les users tĂ©lĂ©chargent beaucoup dâimages, la facture peut grimper vite.
Supabase Storage
Supabase Storage est built on top de S3-compatible storage, mais avec des features modernes en plus. Câest assez similaire Ă Firebase. La syntaxe change un peu, mais le concept est le mĂȘme.
Par contre tu peux cette fois faire des transformation dâimages Ă la volĂ©e. Supabase gĂ©nĂšre automatiquement le thumbnail et le met en cache. Pas besoin de stocker plusieurs versions de lâimage, câest gĂ©rĂ© pour toi.
Avec Firebase, tout est dans un seul grand bucket. Avec Supabase, tu crĂ©es des buckets sĂ©parĂ©s (avatars, documents, images_posts, etc.). Câest plus organisĂ© et tu peux dĂ©finir des rĂšgles de sĂ©curitĂ© diffĂ©rentes par bucket.
Par contre, câest plus rĂ©cent que Firebase Storage, donc lâĂ©cosystĂšme est moins mature. Moins de tutos, moins de retours dâexpĂ©rience.
Gestion des permissions
La sĂ©curitĂ© du storage, câest critique. Tu ne veux pas que nâimporte qui puisse tĂ©lĂ©charger les photos privĂ©es de tes utilisateurs.
Firebase Storage Security Rules
Avec Firebase, tu dĂ©finis des rĂšgles de sĂ©curitĂ© basĂ©es sur lâauthentification. Câest plutĂŽt robuste. Tu peux vĂ©rifier lâauth, la taille du fichier, le content-type, et mĂȘme faire des requĂȘtes Ă Firestore pour vĂ©rifier des permissions complexes.
Par contre, debugger ces rĂšgles, câest parfois un enfer. Firebase a un simulateur dans la console, mais câest pas toujours Ă©vident de comprendre pourquoi une rĂšgle bloque.
Supabase Storage Policies (RLS)
Supabase utilise les Row Level Security policies de PostgreSQL, mais appliquées au storage.
Câest du SQL, donc si tu es Ă lâaise avec, câest trĂšs clair. Et tu as accĂšs Ă toute la puissance de PostgreSQL pour dĂ©finir des rĂšgles complexes basĂ©es sur des donnĂ©es dans dâautres tables.
Lâavantage de Supabase, câest que les permissions du storage et de la database utilisent le mĂȘme systĂšme (RLS). Une fois que tu as compris, tu appliques la mĂȘme logique partout.
En résumé sur le storage
Firebase Storage fait le job pour du stockage basique, mais manque de features modernes (ça peut quand mĂȘme largement suffir suivant le type dâapplications que tu construis). Supabase Storage est plus moderne avec les transformations Ă la volĂ©e et une meilleure organisation (buckets), mais câest plus rĂ©cent donc moins de retours dâexpĂ©rience. Pour les permissions, les deux sont puissants, juste avec des approches diffĂ©rentes.
Pricing : le nerf de la guerre
Bon, on arrive au sujet qui personnellement, mâaide souvent Ă faire mon choix: le princing.
Tarifs Firebase
Firebase fonctionne sur un modĂšle pay-as-you-go : tu paies ce que tu consommes. Ăa semble fair au dĂ©but, mais ça peut vite devenir stressant parce que tu ne sais jamais exactement combien tu vas payer.Avec le plan gratuit (Spark), tu as:
- Firestore : 50 000 lectures/jour, 20 000 écritures/jour, 1 GB de stockage
- Firebase Auth : Illimité (c'est gratuit !)
- Storage : 5 GB de stockage, 1 GB/jour de download
- Cloud Functions : Pas disponible sur le plan gratuit
Avec le plan payant (Blaze), les tarifs deviennent:
- Firestore:
- Lectures : 0,036 $ / 100 000 lectures
- Ăcritures : 0,108 $ / 100 000 Ă©critures
- Suppressions : 0,012 $ / 100 000 suppressions
- Stockage : 0,18 $ / GB / mois
- Firebase Storage :
- Stockage : 0,026 $ / GB / mois
- Download : 0,12 $ / GB
- Upload : gratuit
- Cloud Functions :
- 2 millions d'invocations gratuites, puis 0,40 $ / million
- Temps de calcul facturé selon les ressources utilisées
Le piĂšge, câest que chaque opĂ©ration compte. Tu Ă©coutes un snapshot Firestore en temps rĂ©el avec 100 documents ? Chaque fois quâun document change, Firebase te facture 100 lectures (tous les documents, pas juste celui qui a changĂ©).
Tarifs Supabase
Supabase fonctionne sur un modĂšle Ă paliers fixes avec des quotas. Câest plus prĂ©visible, mais moins flexible. Avec le plan gratuit (Free), tu as accĂšs Ă :
- 500 MB de database
- 1 GB de file storage
- 2 GB de bandwidth / mois
- 50 000 monthly active users
- Projets mis en pause aprÚs 7 jours d'inactivité (relancés automatiquement à l'utilisation)
Câest gĂ©nĂ©reux pour dĂ©marrer. Le truc des projets mis en pause peut ĂȘtre vraiment pĂ©nible pour une app en prod, mais pour tester ou un petit side project, câest top.
Avec le plan Pro (25 $ / mois), tu as accĂšs Ă :
- 8 GB de database
- 100 GB de file storage
- 250 GB de bandwidth / mois
- 100 000 monthly active users
- Pas de mise en pause
- Support email
- Daily backups (7 jours de rétention)
Et au-delĂ , tu paies des add-ons :
- Database : 0,125 $ / GB supplémentaire / mois
- Storage : 0,021 $ / GB supplémentaire / mois
- Bandwidth : 0,09 $ / GB supplémentaire
Et sinon tu as encore le plan Team (599 $ / mois) pour les grosses apps qui ont besoin de plus de ressources, de meilleurs SLAs, et de support prioritaire (on se souhaite dâarriver un jour à ça nâest-ce pas !).
OĂč ça peut exploser
Firebase : les piÚges à éviter
Tu lâas compris, avec Firebase, tu paies selon lâutilisation. Imagine toujours tes deux collections users et tasks. PiĂšge numĂ©ro 1: les snapshots en temps rĂ©el mal optimisĂ©s
// DANGEREUX : écoute toutes les tùches en temps réel
FirebaseFirestore.instance
.collection('tasks')
.snapshots()
.listen((snapshot) {
// Tu paies pour TOUTES les tĂąches Ă CHAQUE changement
});
// BON : limite et filtre
FirebaseFirestore.instance
.collection('tasks')
.where('userId', isEqualTo: currentUser.uid)
.where('completed', isEqualTo: false)
.limit(50)
.snapshots()
.listen((snapshot) {
// Tu paies seulement pour 50 documents max
});
PiĂšge numĂ©ro 2: les downloads dâimages non optimisĂ©es. Si tu ne redimensionnes pas les images, un user qui upload une photo de 10 MB et 1 000 personnes qui la voient = 10 GB de bandwidth = ~1,20 $. Multiplie ça par des milliers dâimages, et bonjour la facture. Solution : utilise Firebase Extensions (Image Resizing) ou redimensionne cĂŽtĂ© client avant lâupload.
PiĂšge numĂ©ro 3: les requĂȘtes inutiles. Enfaite il faut un peu switcher de point de vue, laisser un peu son cĂŽtĂ© purement dev et basculer du cĂŽtĂ© entrepreneur: on Ă©pure, on simplifie lĂ oĂč câest possible, et on ne lance pas des requĂȘtes Ă tout va juste parce que câest possible technologiquement.
Supabase : les piÚges à éviter
Bon cĂŽtĂ© Supabase, le pricing est beaucoup plus prĂ©visible, mais voici quand mĂȘme quelques piĂšges Ă Ă©viter.
Dâabord, Le bandwidth qui explose Si ton app sert beaucoup dâimages ou de vidĂ©os, ça peut aller trĂšs vite. 250 GB inclus dans le plan Pro, ça peut sâenvoler comme de rien. Solution : utilise un CDN devant Supabase Storage, ou compress tes images avec les transformations Supabase.
PiÚge numéro 2: la database qui grossit trop vite. 8 GB de database dans le plan Pro, ça semble beaucoup, mais si tu stockes des logs, des analytics, ou des données non nettoyées, ça se remplit vite. Solution : mets en place des politiques de rétention (supprimer les vieux logs automatiquement avec des CRON jobs Postgres).
Et pour finir: oublier de passer au plan Pro en prod. Le plan gratuit met ton projet en pause aprĂšs 7 jours dâinactivitĂ©. Imagine que ton app soit down parce que le projet Supabase sâest mis en pause⊠Pas ouf pour ta rĂ©putation. Solution : passe au plan Pro dĂšs que tu lances en prod, mĂȘme avec peu dâusers. 25 $/mois, câest le prix de la tranquillitĂ©.
Mon verdict pricing
- Pour démarrer (< 1K users) : Firebase est moins cher si tu optimises bien, mais Supabase est plus prévisible.
- Pour scaler (10K - 100K users) : Supabase devient nettement moins cher.
- Pour les grosses apps (> 100K users) : ça dépend vraiment de ton usage (lectures/écritures, storage, bandwidth), mais généralement Supabase reste plus avantageux.
Le vrai avantage de Firebase : tu paies vraiment ce que tu utilises, donc si ton app a peu de trafic, câest quasi gratuit.
Le vrai avantage de Supabase : le prix est prévisible, tu peux budgéter sans stress.
Conclusion : lequel choisir en 2026 ?
Alors, aprĂšs ce tour dâhorizon complet, Firebase ou Supabase ? Bon comme souvent, il nây a pas de rĂ©ponse universelle. Ăa dĂ©pend vraiment de ton contexte, de tes compĂ©tences, et de ce que tu veux construire.
Quand choisir Firebase
Tu dĂ©marres dans le dev mobile et tu veux du plug-and-play. Firebase, câest la solution âça marche out of the boxâ. La doc est partout, les tutos YouTube foisonnent, et si tu bloques, il y a 99% de chances que quelquâun ait dĂ©jĂ eu ton problĂšme sur Stack Overflow. Pour un premier projet, cette tranquillitĂ© dâesprit vaut de lâor.
Ton app a des besoins simples en base de donnĂ©es. Si tu fais du CRUD basique (crĂ©er, lire, modifier, supprimer) sans relations complexes entre tes donnĂ©es, Firestore est parfait. Une app de notes, un tracker dâhabitudes, une todo list⊠Firebase fait ça les yeux fermĂ©s.
Le temps rĂ©el est critique pour ton app. Si tu dĂ©veloppes un chat, une app collaborative en temps rĂ©el, ou nâimporte quoi oĂč la synchronisation instantanĂ©e est essentielle, Firebase est clairement plus mature sur cet aspect. Firestore snapshots, câest du bĂ©ton.
Tu veux un Ă©cosystĂšme tout intĂ©grĂ©. Firebase, câest pas juste une base de donnĂ©es. Câest aussi Analytics, Crashlytics, Performance Monitoring, A/B Testing, Remote Config, Cloud Messaging⊠Tout est pensĂ© pour fonctionner ensemble. Si tu veux une suite complĂšte sans rĂ©flĂ©chir, Firebase est ton ami.
Tu as un budget trĂšs limitĂ© au dĂ©but. Avec Firebase, tant que tu as peu dâutilisateurs, tu paies presque rien (voire rien si tu restes dans les quotas gratuits). Câest parfait pour valider une idĂ©e sans investir. Par contre, attention Ă bien optimiser pour Ă©viter que la facture explose si tu dĂ©collĂ©s.
Tu dĂ©veloppes pour Google Home, Android Auto, ou lâĂ©cosystĂšme Google. Si ton app sâintĂšgre profondĂ©ment avec les services Google, Firebase est le choix Ă©vident. LâintĂ©gration est native et tout fonctionne en harmonie.
Quand choisir Supabase
Tu viens du monde backend/web et tu connais SQL. Si tu as dĂ©jĂ fait du PostgreSQL, du MySQL, ou nâimporte quelle base relationnelle, Supabase sera immĂ©diatement familier. Tu retrouves tes jointures, tes transactions, tes triggers⊠Pas besoin de rĂ©apprendre un nouveau paradigme NoSQL.
Ton app a des besoins complexes en donnĂ©es. DĂšs que tu as des relations entre entitĂ©s (users â posts â comments â likes), des agrĂ©gations (stats, dashboards), ou des requĂȘtes complexes, PostgreSQL explose Firestore. Tu peux faire en une seule requĂȘte SQL ce qui demanderait 10 requĂȘtes et du code client avec Firestore.
Tu veux un pricing prĂ©visible. 25 $/mois avec Supabase, tu sais exactement ce que tu paies. Pas de surprise en fin de mois. Pour quelquâun qui lance un business, cette prĂ©visibilitĂ© est rassurante. Tu peux budgĂ©ter sereinement.
Lâopen-source et la portabilitĂ© comptent pour toi. Avec Supabase, tu nâes pas enfermĂ©. Si demain tu veux self-host, tu peux. Si tu veux migrer vers un autre provider PostgreSQL, câest possible. Avec Firebase, tu es mariĂ© Ă Google pour le meilleur et pour le pire.
Tu veux des features modernes (transformation dâimages, etc.). Les transformations dâimages Ă la volĂ©e, les upload resumables, les buckets organisĂ©s⊠Supabase Storage est plus moderne que Firebase Storage. Si ton app manipule beaucoup de mĂ©dias, câest un vrai plus.
Tu anticipes une croissance rapide. Si tu vises 10K+ utilisateurs rapidement, Supabase sera probablement moins cher Ă terme. Le pricing fixe avec add-ons devient vite plus avantageux que le pay-per-operation de Firebase.
Tu veux avoir le contrĂŽle total. Avec Supabase, tu peux Ă©crire du SQL brut, crĂ©er des fonctions, des triggers, des vues⊠Tu as accĂšs Ă toute la puissance de PostgreSQL. Câest plus de responsabilitĂ©, mais aussi plus de flexibilitĂ©.
Mon choix personnel
Bon, et moi, concrĂštement, quâest-ce que je fais ?
Quand je dĂ©marrerai un nouveau projet une fois quâOrganizer sera lancĂ©, je choisirai probablement Supabase. Pourquoi ? Parce que je connais dĂ©jĂ SQL, que le pricing prĂ©visible me rassure, et que jâaime lâidĂ©e dâĂȘtre sur une stack open-source. Il y aussi un peu de curiositĂ© de ma part, jâaime bien dĂ©couvrir de nouvelle chose et tester concrĂštement par moi-mĂȘme pour me faire une idĂ©e.
Mais est-ce que je migrerais Organizer et Habit Saga de Firebase vers Supabase ? HonnĂȘtement, non. Pas pour lâinstant. Pourquoi ?
Parce que mes apps tournent bien sur Firebase. Elles ont des besoins simples (pas de requĂȘtes complexes) et le temps rĂ©el fonctionne parfaitement (important avec la fonctionnalitĂ© famille dans Organizer). Migrer prendrait du temps (plusieurs jours de dev minimum), avec des risques de bugs, de perte de donnĂ©es, de downtime⊠ça me semble cher payer.
Bon bien sĂ»r, si ma facture Firebase commençait Ă monter (> 100 $/mois), je reconsidĂ©rerais sĂ©rieusement la migration. Et tu sais quoi ? Câest tout ce que je me souhaite, ça voudrait dire que mes apps attirent beaucoup dâutilisateurs !
Le mot de la fin : Firebase et Supabase sont tous les deux excellents. Ton choix doit dépendre de :
- Ton niveau de confort avec SQL vs NoSQL
- La complexité de tes besoins en données
- Ton budget et ta préférence pour du pricing fixe ou variable
- Ton attachement (ou pas) Ă l'open-source
Et surtout, rappelle-toi : le meilleur backend, câest celui qui te permet de shipper vite et de te concentrer sur ton produit, pas sur lâinfrastructure. Alors choisis, lance-toi, et arrĂȘte de procrastiner en comparant des technologies (je sais, câest tentant, mais faut se bouger đ).
VoilĂ , jâespĂšre que ça tâaide Ă y voir plus clair. NâhĂ©site pas Ă mâĂ©crire si tu nâes pas dâaccord sur un point ou si tu veux simplement discuter.
Ă la prochaine !
Commentaires