Serverpod vs AWS Amplify
Serverpod is a full-stack Dart alternative to AWS Amplify. It replaces a TypeScript-defined stack of AWS services with a single self-hosted backend using PostgreSQL.
Serverpod vs AWS Amplify at a glance
Serverpod and Amplify Gen 2, the current TypeScript-first generation, both give your Flutter app a backend. The difference is in shape. Amplify assembles managed AWS services, and Serverpod is one deployable server you own.
| Capability | Serverpod | AWS Amplify (Gen 2) |
|---|---|---|
| Language | ✓ Dart on the server and the client | ✗ Backend defined in TypeScript |
| Type safety | ✓ End-to-end, checked at compile time | ✓ Generated Dart models from the schema |
| Database | ✓ PostgreSQL with a type-safe ORM | ✓ DynamoDB, or Postgres via AppSync |
| GraphQL | ✗ Not supported, RPC and REST | ✓ AppSync GraphQL |
| Authentication | ✓ Email, social sign-in, and passkeys | ✓ Amazon Cognito user pools |
| Real-time | ✓ Typed WebSocket streams | ✓ AppSync GraphQL subscriptions |
| Background work | ✓ Future calls and cron tasks | ✓ Lambda functions on schedules |
| Self-hosting | ✓ Docker anywhere, including AWS | ✗ Not supported, AWS services only |
| Open source | ✓ BSD-3 packages, SSPL server | ✗ Apache-2.0 libraries, closed services |
| Pricing model | Free to self-host, flat Cloud tiers | Sum of per-service AWS meters |
What is AWS Amplify?
AWS Amplify is Amazon’s app platform. It wires managed services behind client libraries and hosting: Cognito for auth, AppSync for GraphQL APIs, DynamoDB for data, and Lambda for functions. Gen 2 defines the backend in TypeScript. It suits teams that are already invested in AWS and want its service catalog to be behind a single workflow.
What is Serverpod?
Serverpod is an open-source, full-stack Dart backend framework and an AWS Amplify alternative for Flutter teams. You write endpoint methods in Dart, store data in PostgreSQL, and ship one server that runs on any cloud, including AWS.
How they compare
The real decision is whether to use one server or a service catalog. A Serverpod backend is a single Dart application that you run and debug as a single process. An Amplify backend spans several AWS services, each with its own console, limits, and meter.
A backend framework, not a service catalog
When something breaks in Serverpod, you read one log from one server. In Amplify, a request can cross Cognito, AppSync, a Lambda resolver, and DynamoDB before it returns, and tracing it means tracing the seams between services. Fewer moving parts is the core of what Serverpod offers here.
Full-stack Dart or a TypeScript-defined backend
With Serverpod, your entire application is Dart, from the server logic to the Flutter app itself. AWS Amplify requires TypeScript for the backend, even when the app is Flutter. Your team sticks to the language it already knows for the whole stack.
A custom query in Amplify has three pieces: the schema entry, a function handler for the logic, and a hand-built GraphQL request in the app.
// amplify/data/resource.ts
recentOrders: a
.query()
.returns(a.ref('Order').array())
.handler(a.handler.function(recentOrders)),
final request = GraphQLRequest<String>(
document: 'query { recentOrders { id total createdAt } }',
);
final response = await Amplify.API.query(request: request).response;
The same feature in Serverpod is one endpoint method, and the route, serialization, and typed client are generated.
class OrderEndpoint extends Endpoint {
Future<List<Order>> recentOrders(Session session) async {
return Order.db.find(
session,
orderBy: (t) => t.created,
orderDescending: true,
limit: 20,
);
}
}
Your Flutter app calls it as a method: final orders = await client.order.recentOrders();
SQL database or DynamoDB
Amplify Data is backed by DynamoDB by default, a key-value store that scales well and models relations through GraphQL. Gen 2 can also connect to an existing PostgreSQL or MySQL database, exposed through AppSync and configured in TypeScript. Serverpod is PostgreSQL-first: typed relational queries, joins through include, and migrations owned by your models.
Portability and self-hosting
Serverpod deploys as a Docker container on any cloud, including AWS itself, and your data is plain PostgreSQL. Cognito, AppSync, and DynamoDB are managed AWS services with no self-hosted form, so an Amplify backend lives on AWS. Moving off later means replacing services, not just moving a container.
Pricing across services
An Amplify backend bills service by service: Cognito per monthly active user, AppSync per million operations, DynamoDB per read and write unit, and Lambda per invocation. Each meter is small, and together they are hard to predict. Serverpod is a single server you can self-host. Serverpod Cloud, starting at $19 per month, gives you a fully managed service. Current AWS rates are on the Amplify pricing page and its per-service pages.
Migrating from AWS Amplify
Serverpod can run on AWS alongside your Amplify stack, so the migration is incremental. Move data models into PostgreSQL and endpoints, and swap generated GraphQL calls for the generated Dart client. The hard part is authentication, since moving users off Cognito is a real project. Plan that step last, and keep both running until it is done.
Running Serverpod on ECS or EC2 keeps your infrastructure, IAM, and billing inside AWS while the backend itself becomes portable Dart.
Everything you get with Serverpod
Why teams choose Serverpod
Frequently asked questions
Is Serverpod an AWS Amplify alternative?
Yes. Serverpod is a full-stack Dart alternative: a single open-source server with PostgreSQL and a generated client, rather than a stack of managed AWS services defined in TypeScript.
Can I migrate from Amplify to Serverpod?
Yes, incrementally. Run Serverpod on AWS beside your Amplify stack and move features over. Plan the move off Cognito as its own step, since authentication is the hardest part.
Can Serverpod run on AWS?
Yes. Serverpod deploys as a Docker container, so ECS, EC2, or any container service works, with your PostgreSQL on RDS if you like.
Does this comparison cover Amplify Gen 1 or Gen 2?
Gen 2, the current TypeScript-first generation. AWS has placed Gen 1 in maintenance mode, with an announced end of life in 2027, and recommends Gen 2 for new apps. The Amplify Flutter library’s v1 reached its end of support in April 2025.