Appwrite vs Supabase vs PocketBase 2026: The Open-Source Backend Showdown
# Appwrite vs Supabase vs PocketBase 2026: The Open-Source Backend Showdown
Every app needs a backend, and in 2026 you no longer have to choose between wiring one up by hand and renting a proprietary one you can never move. Three open-source projects now cover the whole "auth + database + realtime + storage + functions" surface, and all three you can self-host: Supabase, the Postgres-based Firebase alternative; Appwrite, the batteries-included multi-runtime BaaS; and PocketBase, an entire backend that ships as a single Go binary.
They solve the same problem from three very different philosophies — a relational platform, a full-featured BaaS, and a minimalist single file — and the right pick depends far more on your data model, your team, and your appetite for operations than on any feature checklist. If you build or sell production-ready templates, the backend is the decision a buyer inherits forever, so it is worth getting right.
Server infrastructure powering a modern open-source backend
The 30-Second Answer
Data Model: Postgres vs Documents vs SQLite
This is the decision underneath all the others.
Supabase is PostgreSQL, exposed. You design normal relational tables, write SQL, and get a REST API generated by PostgREST and a GraphQL endpoint for free. Access control is enforced by Postgres row-level security policies, which means your authorization rules live in the database and apply no matter which client calls in. If you already think in SQL — joins, constraints, migrations — Supabase feels like your database grew an API, not like a new paradigm. It also means your data is portable: a pg_dump moves it anywhere.
Appwrite is a document model. You create collections and define attributes and indexes through its Databases API; under the hood it stores documents in MariaDB, but you interact with a NoSQL-style API rather than raw SQL. Permissions are set per-collection and per-document with a role system (any, users, specific user or team). It is a clean model for app-shaped data and unifies nicely across web and mobile, though complex relational queries are less natural than in Postgres.
PocketBase is SQLite with a schema builder. You define collections in its admin UI (or via migrations), and it stores everything in a single embedded SQLite database. You get filtering, sorting, relations and API rules per collection, plus a first-class realtime feed. SQLite is astonishingly capable for a huge share of apps — but it is one file on one node, which shapes how PocketBase scales.
| **Supabase** | **Appwrite** | **PocketBase** | |
|---|---|---|---|
| Database | PostgreSQL | MariaDB (document API) | Embedded SQLite |
| Query model | SQL + auto REST/GraphQL | Document/collections API | Collections + filter API |
| Authorization | Row-level security (SQL) | Per-doc/collection roles | Per-collection API rules |
| Data portability | High (standard Postgres) | Medium (own API over MariaDB) | Medium (own API over SQLite) |
See PostgreSQL vs MySQL vs MongoDB for how those underlying engines compare on their own terms.
Auth
All three ship real authentication so you are not bolting on a separate provider.
If auth is the part you care most about on the web, it is worth reading Clerk vs Auth.js vs Better Auth too — sometimes the right answer is a dedicated auth layer in front of your backend.
Realtime, Functions & Storage
Realtime. Supabase streams Postgres changes (plus broadcast and presence channels) over WebSockets. Appwrite lets you subscribe to virtually any resource event — documents, files, accounts — over a realtime channel. PocketBase streams collection changes over server-sent events. All three are more than enough for live dashboards, chat and collaborative UIs.
Functions / server logic. This is where they diverge most:
// Supabase Edge Function (Deno) — supabase/functions/hello/index.ts
Deno.serve(async (req) => {
const { name } = await req.json();
return new Response(JSON.stringify({ message: `Hi ${name}` }), {
headers: { "Content-Type": "application/json" },
});
});pb_hooks) that run inside the process.Storage. All three provide file storage with access rules. Appwrite adds on-the-fly image transformations; Supabase Storage sits on S3-compatible infrastructure with a CDN; PocketBase stores files locally or on any S3-compatible bucket.
Self-Hosting & Scaling
Deploying a self-hosted backend to a server
PocketBase is the easiest thing to deploy in this entire category — copy one binary to a server, put it behind a reverse proxy, and you are done:
# Download, run, and you have a full backend + admin UI
./pocketbase serve --http="0.0.0.0:8090"Backups are essentially copying the SQLite file (pair it with Litestream for continuous replication). The tradeoff: it is single-node, so it scales vertically — a bigger box, not more boxes — which is fine for the large majority of apps but not for sudden horizontal scale.
Appwrite self-hosts from a single docker-compose stack that bundles the API, MariaDB, Redis and workers:
docker run -it --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \
appwrite/appwrite:latestOne command gets you the full product, and it is genuinely designed to be run this way by individuals and teams; it scales out by adding function and worker capacity.
Supabase is the heaviest to self-host — the stack is Postgres, GoTrue, PostgREST, the Realtime server, Storage, a Kong gateway and more. There is an official docker-compose, but keeping it patched, backed up and upgraded is real operational work, which is exactly why so many teams use Supabase Cloud even though the project is open source. On the flip side, managed Supabase scales further and more automatically than a hand-run PocketBase or Appwrite box ever will.
If you are weighing where to actually run any of this, Vercel vs Netlify vs Railway covers the frontend/host side, and Bun vs Node vs Deno matters for Supabase's Deno functions vs Appwrite's Node runtime.
Licenses & Pricing
| **Supabase** | **Appwrite** | **PocketBase** | |
|---|---|---|---|
| License | Apache 2.0 | BSD-3-Clause | MIT |
| Managed cloud | Yes (free + Pro ~$25/mo) | Yes (free + Pro) | No official cloud |
| Self-host cost | Free (heavy ops) | Free (one compose) | Free (one binary) |
| Lock-in risk | Lowest (standard Postgres) | Medium | Medium |
All three are permissively licensed, so you can self-host indefinitely with no fee. Supabase is the least locked-in at the data layer because your data is standard Postgres you can dump and move; Appwrite and PocketBase wrap portable databases (MariaDB, SQLite) in their own APIs, so leaving means rewriting the data-access layer.
The Decision Table
| Need | Best pick |
|---|---|
| Relational data, SQL, biggest ecosystem | **Supabase** |
| First-class Next.js / React on the web | **Supabase** |
| One backend for web **and** mobile (Flutter) | **Appwrite** |
| Functions in many languages | **Appwrite** |
| Built-in email / SMS / push messaging | **Appwrite** |
| Simplest possible self-host | **PocketBase** |
| MVP, internal tool, or a "clone this app" kit | **PocketBase** |
| Managed cloud that scales automatically | **Supabase** |
| Lowest data lock-in | **Supabase** (Postgres) |
| Ship a backend a buyer runs in one command | **PocketBase** |
How It Fits Your Stack
A backend never lives alone. Whichever you choose sits under a frontend framework and beside your other infrastructure choices — the best tech stack for web apps puts the whole picture together, and if you land on Supabase, the Neon vs Supabase vs PlanetScale comparison and the Next.js + Supabase SaaS template guide go a level deeper. Ready-made Supabase templates and starters show all of this wired up in context.
Why This Matters if You Sell Templates
The backend is the single biggest lever on whether a buyer succeeds with your code — and on how many support tickets you get. A Supabase starter meets buyers where most of them already are and is the most searched-for kind of SaaS template, at the cost of the buyer bringing their own project. A PocketBase kit can ship the backend *inside the download*: one binary next to the frontend, an admin UI on first run, and a non-expert buyer is live in minutes — fewer refunds, fewer questions. An Appwrite template is the move when the product spans web and mobile from one backend.
Whichever you pick, what actually sells is production-ready quality: clean auth, sensible security rules, seeded demo data and setup docs a stranger can follow — the bar buyers expect on CodeCudos.
The Bottom Line
Three open-source backends, three philosophies:
Choose Supabase for Postgres and reach, Appwrite for one backend across every platform, and PocketBase for the least ops possible — and remember that for a weekend project, the fastest working backend is worth more than the most scalable one.
Ready to turn what you build into income? List your Next.js, Supabase, Appwrite or PocketBase template on CodeCudos, wire the auth and security rules up properly, and ship something that reads as production-ready from the first run.
