NewAppLander — App landing pages in 60s$69$39
The Swift Kit logoThe Swift Kit
Comparison

Supabase vs Convex vs Appwrite: Which BaaS for Your iOS App in 2026?

Firebase is not the only game in town anymore. Three serious backend-as-a-service platforms are competing for iOS developers in 2026. Here is an honest comparison of Supabase, Convex, and Appwrite covering everything that matters: database model, pricing, Swift SDK quality, real-time support, and self-hosting.

Ahmed GaganAhmed Gagan
15 min read

Quick Verdict

Choose Supabase if you want a relational PostgreSQL database with a mature Swift SDK, predictable pricing starting at $25/month, and the option to self-host. Choose Convex if real-time sync is the core of your app and you love TypeScript on the backend. Choose Appwrite if self-hosting and open-source control are non-negotiable. For most indie iOS developers, Supabase remains the strongest all-around choice. See our Supabase SwiftUI tutorial to get started.

Why These Three? The BaaS Landscape in 2026

For years, the backend conversation for iOS developers was simple: Firebase or build your own. Then Supabase showed up as the "open-source Firebase alternative" and genuinely earned that title. We covered the Supabase vs Firebase comparison in detail already.

But the BaaS landscape has gotten more interesting. Convex emerged as a TypeScript-native real-time backend that thinks about data differently than either Supabase or Firebase. Appwrite has matured into a serious open-source platform with a cloud offering and a self-hosted option that actually works in production.

Each platform makes fundamentally different architectural choices. Those choices affect your development speed, your monthly costs, and how flexible your app can be as it grows. Let me break down what each one actually is before we compare them head-to-head.

What Each Platform Actually Is

Supabase: PostgreSQL with Batteries Included

Supabase is an open-source backend platform built on top of PostgreSQL. You get a full relational database with auto-generated REST and GraphQL APIs, authentication (30+ OAuth providers including Apple and Google), file storage with built-in image transforms, Edge Functions (Deno-based serverless), real-time subscriptions via Postgres CDC, and pgvector for AI embeddings.

The philosophy is: give developers a standard, proven database (PostgreSQL) and wrap it with a great developer experience. Your data lives in real Postgres tables. You write real SQL. You can connect any Postgres client, use pg_dump for backups, and self-host the entire stack. If Supabase the company disappeared tomorrow, your data and schema would still be perfectly usable.

Convex: A Reactive TypeScript Database

Convex is a backend platform where you write your entire backend logic in TypeScript. Queries, mutations, and actions are TypeScript functions that run server-side inside the Convex runtime, with direct access to a document-oriented database. The defining feature is automatic real-time reactivity: every query is a live subscription by default, and any data change is pushed to connected clients instantly.

The philosophy is: eliminate the gap between frontend and backend. You write TypeScript on both sides, get end-to-end type safety, and never have to think about setting up real-time sync. Convex also includes file storage, scheduling, built-in auth integrations (Clerk, Auth0), and RAG components for AI search.

Appwrite: Open-Source and Self-Hosted First

Appwrite is an open-source backend platform that provides authentication (30+ OAuth providers), a document-based database (backed by MariaDB), file storage with encryption and image transforms, serverless functions in 30+ languages, real-time subscriptions, and messaging. It runs as a Docker Compose stack and can be self-hosted with a single command.

The philosophy is: give developers a Firebase-like experience with full open-source control and a clear path to self-hosting. You own your infrastructure, your data, and your destiny. Appwrite Cloud exists for convenience, but the self-hosted version has no feature restrictions.

The Full Comparison Table

Here is the side-by-side across every dimension that matters for iOS development:

FeatureSupabaseConvexAppwrite
DatabasePostgreSQL (relational, full SQL, JSONB)Document-oriented, accessed via TypeScript functionsDocument-based collections (MariaDB-backed)
Swift SDKOfficial, mature, async/await native, Sendable-correctOfficial, built on Rust client, supports queries/mutations/subscriptionsOfficial (sdk-for-apple), actively maintained, async/await support
Real-TimePostgres CDC via websockets. Manual subscription setup.Automatic. Every query is a live subscription by default.Channel-based subscriptions. Manual setup per resource.
Auth Providers30+: Email, Apple, Google, GitHub, SAML, custom OIDCVia integrations: Clerk, Auth0, custom JWT30+: Email, Apple, Google, GitHub, magic URLs, anonymous
File StorageS3-compatible, built-in image transforms, CDNBuilt-in file storage with URL generationBuilt-in with encryption, compression, image transforms
Serverless FunctionsEdge Functions (Deno/TypeScript), globally distributedTypeScript functions run inside the Convex runtime (queries, mutations, actions)Functions in 30+ languages and runtimes
TransactionsFull PostgreSQL ACID transactionsEvery operation is automatically ACID-compliantNo transaction support
Vector / AIpgvector built-in for embeddings and similarity searchBuilt-in vector search, RAG components, hybrid rankingNo native vector support
Self-HostingFully supported (Docker, Kubernetes)Not available. Managed cloud only.Fully supported (Docker Compose, single command)
Open SourceYes (Apache 2.0 for most components)Source-available (BSL license)Yes (BSD 3-Clause)
Type SafetyGenerated types from schema, PostgREST APIEnd-to-end TypeScript type inference, tRPC-style safetySDK types, no auto-generated schema types

