Serverpod vs Appwrite
Serverpod is an open-source alternative to Appwrite for Flutter teams. Both can be self-hosted, but with Serverpod, the backend is your own Dart code connected to a PostgreSQL database.
Serverpod vs Appwrite at a glance
Both are open-source, self-hostable, and Flutter-friendly. The difference is the model. Appwrite is a prebuilt service suite that you integrate with via an SDK, and Serverpod is a framework in which the backend is your own Dart code.
| Capability | Serverpod | Appwrite |
|---|---|---|
| Language | ✓ Dart on the server and the client | ✓ Flutter SDK, Dart function runtime |
| Type safety | ✓ End-to-end, checked at compile time | ✗ Rows as maps, optional codegen |
| Database | ✓ PostgreSQL you own, direct SQL | ✗ API-only TablesDB on MariaDB |
| Authentication | ✓ Email, social sign-in, and passkeys | ✓ Accounts, teams, and OAuth |
| Real-time | ✓ Typed WebSocket streams | ✓ WebSocket channel subscriptions |
| Messaging | ✗ External service needed | ✓ Push, SMS, and email campaigns |
| Self-hosting | ✓ One server and PostgreSQL | ✓ Docker Compose suite of services |
| Open source | ✓ BSD-3 packages, SSPL server | ✓ BSD-3 |
| Pricing model | Free to self-host, flat Cloud tiers | Free tier, Pro from $25 plus usage |
What is Appwrite?
Appwrite is an open-source backend-as-a-service: databases, accounts and teams, storage, functions, realtime, messaging, and static hosting, managed from a polished console. You can run it yourself with Docker or use Appwrite Cloud. It suits teams that want a ready-made backend suite with an admin UI and SDKs for many languages.
What is Serverpod?
Serverpod is an open-source backend framework for Flutter and Dart, and an alternative to Appwrite for teams that want the backend to be their own code. You write endpoint methods in Dart, data lives in PostgreSQL through a type-safe ORM, and your app talks to a generated client.
How they compare
Both let a Flutter team own their backend. The real decision is whether that backend is a suite of services you configure, or a Dart application you write.
A SQL database you can query directly
Serverpod’s data layer is plain PostgreSQL: models in YAML become tables, typed queries, versioned migrations, and raw SQL when you want it. Appwrite stores rows in TablesDB, its database API built on top of MariaDB, and access goes only through the API. Appwrite advises against connecting directly to the underlying database.
final orders = await Order.db.find(
session,
where: (t) => t.total > 100,
orderBy: (t) => t.created,
);
In Appwrite, the same query is an SDK call against the TablesDB API, with rows returned as maps you convert yourself.
Full-stack Dart or SDK and functions
Appwrite has real Dart support: the Flutter SDK and a Dart runtime for Appwrite Functions. Each function is deployed and invoked independently. A Serverpod backend is a single persistent Dart application in which endpoints share models, database access, and state. The whole thing runs and debugs as a single process.
Type safety and code generation
Appwrite has type generation. Running appwrite types --language dart produces model classes you apply to row data returned as maps. Serverpod starts from the types: models generate the tables, the queries, and the client. The compiler checks the path from the database to the app without a conversion step.
Authentication and real-time
Appwrite’s accounts cover OAuth sign-in, teams, and organization membership, with real-time channel subscriptions in the SDK. Serverpod ships sign-in with email, social providers, and passkeys. Its real-time model is a typed stream, where an endpoint method returns a Stream of your models over a managed WebSocket.
Self-hosting and scaling
Both solutions can be self-hosted with Docker, but their footprints differ. Appwrite runs as a Docker Compose suite of cooperating services. Serverpod deploys as a single server container with PostgreSQL, optionally including Redis, keeping operations and scaling simple to reason about.
Pricing
Appwrite Cloud has a free tier with 2 projects and a Pro plan starting at $25 per project per month. Usage-based charges apply beyond the included quotas. Serverpod is free to self-host, and Serverpod Cloud offers flat monthly tiers starting at $19 per month. Both remove the platform fee if you host them yourself, leaving only your server costs. Current Appwrite rates are on the Appwrite pricing page.
Migrating from Appwrite
Your Flutter code and any Dart functions carry over as Dart, and SDK calls become generated client methods. The data model is the real work. TablesDB rows and their relationships are mapped to PostgreSQL tables via Serverpod models, exported via Appwrite’s API. Run both backends side by side and move one collection at a time.
Move one table’s reads and writes to a Serverpod endpoint first. Your app keeps working against Appwrite for everything else while you compare.
Everything you get with Serverpod
Why teams choose Serverpod
Frequently asked questions
Is Serverpod an Appwrite alternative?
Yes. Both are open-source, self-hostable backends for Flutter. Serverpod is a framework for building backend services in Dart on PostgreSQL, while Appwrite is a prebuilt service suite with SDKs.
Can I migrate from Appwrite to Serverpod?
Yes, incrementally. Export rows from Appwrite’s API into PostgreSQL tables defined as Serverpod models, moving one collection at a time while both run side by side.
Does Serverpod give me direct SQL access?
Yes. Your data is plain PostgreSQL: use the type-safe ORM, run raw queries when you need them, and connect any SQL tool directly to the database.
Is Serverpod self-hosted like Appwrite?
Yes, both run with Docker. Appwrite deploys as a Compose suite of services, while Serverpod deploys as a single server container with PostgreSQL and optional Redis.