20 Oct Firebase vs Supabase: Which one to choose?
Both Firebase and Supabase are Backend-as-a-Service (BaaS). In this article we’re going to take a look at them to see which one will fit your needs the best.
First, let’s compare the first things we can see on the surface:
Firebase Overview
Firebase is a platform by Google that provides a variety of tools and services for building and maintaining web and mobile applications. It offers backend services like databases, authentication, analytics, and more, helping developers reduce the amount of infrastructure management needed.
Key Features
Real-time Database: A NoSQL cloud database where data is synchronized in real-time across all connected clients.
Cloud Firestore: A scalable, flexible NoSQL database for storing and syncing data for client- and server-side development.
Firebase Authentication: Provides backend services for easy authentication using passwords, phone numbers, and popular social login methods (Google, Facebook, Twitter, etc.).
Firebase Hosting: Fast, secure hosting for web apps with support for custom domains and SSL.
Those are not the only features Firebase is offering. This is a short list of features that are most commonly used within firebase.
For a full list of features I recommend checking out Firebase website
Supabase Overview
Supabase is an open-source Firebase alternative that offers a suite of backend services to help developers build scalable web and mobile applications. It provides real-time databases, authentication, storage, and other services, all with the flexibility of SQL. Supabase is built on top of popular open-source technologies like PostgreSQL, making it a great option for developers who want the flexibility of SQL along with a modern, easy-to-use interface.
Key Features
PostgreSQL Database: A fully managed SQL database with real-time capabilities, built on top of PostgreSQL.
Real-time Subscriptions: Any changes in the database are pushed in real-time to connected clients via WebSockets
Authentication: Offers easy integration with social logins (Google, GitHub, etc.), and supports JWT (JSON Web Tokens) for custom authentication methods.
Supabase does not offer the all the features Firebase is offering, as you can see at a first look, Hosting is missing.
However, for a full list of what Supabase can do for you, check out Supabase website.
Database: Real-time vs SQL Flexibility
Firebase Realtime Database and Firestore
Firebase provides two types of databases: Realtime Database and Cloud Firestore. The Realtime Database is a NoSQL database that stores data in JSON format and syncs data across clients in real-time, while Cloud Firestore is a more flexible, scalable NoSQL database designed for larger applications, offering features like offline support and more powerful querying capabilities.
Here’s a simple example of how you might interact with Firebase Realtime Database using JavaScript:
import { initializeApp } from 'firebase/app'; import { getDatabase, ref, set } from 'firebase/database'; const firebaseConfig = { apiKey: "YOUR_API_KEY", authDomain: "YOUR_PROJECT_ID.firebaseapp.com", databaseURL: "https://YOUR_PROJECT_ID.firebaseio.com", projectId: "YOUR_PROJECT_ID", storageBucket: "YOUR_PROJECT_ID.appspot.com", messagingSenderId: "YOUR_MESSAGING_SENDER_ID", appId: "YOUR_APP_ID" }; const app = initializeApp(firebaseConfig); const database = getDatabase(app); function writeUserData(userId, name, email) { set(ref(database, 'users/' + userId), { username: name, email: email }); } writeUserData('1', 'John Doe', '[email protected]');
This code sets up a Firebase app and writes data to the Firebase Realtime Database. Firebase’s Realtime Database offers great simplicity and ease of use, but it lacks some advanced querying features compared to SQL-based systems.
Supabase PostgreSQL Database
Supabase uses PostgreSQL, which is a relational database with real-time features. If you’re familiar with SQL, this can be a big advantage since you have access to powerful querying, joins, and other SQL-specific capabilities. Supabase also allows you to listen for real-time changes in the database, similar to Firebase’s real-time database, but with SQL-based flexibility.
Here’s how you might interact with a Supabase database in JavaScript:
import { createClient } from '@supabase/supabase-js' const supabaseUrl = 'https://your-project.supabase.co'; const supabaseKey = 'public-anon-key'; const supabase = createClient(supabaseUrl, supabaseKey); async function insertUser() { const { data, error } = await supabase .from('users') .insert([ { username: 'John Doe', email: '[email protected]' } ]); if (error) console.error('Error inserting user:', error); else console.log('Inserted user:', data); } insertUser();
In this Supabase example, we use SQL to insert data into a users
table. Supabase provides a more traditional database experience with PostgreSQL while still offering the modern real-time functionality developers expect from Firebase.
Authentication
Firebase Authentication
Firebase offers a simple-to-use authentication service that supports social logins like Google, Facebook, and Twitter, as well as email/password login. Firebase Authentication also handles security concerns like managing sessions and tokens.
Here’s a code snippet to authenticate a user with Firebase using Google:
import { initializeApp } from 'firebase/app'; import { getAuth, signInWithPopup, GoogleAuthProvider } from 'firebase/auth'; const firebaseConfig = { // Firebase config... }; const app = initializeApp(firebaseConfig); const auth = getAuth(app); const provider = new GoogleAuthProvider(); signInWithPopup(auth, provider) .then((result) => { const user = result.user; console.log('User signed in:', user); }) .catch((error) => { console.error('Error during sign-in:', error); });
With Firebase, the setup is straightforward, but it relies heavily on its own ecosystem. If you’re using Firebase’s other services like Hosting and Database, this works seamlessly.
Supabase Authentication
Supabase also provides built-in authentication with support for social logins and JWT-based authentication. However, one key difference is that Supabase is designed to integrate more easily with any system that uses SQL, making it more flexible if you need custom authentication flows.
Here’s an example of how to sign in with GitHub using Supabase:
import { createClient } from '@supabase/supabase-js' const supabaseUrl = 'https://your-project.supabase.co'; const supabaseKey = 'public-anon-key'; const supabase = createClient(supabaseUrl, supabaseKey); async function signInWithGitHub() { const { user, session, error } = await supabase.auth.signInWithOAuth({ provider: 'github' }); if (error) console.error('Error during sign-in:', error); else console.log('User signed in:', user); } signInWithGitHub();
In this example, we use OAuth to authenticate a user via GitHub. Supabase authentication is flexible and can work with many different systems, giving you more control over your authentication workflows.
Hosting and Pricing
One key difference between Firebase and Supabase is that Firebase offers Firebase Hosting, a fully managed hosting solution for web apps. You can deploy static files and web applications with ease. In contrast, Supabase doesn’t offer a managed hosting solution, so you’ll need to find an alternative hosting provider if you go with Supabase.
In terms of pricing, Firebase offers a free tier with limited usage, while Supabase also has a free tier but it is often praised for being more generous with its limits. Firebase pricing scales based on usage, and certain services, like Firebase Firestore, can become expensive if not managed properly. Supabase pricing is based on database size, bandwidth, and real-time features.
I would recommend checking out both projects and decide which one fits your needs more.
No Comments