Supabase, Firebase, Convex, Appwrite, Nhost and PocketBase ranked on database model, licence, self-hosting and how far each one goes before you outgrow it.
A backend-as-a-service gives a frontend or mobile app a database, auth, file storage and an API without running servers, and for a new app that is usually the right trade. The part that gets less attention is the exit. Most apps that succeed outgrow the BaaS in some way, and the database model picked on day one decides whether that step is a dump and restore or a rewrite of the data layer.
This guide ranks six platforms with that in mind: what they give you now, and what leaving them would take.
What a team needs from a BaaS:
Supabase is an open source BaaS built on Postgres, with auth, storage, edge functions and realtime, under the Apache 2.0 licence. Access control uses Postgres row-level security, with the rules stored in the database. The CLI runs the whole stack locally: supabase init and supabase start bring up Postgres, Auth, Realtime, Storage, Edge Functions and the APIs, and migrations live in the repository.
Because the data and the rules are both Postgres, the exit is the easiest in this list. The free plan includes a 500 MB database, 50,000 monthly active users, 1 GB of file storage and 5 GB of egress for up to two active projects, and free projects pause after a week of inactivity.
Good to know: security depends on writing correct row-level security policies, and self-hosting means running several services.
Firebase is Google's proprietary BaaS, with Firestore, Authentication, Cloud Storage, Cloud Functions and mature mobile SDKs with offline sync. Clients talk to Firestore directly, and security rules per collection decide what each user can read and write. The Spark plan is no-cost with usage limits, and the Blaze plan is pay as you go.
For a mobile app that lives on Google's stack, it is the strongest option here. The cost shows up later: it cannot be self-hosted, Firestore's document model makes relational queries harder, and moving off means rewriting data access and rules together.
Convex is a TypeScript-first backend where queries are functions and the client subscribes to them reactively. Its backend is self-hostable under the Functional Source License FSL-1.1-Apache-2.0, which converts to Apache 2.0 after two years. npx convex dev syncs the functions in a convex/ folder to a development deployment as you save, and the schema is TypeScript too. The free plan includes 1 million function calls a month.
For collaborative tools and live dashboards, reactive queries remove a lot of client code. The self-hosted backend includes most features of the cloud product, which is a real exit from the hosted service, but not from Convex's data model and query API.
Appwrite is an open source BaaS under the BSD 3-Clause licence, with databases, auth, storage, functions, messaging and realtime, and SDKs for many platforms. Self-hosting starts with a single docker run command that installs the stack. A free cloud project that reaches a plan limit is frozen, and its console becomes read-only until usage drops or the project upgrades.
Good to know: its database API is Appwrite's own, with no direct SQL access for app code.
Nhost combines Postgres, Hasura GraphQL, auth and storage under the MIT licence. Tables you create in Postgres show up in the GraphQL API, and permissions are set per role in Hasura. The data leaves as a Postgres dump, while the permissions live in Hasura. The free Starter plan allows one active project with a 1 GB database, 1 GB of storage and 5 GB of egress, and pauses after a week of inactivity. A REST-first team gets less from it.
PocketBase is a single Go binary with an embedded SQLite database, auth, file storage, realtime and an admin UI, under the MIT licence. ./pocketbase serve starts it, and it can also be used as a Go framework inside your own program, with JavaScript and Dart SDKs for clients. It costs only the server you run it on.
Good to know: it is still before version 1.0, and its maintainers do not recommend it for production-critical applications yet, nor guarantee backward compatibility before 1.0. A single SQLite file scales up on one machine, not out.
Most teams leave a BaaS for one of a few reasons. Business logic moves out of the client and into functions until the functions are the real backend. Background work, such as queues, retries and scheduled jobs, ends up in a second system. Compliance or data residency asks for the database to sit in an account the company controls. Or the bill grows with usage in a way that a plain database and a few services would not.
None of these mean the BaaS was the wrong start. They mean the next step is a backend you own, and the database model you picked on day one decides how hard that step is.
Choose the database first, since it is the hardest part to change later. Postgres platforms keep SQL and a standard dump format, document stores trade joins for simpler client access, and SQLite keeps everything in one file. Then check the licence and self-hosting story, and read the free tier rules on pausing and freezing before you launch.
Teams that reach that point usually want the database, the background jobs and the API in a cloud account they control. One option is Encore, an open source infrastructure SDK for TypeScript and Go where databases, Pub/Sub and object storage are declared in code and provisioned in your own AWS or GCP account. The schema from a Supabase or Nhost database becomes Encore migrations and the data loads from a Postgres dump, and apps can also be built as Docker images and run on your own infrastructure.
Run in your terminal to get started locally.
Supabase is the best general choice for most new apps, with Postgres, auth, storage and realtime under the Apache 2.0 licence. Firebase suits mobile apps on Google's stack, and Convex suits apps built around reactive queries in TypeScript.
Supabase, Convex, Appwrite, Nhost and PocketBase can all be self-hosted. Firebase is proprietary and runs only on Google's infrastructure.
Postgres-based platforms such as Supabase and Nhost are the easiest, since the data is in standard Postgres and can be dumped and restored elsewhere. Firestore and Convex use their own data models, which means rewriting data access.
Deploy to your cloud on AWS and Google Cloud
without managing infrastructure
Encore lets developers and agents define application infrastructure directly in code, then automatically provisions it from local development to production in your AWS or GCP account.