Pricing: The Real Numbers

Pricing is where these platforms diverge significantly. Let me break down what you actually pay at different scales, not just what the marketing page says.

PlanSupabaseConvexAppwrite
Free Tier500 MB DB, 1 GB storage, 2 GB bandwidth, unlimited API requests1M function calls, 20 GB-hours compute, basic storage, up to 6 devsUnlimited projects, 75K MAU, 10 GB storage, no time limit
Paid TierPro: $25/mo base. 8 GB DB, 100K MAU, 100 GB storage included.Professional: $25/dev/mo. 25M function calls, 250 GB-hours compute.Pro: $15/mo per org member. More storage, bandwidth, priority support.
Overage ModelUsage-based: $0.00325/MAU, $0.125/GB DB, $0.09/GB egressPay-as-you-go beyond included limitsUsage-based beyond plan limits
EnterpriseCustom pricing, dedicated support, SLAComing soon. SOC 2 Type II, HIPAA compliant.Scale: $599/mo. Dedicated resources, SOC 2.

Pricing Analysis: What You Actually Pay

A few important observations about these pricing structures:

Appwrite has the cheapest entry point. At $15/month per organization member, it is the most affordable paid tier. And the free tier is remarkably generous with 75K MAU and unlimited projects. If you are a solo developer watching every dollar, Appwrite's cloud pricing is hard to beat. The self-hosted option is completely free with no feature restrictions, so if you have a $5/month VPS, your total backend cost is $5/month.

Supabase offers the most predictable scaling. The $25/month Pro plan includes enough resources for most production apps (8 GB database, 100K MAU). Overage charges are transparent and usage-based. Most small-to-medium production apps pay $35-75/month total. You will never get a surprise bill because of a query pattern change, since PostgreSQL does not charge per-read like Firestore does.

Convex's per-developer pricing can add up. At $25/developer/month, a solo dev pays the same as Supabase. But a team of four pays $100/month before any usage charges. The 1M free function calls sound generous, but a real-time app with active subscriptions can burn through those quickly. The startup program (up to 1 year free of Professional) is worth applying for if you qualify.

Swift SDK Quality: The Developer Experience

For iOS developers, the Swift SDK is where you spend your actual development time. A great backend with a bad SDK is a frustrating experience. Here is how each platform's Swift integration actually feels.

Supabase Swift SDK

The Supabase Swift SDK was built for modern Swift concurrency from day one. Every method is async throws, every type conforms to Sendable, and the API surface is clean and predictable. Authentication, database queries, storage operations, and real-time subscriptions all work through a single SupabaseClient instance.

Queries use a fluent builder pattern that maps closely to SQL:

let posts = try await supabase
    .from("posts")
    .select("id, title, author:users(name, avatar_url)")
    .eq("published", value: true)
    .order("created_at", ascending: false)
    .limit(20)
    .execute()
    .value

The SDK is well-documented, the GitHub repository is actively maintained by the Supabase team, and there are plenty of community examples. For a full walkthrough, see our Supabase SwiftUI tutorial.

Convex Swift SDK

The Convex Swift client library is built on top of the Convex Rust client, which gives it strong performance characteristics. You interact with your Convex backend using typed function calls. The SDK supports queries, mutations, actions, and (critically) real-time subscriptions through Combine's Publisher pattern.

let client = ConvexClient(deploymentUrl: "https://your-app.convex.cloud")

// Subscribe to real-time query results
let cancellable = client.subscribe(to: "listPosts")
    .sink { posts in
        self.posts = posts
    }

The SDK integrates with Clerk and Auth0 for authentication. It is well-maintained and documented, with example projects including a workout tracker app. The main limitation is that your backend logic must be written in TypeScript, so you are working across two languages (Swift on the client, TypeScript on the server) rather than a language-agnostic API.

Appwrite Apple SDK

Appwrite provides a dedicated SDK for Apple platforms (iOS, macOS, watchOS, tvOS) that is separate from their server-side Swift SDK. The SDK has been in development for four years with 42 releases and is actively maintained, with pull requests being merged as recently as this month.

