Serverpod vs Dart Frog
Serverpod and Dart Frog are two ways to build a Dart backend. You can choose a full framework with a generated client or a minimal routing framework that you extend yourself.
Serverpod vs Dart Frog at a glance
Both frameworks keep your backend in Dart. The difference is what ships in the box. Dart Frog is a fast, minimalistic framework centered on routing, and Serverpod is a full backend with a database, authentication, and a generated client.
| Capability | Serverpod | Dart Frog |
|---|---|---|
| Language | ✓ Dart on the server and the client | ✓ Dart on the server |
| Type safety | ✓ End-to-end, checked at compile time | ✗ Manual beyond the route handler |
| Generated client | ✓ Generated from your endpoints | ✗ Manual, hand-written HTTP calls |
| Hot reload | ✓ Watch mode in serverpod start | ✓ Dev server hot reload |
| Database | ✓ PostgreSQL with a type-safe ORM | ✗ External package needed |
| Authentication | ✓ Email, social sign-in, and passkeys | ✗ Token middleware, your own user store |
| Real-time | ✓ Typed WebSocket streams | ✓ Through a package, untyped |
| Background work | ✓ Future calls and cron tasks | ✗ External package needed |
| Hosting | ✓ Docker anywhere, or Serverpod Cloud | ✓ Cloud Run, App Runner, Globe |
| Open source | ✓ BSD-3 packages, SSPL server | ✓ MIT |
What is Dart Frog?
Dart Frog is a fast, minimalistic backend framework built on Shelf, with file-based routing and a development server with hot reload. It was created at Very Good Ventures and moved to the community-run dart-frog-dev organization in July 2025, where it remains actively maintained. It suits small, focused APIs where you want routes on disk and full control of the rest.
What is Serverpod?
Serverpod is an open-source backend framework for Flutter and Dart. You define models in YAML and write endpoint methods in Dart. Serverpod generates the serialization, the database bindings, and a type-safe client for your app. Authentication, streaming methods, and task scheduling are part of the framework.
How they compare
Both frameworks handle routing and let you write your server in Dart. The real decision is everything after routing: the database, the client, identity, and background work.
Code generation and type-safe APIs
Dart Frog generates the wiring that turns your routes/ directory into a server, and stops there. Responses are built by hand, and your Flutter app parses them by hand. Serverpod generates code that works in both directions: server-side models and database code, and a typed client for your app.
A Dart Frog route handler returns a Response:
// routes/users/[id].dart
Future<Response> onRequest(RequestContext context, String id) async {
final user = await context.read<UserRepository>().find(int.parse(id));
return Response.json(body: user.toJson());
}
The Serverpod equivalent is an endpoint method, and the route, serialization, and client come from serverpod generate:
class UserEndpoint extends Endpoint {
Future<User?> getUser(Session session, int id) async {
return User.db.findById(session, id);
}
}
Your Flutter app calls it as a method: final user = await client.user.getUser(1);
REST API routing: files or endpoint methods
Dart Frog maps files to routes, so routes/users/[id].dart serves /users/:id. It is a clear model for REST APIs. Serverpod maps endpoint classes to the generated client instead, so the route table lives in your Dart types. Its built-in web server covers conventional routes, such as webhooks and server-rendered pages.
Database and ORM
Dart Frog has no database layer, so you need to provide a driver or an ORM and manage the schema yourself. Serverpod includes the database: models defined in YAML become PostgreSQL tables, typed query methods, and versioned migrations, all generated for you.
Authentication
The dart_frog_auth package provides basic, bearer, and cookie middleware, and verifying credentials against your own user store is up to you. Serverpod ships the identity layer: sign-in with email, social providers, and passkeys, with users and sessions stored in your database.
Real-time streams
Dart Frog supports WebSockets via a handler package, and message encoding is up to you to define. In Serverpod, an endpoint method can return or receive a Dart Stream, and the messages are your typed models over a managed WebSocket connection.
Pricing
Both frameworks are free and open-source, so the comparison is about what surrounds them. Dart Frog pairs well with scale-to-zero platforms, such as Cloud Run and AWS App Runner. Serverpod is free to self-host on your own servers, while Serverpod Cloud offers flat monthly tiers starting from $19 per month.
Migrating from Dart Frog
Both frameworks are plain Dart, so your business logic and packages carry over. Route handlers become endpoint methods, repository classes continue to work, and the hand-written networking layer in your Flutter app is replaced by the generated client. The two servers can run side by side while you move routes.
Keep your Dart Frog API running and move one resource to a Serverpod endpoint first. You keep your logic and delete your client-side parsing code.
Everything you get with Serverpod
Why teams choose Serverpod
Frequently asked questions
Is Serverpod a Dart Frog alternative?
Yes. Both are Dart backend frameworks. Serverpod adds the database ORM, authentication, real-time streams, and a generated type-safe client, while Dart Frog stays a minimal routing layer.
Can I migrate from Dart Frog to Serverpod?
Yes. Your Dart business logic carries over, route handlers become endpoint methods, and both servers can run side by side during the move.
Is Dart Frog still maintained?
Yes. Dart Frog moved to the community-run dart-frog-dev organization in July 2025 and continues to publish releases.
Does Serverpod generate a type-safe client for Flutter?
Yes. Running serverpod generate produces a client package, and every endpoint method becomes a typed Dart method your app can call.