Stop Setting Up Servers. Start Shipping Code. (Supabase, Appwrite & The BaaS Revolution)
Source: Dev.to
The Pain of Traditional Backend Development
“You spend two days setting up authentication before writing a single line of business logic.
You configure a database. You wire up JWT tokens. You write password‑reset flows. You manage file‑upload endpoints. You handle CORS. You set up email verification. You configure environment variables in three different places.
And then — finally — you start building the thing you actually wanted to build.”
That’s the problem Backend‑as‑a‑Service (BaaS) platforms exist to solve. In 2024‑2026 the two names that keep coming up are Supabase and Appwrite.
A BaaS gives you the infrastructure primitives every app needs — already built, already secured, already scalable — so you can skip straight to your actual product.
Think of it like this: instead of building a kitchen from scratch every time you cook, someone hands you a fully equipped one. You just… cook.
Core Primitives Every BaaS Provides
| Primitive | What It Does |
|---|---|
| Database | Store and query your data |
| Authentication | User sign‑up, login, OAuth, sessions |
| Storage | Files, images, documents |
| Realtime | Live updates pushed to clients |
| Functions / API | Custom backend logic without managing servers |
Supabase
Tagline: “Build in a weekend. Scale to millions.”
Supabase is Postgres‑first – the most trusted relational database in the world. No proprietary format, no weird document‑store limitations. Real SQL, real joins, real indexes. Your data is always yours.
Features
| Feature | Details |
|---|---|
| Database | Full PostgreSQL. Use the visual table editor or write raw SQL. Supports views, materialized views, foreign tables, partitioned tables, stored procedures – the entire Postgres feature set. |
| Auth | Email/password, magic links, OAuth (Google, GitHub, Twitter, Apple, …), phone auth via SMS. Plug in with pre‑built UI components or the SDK. |
| Row‑Level Security (RLS) | Supabase’s super‑power (and biggest learning curve). Write Postgres policies that control which rows each user can read or modify. |
| Storage | S3‑compatible file uploads, image transformations, CDN delivery, and access policies that respect your auth rules. |
| Realtime | Subscribe to database changes and push updates to connected clients live – perfect for multiplayer, live dashboards, chat, etc. |
| Edge Functions | Deploy TypeScript functions globally, close to your users. Deno‑based runtime. |
| Instant APIs | Every table gets auto‑generated REST and GraphQL endpoints the moment you create it. No controller code required. |
| MCP Support | AI tools (Claude Code, Cursor, …) can inspect your schema, suggest RLS policies, and write migrations. |
| Self‑hosting | Possible but involves many Docker containers (Postgres, PostgREST, GoTrue, Realtime, Kong, …). Works, but it’s a lot of moving pieces. |
Example RLS Policy
create policy "Users can view own profile"
on profiles for select
using (auth.uid() = user_id);
Considerations
- RLS is powerful but not beginner‑friendly; expect a learning curve.
- Edge Functions run on Deno, not Node – a small adjustment if you’re coming from a pure Node background.
- Self‑hosting is complex; the managed cloud service removes that burden.
Appwrite
Tagline: “Developer‑experience‑first.”
Appwrite is built for teams that work across platforms – web, mobile (React Native, Flutter, iOS, Android), and server‑side – and want everything under one SDK.
Features
| Feature | Details |
|---|---|
| Auth | All standard flows plus anonymous users that convert to real accounts, phone/SMS auth, and built‑in teams/memberships. |
| Database | Document‑model with collections and attributes. Not pure SQL, but supports relationships and indexing. Visual console is excellent for non‑technical teammates. |
| Storage | File buckets with permissions, image transformation (resize, crop, format), and built‑in virus scanning. |
| Functions | 30+ runtimes across 13 languages: Node, Python, PHP, Ruby, Go, Dart, .NET, Kotlin, Java, Bun, … You’re not limited to TypeScript/Deno. |
| Messaging | Exclusive to Appwrite: push notifications, email, and SMS under one API (no need to stitch together Twilio, SendGrid, FCM, etc.). |
| Realtime | Subscribe to any Appwrite event – DB changes, auth events, storage events, function completions. |
| Sites | Host your frontend. Git‑connected deployments, preview URLs per branch – full‑stack in one place. |
| Security | DDoS protection, encryption at rest & in transit, GDPR compliance, SOC‑2, HIPAA – defaults, not bolt‑ons. |
| Self‑hosting | Requires Docker and some server‑management knowledge. Appwrite Cloud makes it seamless; self‑hosting is doable if budget matters. |
Considerations
- Appwrite’s database is document‑based (think structured MongoDB). If you need complex joins, reporting queries, or a relational data model, Supabase’s Postgres is a better fit.
- Self‑hosting is easier than Supabase (single Docker Compose) but still requires operational knowledge.
Quick Comparison
| Feature | Supabase | Appwrite |
|---|---|---|
| Database | PostgreSQL (full SQL) | Document DB (NoSQL‑ish) |
| Auth | ✅ Excellent | ✅ Excellent |
| Storage | ✅ S3‑backed | ✅ Built‑in |
| Realtime | ✅ DB change streams | ✅ All events |
| Functions | TypeScript/Deno | 13 languages, 30+ runtimes |
| Messaging | ❌ Not included | ✅ Push, Email, SMS |
| Frontend Hosting | ❌ Not included | ✅ Sites included |
| Self‑hosting | ✅ Complex (many containers) | ✅ Easier (Docker) |
| Best For | SQL lovers, complex queries, AI apps | Multi‑platform teams, mobile, polyglot stacks |
Rule of thumb:
- If your team thinks in SQL and relations → Supabase.
- If your team builds across multiple platforms or languages → Appwrite.
Bottom Line
Both platforms eliminate the tedious “two‑day auth setup” phase and let you focus on the product that matters. Choose the one whose data model and ecosystem align with your team’s skills and project requirements. Happy building!
Firebase (Google)
- Pros: Battle‑tested, huge SDK ecosystem, excellent offline support.
- Cons: NoSQL (Firestore), vendor‑locked to Google Cloud, pricing can surprise you at scale.
- New: Firebase Data Connect now adds Postgres + GraphQL, narrowing the gap with Supabase.
Best for: Mobile‑first apps, teams already in Google Cloud, real‑time experiences.
PocketBase
A single Go binary. Drop it on a server and it runs. Includes:
- Database (SQLite)
- Auth
- File storage
- Real‑time
- REST API with a built‑in admin UI
MIT licensed – completely free.
./pocketbase serve
# That's it. Your backend is running.
Caveat: SQLite isn’t suited for massive multi‑tenant SaaS. Perfect for side projects, internal tools, prototypes, or anything that doesn’t need horizontal database scaling.
Best for: Solo developers, prototypes, internal tools, small apps.
Nhost
Same idea as Supabase (Postgres under the hood) but everything goes through GraphQL via Hasura. If your team is GraphQL‑native and wants real‑time subscriptions in that workflow, Nhost feels very natural.
Best for: GraphQL‑first teams, JAMstack apps with real‑time needs.
Convex
A different mental model. Your backend logic lives in TypeScript functions that react to data changes automatically. No SQL policies, no REST endpoints to design—just reactive TypeScript functions. It’s genuinely elegant if you’re TypeScript‑first.
Best for: TypeScript‑heavy teams who want reactive patterns without policy‑based auth complexity.
Neon
Sometimes you just want serverless Postgres with branching, auto‑suspend when idle, and scale‑to‑zero pricing. Neon does exactly that—nothing more, nothing less. You bring your own auth (Clerk, Auth.js, etc.) and storage.
Best for: Teams who know what they need and want to assemble it themselves without a full BaaS bundle.
Decision Tree
Do you need complex relational queries / SQL?
├─ Yes → Supabase
└─ No → Keep going
Are you building for mobile + web + possibly other platforms?
├─ Yes → Appwrite (best multi‑platform SDK support)
└─ No → Keep going
Is this a small app, tool, or prototype?
├─ Yes → PocketBase (zero cost, zero ops)
└─ No → Keep going
Is your team GraphQL‑first?
├─ Yes → Nhost
└─ No → Keep going
Is your team TypeScript‑first and wants reactive patterns?
├─ Yes → Convex
└─ No → Supabase or Appwrite — pick based on DB preference
Why Use a BaaS?
Before BaaS
- Write auth logic.
- Design token systems.
- Implement password‑reset flows.
- Configure email.
- Set up file upload.
- Write access‑control middleware.
- Do all of this before building your actual product.
After BaaS
- Call
supabase.auth.signUp()oraccount.create()and move on.
The hours saved on infrastructure plumbing are redirected to the user‑facing features that make your product good. That’s the real argument for this category—not just that it’s easier (though it is), but that it radically changes where you spend your time.
Quick Recap
| BaaS | When to Choose |
|---|---|
| Supabase | Want the power of Postgres with auth, storage, realtime, and edge functions bundled together; comfortable writing SQL policies. |
| Appwrite | Need the widest platform support (especially mobile), built‑in messaging, frontend hosting, and a flexible function runtime. |
| PocketBase | Want to move fast on a smaller project without any monthly bill. |
The best BaaS is the one that removes friction for your stack and team. All three do it well—the differences are in the details.
What are you currently using for your backend?
Curious what the dev.to community has landed on—drop it in the comments.
by md8‑habibullah
Tags: supabase appwrite webdev backend beginners