The API follows a service-based pattern:

let client = Client()
    .setEndpoint("https://cloud.appwrite.io/v1")
    .setProject("your-project-id")

let account = Account(client)
let session = try await account.createEmailPasswordSession(
    email: "user@example.com",
    password: "password"
)

The SDK supports async/await and covers authentication, database operations, file storage, and real-time subscriptions. It is functional and reliable, though the developer experience is not quite as polished as Supabase's. The main gap is the lack of auto-generated types from your schema, which means more manual type definitions on the Swift side.

Real-Time Capabilities: A Critical Difference

Real-time data sync is increasingly important for modern apps. Chat features, collaborative editing, live dashboards, and social feeds all need some form of real-time updates. This is where the three platforms differ most dramatically.

Convex wins on real-time, and it is not close. Every query in Convex is automatically a live subscription. When any data changes on the server, connected clients receive the update instantly. There is no setup, no subscription management, and no middleware. If you build a query that returns a list of messages, that list updates in real time on every connected device the moment a new message is inserted. Convex can sustain sub-50ms read/write latency at 5,000 concurrent connections.

Supabase has solid real-time, but it requires explicit setup. You subscribe to changes on specific tables using Postgres Change Data Capture (CDC) via websockets. It works well for most use cases, but you need to configure which tables broadcast changes and set up listeners in your code. Under heavy concurrent load, latency can reach 100-200ms p99, which is fine for most apps but noticeable compared to Convex in high-frequency scenarios.

Appwrite supports real-time through channel subscriptions. You manually create subscriptions to Appwrite "channels" (databases, collections, documents, files). When data changes, your subscription fires. It is functional and reliable, but the most manual of the three approaches.

If real-time sync is the defining feature of your app (think collaborative whiteboard, live multiplayer game, or a Notion-style editor), Convex has a genuine architectural advantage. If you need real-time for notifications or a chat feature alongside a primarily CRUD app, Supabase or Appwrite will serve you perfectly well.

Database Model: The Fundamental Architecture Choice

This is where your decision gets made, because the database model affects everything from query complexity to data migration.

Supabase gives you PostgreSQL. That means tables, columns, foreign keys, joins, indexes, full-text search, JSONB for flexible schemas, and decades of tooling ecosystem. If your app has relational data (users have posts, posts have comments, comments have likes), PostgreSQL handles this natively and efficiently. You can run complex analytics queries, create materialized views, and use any Postgres extension. pgvector gives you AI embeddings support directly in your database.

Convex uses a document-oriented model accessed through TypeScript functions. You define schemas in TypeScript, and your queries and mutations are also TypeScript functions. The model is closer to MongoDB than PostgreSQL, but with the added benefit of automatic ACID transactions on every operation. It is not SQL. You cannot run arbitrary joins. But for apps with simpler data relationships, the tight TypeScript integration and automatic type safety can make development faster.

Appwrite uses a document-based collection model backed by MariaDB. You define collections with typed attributes (string, integer, boolean, enum, etc.) and query them through the Appwrite API. It keeps things simple for CRUD-heavy apps, but it can be limiting if you need complex joins, aggregations, or relational queries. There is no transaction support, which is a meaningful gap for apps that need atomic multi-document updates.

Database Rule of Thumb

If your data is relational (and most app data is), choose Supabase. If your app is primarily real-time with simpler data structures, choose Convex. If you want document-style simplicity with self-hosting control, choose Appwrite.

Authentication: Built-In vs. Bring Your Own

Authentication is table stakes for any backend. Here is how each platform handles it:

Supabase has built-in auth with 30+ providers. Sign in with Apple, Google, GitHub, email/password, phone/SMS, magic links, anonymous auth, and custom OIDC are all supported natively. The auth system integrates directly with Row Level Security (RLS), so your database permissions are tied to the authenticated user. The Pro plan includes 100K monthly active users.

Convex does not have built-in auth. Instead, it integrates with third-party providers like Clerk and Auth0. You set up authentication in the external service and pass JWT tokens to Convex. This adds a dependency (and potentially a cost), but it also means you get the auth provider's full feature set. Clerk's free tier allows 10K monthly active users, which is generous for an early-stage app.

Appwrite has built-in auth with 30+ OAuth providers, email/password, phone, magic URLs, and anonymous sessions. Auth integrates with Appwrite's permission system for database and storage access. The free tier supports 75K MAU, which is the most generous auth allowance of the three.

For iOS developers, Sign in with Apple is a requirement for apps that offer third-party login. All three platforms support it, though the integration path differs. Supabase and Appwrite handle it natively. Convex handles it through Clerk or Auth0.

