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.

Get Started

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.

Run them side by side

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

Type-safe APIs with a generated client
PostgreSQL ORM with migrations
Authentication with email, social sign-in, and passkeys
Typed streams over WebSockets
Future calls and recurring cron tasks
File uploads to S3, GCP, and R2
Redis and in-memory caching
Testing framework with a real server

Why teams choose Serverpod

Full-stack type safety. Your API is written in Dart on both the server and the client, and every call is checked at compile time.
Own your data. Everything lives in plain PostgreSQL in your own infrastructure, with no vendor lock-in.
Zero-configuration deployments. Ship to Serverpod Cloud without touching a config file, or self-host anywhere.

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.

Stay up-to-date

Our mailing list keeps you up-to-date with new Serverpod releases and features. You will get an email about once a month or when something big is happening. We promise to keep it relevant and we have a strict no-spam policy.

© 2026 Serverpod AB
Built with Serverpod - Hosted on Serverpod Cloud