In Development β€’ Launching Soon

The Flutter + Serverpod
Boilerplate Is Coming

Ship production-ready Flutter SaaS apps 10x faster with the only
complete Serverpod backend integration available

30
Days
12
Hours
34
Minutes
56
Seconds

See ServerpodKit in Action

// Serverpod endpoint with automatic type-safe client generation class TeamEndpoint extends Endpoint {   Future<Team?> createTeam(     Session session,     String name,     SubscriptionPlan plan,   ) async {     // Rate limiting built-in     await RateLimiter.check(session, 'team-create');          // Permission check     if (!session.auth.authenticated) {       throw UnauthorizedException();     }          // Type-safe database operations     var team = Team(       name: name,       ownerId: session.auth.userId!,       plan: plan,       stripeCustomerId: await StripeService.createCustomer(session),       createdAt: DateTime.now(),     );          // Save with automatic migrations     return await Team.db.insertRow(session, team);   } }
// Flutter client with auto-generated type-safe methods class CreateTeamScreen extends ConsumerWidget {   @override   Widget build(BuildContext context, WidgetRef ref) {     final client = ref.watch(clientProvider);     final teamAsync = ref.watch(createTeamProvider);          return Scaffold(       body: Form(         child: Column(           children: [             TextFormField(               decoration: InputDecoration(                 labelText: 'Team Name',               ),               validator: Validators.required,             ),             PlanSelector(               onChanged: (plan) => selectedPlan = plan,             ),             ElevatedButton(               onPressed: teamAsync.isLoading ? null : () async {                 // Type-safe call to Serverpod backend                 final team = await client.team.createTeam(                   nameController.text,                   selectedPlan,                 );                 if (team != null) {                   context.go('/team/${team.id}');                 }               },               child: teamAsync.isLoading                 ? CircularProgressIndicator()                 : Text('Create Team'),             ),           ],         ),       ),     );   } }
// Magic Link Authentication with Serverpod Auth class AuthService {   // Send magic link email   static Future<void> sendMagicLink(String email) async {     await client.auth.sendMagicLink(       email: email,       redirectUrl: 'serverpodkit://auth/verify',     );   }   // OAuth providers   static Future<UserInfo?> signInWithGoogle() async {     final serverAuthCode = await GoogleSignIn().signIn();     return await client.auth.google.authenticate(serverAuthCode);   }   // MFA/TOTP Setup   static Future<TOTPSetup> enableTwoFactor() async {     final setup = await client.auth.mfa.setupTOTP();     // Returns QR code and secret for authenticator apps     return setup;   }   // Biometric authentication   static Future<bool> authenticateWithBiometrics() async {     final localAuth = LocalAuthentication();     final authenticated = await localAuth.authenticate(       localizedReason: 'Authenticate to access your account',       options: AuthenticationOptions(biometricOnly: true),     );     return authenticated;   } }
// Stripe Billing Integration class BillingEndpoint extends Endpoint {   // Create subscription with Stripe   Future<Subscription> createSubscription(     Session session,     String teamId,     String priceId,   ) async {     // Get team and verify permissions     final team = await Team.db.findById(session, teamId);     await PermissionService.requireTeamOwner(session, team);     // Create Stripe subscription     final subscription = await stripe.subscriptions.create(       SubscriptionCreateParams(         customer: team.stripeCustomerId,         items: [SubscriptionItemOption(price: priceId)],         paymentBehavior: 'default_incomplete',         metadata: {           'teamId': teamId,           'userId': session.auth.userId,         },       ),     );     // Save to database     await Subscription.db.insertRow(session, subscription);     return subscription;   }   // Handle Stripe webhooks   Future<void> handleWebhook(     Session session,     String payload,     String signature,   ) async {     final event = stripe.webhooks.constructEvent(       payload,       signature,       webhookSecret,     );     switch (event.type) {       case 'customer.subscription.updated':         await handleSubscriptionUpdate(session, event.data);         break;       case 'invoice.payment_succeeded':         await handlePaymentSuccess(session, event.data);         break;     }   } }

Everything You Need to Ship Your Flutter SaaS

🎯

100% Dart, No JavaScript

Unlike other backends, Serverpod is pure Dart. Share code between Flutter and backend seamlessly.

⚑

Type-Safe Everything

Automatic client code generation from Serverpod endpoints. No more API documentation or type mismatches.

πŸ”„

Realtime WebSockets

Built-in WebSocket support for live updates, collaboration, and real-time features out of the box.

πŸ’³

Stripe Integration

Complete billing system with subscriptions, webhooks, customer portal, and usage-based pricing.

πŸ”

Advanced Auth System

Magic links, OAuth providers, MFA/TOTP, biometrics, and session management all configured.

πŸ‘₯

Multi-Tenant Teams

Team management, role-based permissions, invitations, and complete data isolation.

πŸ“Š

Admin Dashboard

Beautiful Flutter web admin panel for user management, analytics, and system monitoring.

πŸš€

One-Click Deploy

Deploy to AWS, Google Cloud, or DigitalOcean with pre-configured Docker and Kubernetes setups.

πŸ“±

Responsive UI Kit

50+ pre-built Flutter screens and components that work on mobile, tablet, and web.

Built with Modern Tech Stack

🐦
Flutter 3.0+
βš™οΈ
Serverpod 2.0
🎯
Dart 3.0
πŸ—„οΈ
PostgreSQL
πŸ”„
Redis Cache
πŸ’³
Stripe API
πŸ“§
SendGrid
πŸ””
Firebase FCM
πŸ“Š
Mixpanel
🐳
Docker
☸️
Kubernetes
πŸš€
GitHub Actions

🚧 Development Progress

We're working hard to deliver the best Flutter + Serverpod boilerplate

78%
Complete
16
Modules Ready
30
Days to Launch