Vendor Lock-In and Data Portability

This is one of those topics that does not feel urgent until it is. Here is the honest assessment:

Supabase: Low lock-in. Your data is in PostgreSQL. Run pg_dump and you have a complete backup that works with any Postgres host (AWS RDS, Neon, DigitalOcean, your own server). The entire Supabase stack is open-source and self-hostable. If you decide to leave, your migration path is clear and standard.

Convex: High lock-in. Your backend logic is written in Convex's TypeScript runtime. Your data is in Convex's proprietary document store. There is no self-hosting option. If you need to migrate, you are rewriting your backend from scratch and exporting data through the API. Convex is aware of this concern and offers data export tools, but it is not the same as running pg_dump and pointing to a new host.

Appwrite: Very low lock-in. The entire platform is open-source. You can run it on any infrastructure. The database (MariaDB) is standard and exportable. If Appwrite Cloud raises prices or shuts down, you spin up a Docker instance and point your app at it. This is the strongest portability story of the three.

When to Choose Each Platform

Choose Supabase When...

  • Your data is relational (users, posts, comments, likes, follows).
  • You want to write real SQL and use Postgres tooling.
  • Predictable pricing is important to you ($25/month gets you far).
  • You need AI/vector search (pgvector is built-in).
  • Data portability and self-hosting optionality matter.
  • You want the most mature Swift SDK of the three.

Choose Convex When...

  • Real-time sync is the core feature of your app (collaborative tools, live dashboards, multiplayer).
  • You love TypeScript and want end-to-end type safety.
  • You prefer a fully managed platform where you do not think about infrastructure at all.
  • Your data model is relatively simple (documents, not deeply relational).
  • You are comfortable with vendor lock-in for the convenience trade-off.

Choose Appwrite When...

  • Self-hosting is a hard requirement (regulatory, enterprise, or philosophical).
  • Open-source matters to you and your team.
  • You want the cheapest cloud option ($15/month per org member, or free self-hosted).
  • Your app is primarily CRUD with straightforward data access patterns.
  • You need serverless functions in a language other than TypeScript (Appwrite supports 30+ runtimes).
  • The most generous free tier MAU allowance (75K) appeals to you.

The Edge Cases: Where Each Platform Struggles

No platform is perfect. Here are the honest limitations:

Supabase struggles with high-frequency real-time sync. If your app needs sub-50ms updates at thousands of concurrent connections, Supabase's CDC-based approach can show higher latency than Convex. The Edge Functions are limited to Deno/TypeScript, so if you need Python or Go on the server side, you will need a separate service.

Convex struggles with complex relational data. If your app needs multi-table joins, complex aggregations, or full-text search across related entities, you will find yourself working around the document model. The lack of self-hosting and the per-developer pricing can also be deal-breakers for some teams. And the fact that your backend logic must be TypeScript means iOS-only teams need to learn (or tolerate) a second language ecosystem.

Appwrite struggles with relational queries and transactions. The document-based model does not support joins, and there is no transaction or atomic update support. The auto-generated schema types that Supabase and Convex offer are absent. And while the self-hosted option is great, it means you are responsible for uptime, backups, and scaling, which is real operational work.

My Recommendation for Most Indie iOS Developers

If you are building a new iOS app in 2026 and need a BaaS, I recommend Supabase as the default choice. Here is my reasoning:

  1. PostgreSQL is the safest database choice. Most apps have relational data. Postgres handles it natively, has 30+ years of battle-testing, and a massive ecosystem of tools and extensions. You will not outgrow it.
  2. The Swift SDK is the most mature. Async/await native, Sendable-correct, clean API surface. You spend less time fighting the SDK and more time building features.
  3. Pricing is predictable and fair. $25/month gets you a production-ready backend with 100K MAU. No per-developer charges. No surprises on your bill.
  4. Data portability is real insurance. You probably will not self-host. But knowing you can is peace of mind that has actual value.
  5. The ecosystem keeps growing. pgvector for AI, Edge Functions for serverless, real-time for live features. Supabase keeps adding capabilities without changing the fundamental PostgreSQL foundation.

That said, if real-time sync is the absolute core of your product (not a secondary feature, but the main thing), give Convex serious consideration. Its reactive model is genuinely superior for that specific use case. And if self-hosting on your own infrastructure is a hard requirement, Appwrite is the best option with the easiest setup.

Next Steps

Share this article

Ready to ship your iOS app faster?

The Swift Kit gives you a production-ready SwiftUI codebase with onboarding, paywalls, auth, AI integrations, and more. Stop building boilerplate. Start building your product.

Get The Swift Kit