Stop Setting Up Servers. Start Shipping Code. (Supabase, Appwrite & The BaaS Revolution)

Published: (February 22, 2026 at 03:01 AM EST)
8 min read
Source: Dev.to

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

PrimitiveWhat It Does
DatabaseStore and query your data
AuthenticationUser sign‑up, login, OAuth, sessions
StorageFiles, images, documents
RealtimeLive updates pushed to clients
Functions / APICustom 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

FeatureDetails
DatabaseFull 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.
AuthEmail/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.
StorageS3‑compatible file uploads, image transformations, CDN delivery, and access policies that respect your auth rules.
RealtimeSubscribe to database changes and push updates to connected clients live – perfect for multiplayer, live dashboards, chat, etc.
Edge FunctionsDeploy TypeScript functions globally, close to your users. Deno‑based runtime.
Instant APIsEvery table gets auto‑generated REST and GraphQL endpoints the moment you create it. No controller code required.
MCP SupportAI tools (Claude Code, Cursor, …) can inspect your schema, suggest RLS policies, and write migrations.
Self‑hostingPossible 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

FeatureDetails
AuthAll standard flows plus anonymous users that convert to real accounts, phone/SMS auth, and built‑in teams/memberships.
DatabaseDocument‑model with collections and attributes. Not pure SQL, but supports relationships and indexing. Visual console is excellent for non‑technical teammates.
StorageFile buckets with permissions, image transformation (resize, crop, format), and built‑in virus scanning.
Functions30+ runtimes across 13 languages: Node, Python, PHP, Ruby, Go, Dart, .NET, Kotlin, Java, Bun, … You’re not limited to TypeScript/Deno.
MessagingExclusive to Appwrite: push notifications, email, and SMS under one API (no need to stitch together Twilio, SendGrid, FCM, etc.).
RealtimeSubscribe to any Appwrite event – DB changes, auth events, storage events, function completions.
SitesHost your frontend. Git‑connected deployments, preview URLs per branch – full‑stack in one place.
SecurityDDoS protection, encryption at rest & in transit, GDPR compliance, SOC‑2, HIPAA – defaults, not bolt‑ons.
Self‑hostingRequires 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

FeatureSupabaseAppwrite
DatabasePostgreSQL (full SQL)Document DB (NoSQL‑ish)
Auth✅ Excellent✅ Excellent
Storage✅ S3‑backed✅ Built‑in
Realtime✅ DB change streams✅ All events
FunctionsTypeScript/Deno13 languages, 30+ runtimes
Messaging❌ Not included✅ Push, Email, SMS
Frontend Hosting❌ Not included✅ Sites included
Self‑hosting✅ Complex (many containers)✅ Easier (Docker)
Best ForSQL lovers, complex queries, AI appsMulti‑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() or account.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

BaaSWhen to Choose
SupabaseWant the power of Postgres with auth, storage, realtime, and edge functions bundled together; comfortable writing SQL policies.
AppwriteNeed the widest platform support (especially mobile), built‑in messaging, frontend hosting, and a flexible function runtime.
PocketBaseWant 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

0 views
Back to Blog

Related posts

Read more »