ShipFast vs Makerkit vs Supastarter: 2026 Updated
TL;DR
ShipFast ($199-299), Makerkit ($299+), and Supastarter ($299+) are the three most-purchased SaaS boilerplates in 2026. They target different builders: ShipFast is for indie hackers who want to ship a product in a week, Makerkit is for teams who want a plugin-based system with room to grow, and Supastarter is for developers who need multi-tenancy (organizations + teams) baked in from day one. Here's the honest comparison.
Key Takeaways
- ShipFast ($199-299): fastest to launch, best community, weakest on multi-tenancy — ideal for B2C indie projects
- Makerkit ($299+): plugin architecture, best for complex feature sets, good B2B with teams
- Supastarter ($299+): best multi-tenancy and i18n, strongest for B2B with organizations
- Auth: all three include email + OAuth — differences are in session handling and SSR support
- Billing: all three support Stripe — Makerkit also supports Lemon Squeezy; Supastarter supports both
- Stack: all three are Next.js-first — Supastarter also ships Nuxt 3 version
The Three Contenders
ShipFast — Launched by Marc Lou
| Price | $199 (Starter) / $299 (All-in) |
| Stack | Next.js 14/15 + Tailwind + MongoDB or Supabase |
| Creator | Marc Lou (indie hacker, ~250K followers) |
| Community | 7,500+ Discord members (largest of the three) |
| GitHub Stars | Private (purchase-based) |
ShipFast's philosophy: ship in a weekend. It's deliberately minimal — the goal is reducing friction to your first user, not supporting every enterprise feature.
// ShipFast's simplicity — checkout in ~50 lines:
// libs/stripe.ts
import Stripe from 'stripe';
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
export const createCheckout = async ({
priceId,
userId,
successUrl,
cancelUrl,
couponId,
}: {
priceId: string;
userId: string;
successUrl: string;
cancelUrl: string;
couponId?: string;
}) => {
const session = await stripe.checkout.sessions.create({
mode: 'subscription',
payment_method_types: ['card'],
line_items: [{ price: priceId, quantity: 1 }],
success_url: successUrl,
cancel_url: cancelUrl,
client_reference_id: userId,
...(couponId && { discounts: [{ coupon: couponId }] }),
});
return session.url;
};
What ShipFast includes:
- Auth: Supabase Auth OR NextAuth.js (your choice at setup)
- Payments: Stripe (subscriptions + one-time) + Lemon Squeezy
- Email: Resend, Mailchimp, or Sendgrid
- Database: MongoDB OR Supabase Postgres (not both)
- UI: shadcn/ui + Tailwind + DaisyUI
- SEO: sitemap, robots.txt, structured data
- Blog: simple markdown blog
- Analytics: Plausible integration
What ShipFast is missing:
- Multi-tenancy (no organizations/teams)
- Role-based permissions
- Plugin system
- i18n (internationalization)
- Admin dashboard
ShipFast is right for you if:
- You're building B2C (users, not teams)
- Speed to launch is your #1 priority
- You want the largest community for help
- You're an indie hacker, not a dev team
Makerkit — The Plugin Architecture
| Price | $299 (Core) + $99-199/plugin |
| Stack | Next.js 15 App Router + Supabase + Stripe |
| Creator | Giancarlo Buomprisco |
| Community | 2,000+ Discord members |
| GitHub Stars | Private (purchase-based) |
Makerkit's philosophy: extensible foundation. The core kit is lean; plugins add specific features. This keeps the base codebase clean while letting you add only what you need.
// Makerkit's plugin pattern — teams plugin example:
// packages/plugins/team-accounts/src/lib/server/teams.ts
export async function getTeamMembers(organizationId: string) {
const client = getSupabaseServerClient();
const { data, error } = await client
.from('organization_members')
.select(`
id,
role,
user:users(id, email, display_name, photo_url),
created_at
`)
.eq('organization_id', organizationId)
.order('created_at', { ascending: true });
if (error) throw error;
return data;
}
// Invitation flow (plugin-provided):
export async function inviteUserToTeam({
email,
organizationId,
role,
}: {
email: string;
organizationId: string;
role: 'owner' | 'admin' | 'member';
}) {
// Creates invitation token, sends email, tracks invite
}
Makerkit core includes:
- Auth: Supabase Auth (full SSR support via
@supabase/ssr) - Billing: Stripe OR Lemon Squeezy (configurable)
- Multi-tenancy: organization model (in core, not plugin)
- Role-based access: owner, admin, member
- Email: Nodemailer or Resend
- UI: shadcn/ui + Radix + Tailwind
- Admin panel: user + organization management
- i18n:
next-intlbuilt-in (12+ languages)
Makerkit available plugins:
- Text editor (novel.sh based)
- Chatbot / AI integration
- Roadmap / feature voting
- Blog (full-featured)
- Billing portal (custom)
- Enhanced analytics
Makerkit is right for you if:
- You want to pay for only what you need
- Your SaaS will grow in feature complexity over time
- You need i18n from day one
- You're building for teams, not just individuals
Supastarter — Multi-Tenancy First
| Price | $299 (Next.js) / $349 (Next.js + Nuxt) |
| Stack | Next.js 15 / Nuxt 3 + Supabase + Stripe/Lemon Squeezy |
| Creator | Jan Hesters |
| Community | 2,500+ Discord members |
| GitHub Stars | Private (purchase-based) |
Supastarter's philosophy: Supabase-native and B2B-ready from day one. It's the most complete Supabase integration of any boilerplate — RLS policies pre-written, storage buckets configured, realtime wired up.
// Supastarter's organization model — deep Supabase integration:
// app/[locale]/(app)/[organization]/settings/members/page.tsx
// The membership system is pre-built with RLS:
// CREATE POLICY "members can read org memberships"
// ON memberships FOR SELECT
// USING (
// organization_id IN (
// SELECT organization_id FROM memberships
// WHERE user_id = auth.uid()
// )
// );
// Supastarter server action — invite member:
'use server';
import { createClient } from '@/utils/supabase/server';
export async function inviteMember(formData: FormData) {
const supabase = await createClient();
const { data: { user } } = await supabase.auth.getUser();
// Permission check (RLS + application-level):
const hasPermission = await checkOrganizationPermission(
user!.id,
formData.get('organizationId') as string,
'invite_members'
);
if (!hasPermission) throw new Error('Permission denied');
await supabase.functions.invoke('send-invitation', {
body: {
email: formData.get('email'),
organizationId: formData.get('organizationId'),
role: formData.get('role'),
},
});
}
Supastarter includes:
- Auth: Supabase Auth (email, magic link, OAuth, OTP) — full SSR
- Organizations: multi-tenancy with RLS pre-written for all tables
- Roles: granular permissions (owner, admin, member, + custom)
- Billing: Stripe + Lemon Squeezy (per-seat billing supported)
- Storage: file uploads + Supabase Storage buckets configured
- Realtime: notifications via Supabase Realtime
- Email: Resend pre-configured
- i18n:
next-intl(7+ languages) - Admin dashboard: user + org management
- Blog: MDX blog built-in
- UI: shadcn/ui + Tailwind
- Both Next.js and Nuxt 3 versions (unique to Supastarter)
Supastarter is right for you if:
- You're building B2B SaaS (organizations buying seats)
- You need complete Supabase integration (RLS, storage, realtime)
- Your team uses Nuxt instead of Next.js
- You need i18n from day one
- You want the most feature-complete starting point
Feature-by-Feature Comparison
| Feature | ShipFast | Makerkit | Supastarter |
|---|---|---|---|
| Price | $199-299 | $299+ | $299-349 |
| Next.js | ✅ 14/15 | ✅ 15 App Router | ✅ 15 |
| Nuxt 3 | ❌ | ❌ | ✅ |
| Auth: email | ✅ | ✅ | ✅ |
| Auth: magic link | ✅ | ✅ | ✅ |
| Auth: OAuth | ✅ | ✅ | ✅ |
| Auth: OTP | ❌ | ❌ | ✅ |
| Organizations | ❌ | ✅ (basic) | ✅ (deep) |
| Role permissions | ❌ | ✅ | ✅ (granular) |
| RLS pre-written | ❌ | Partial | ✅ |
| Stripe | ✅ | ✅ | ✅ |
| Lemon Squeezy | ✅ | ✅ | ✅ |
| Per-seat billing | ❌ | Partial | ✅ |
| i18n | ❌ | ✅ | ✅ |
| Admin dashboard | ❌ | ✅ | ✅ |
| File uploads | Partial | Partial | ✅ (pre-configured) |
| Realtime | ❌ | ❌ | ✅ |
| Blog | Basic | Plugin | ✅ built-in |
| Plugin system | ❌ | ✅ | ❌ |
| Community size | 🏆 Largest | Medium | Medium |
| Docs quality | Good | Excellent | Good |
Auth Deep Dive
All three use Supabase Auth (or NextAuth for ShipFast) but with different SSR implementations:
// Makerkit — auth via @supabase/ssr (correct pattern):
// packages/core/supabase/src/supabase.server.ts
import { createServerClient } from '@supabase/ssr';
import { cookies } from 'next/headers';
export function getSupabaseServerClient() {
const cookieStore = cookies();
return createServerClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
getAll() { return cookieStore.getAll(); },
setAll(cookiesToSet) {
cookiesToSet.forEach(({ name, value, options }) =>
cookieStore.set(name, value, options)
);
},
},
}
);
}
// Supastarter — similar pattern, but adds org context:
export async function createClient() {
const cookieStore = await cookies();
return createServerClient(/* ... */);
}
// ShipFast — simpler, but getSession() is deprecated:
// (ShipFast uses createRouteHandlerClient from older @supabase/auth-helpers-nextjs)
// ⚠️ The newer @supabase/ssr package is the correct approach
Auth verdict: Makerkit and Supastarter use the current @supabase/ssr approach correctly. ShipFast's Supabase integration uses the older auth-helpers pattern — functional but not the recommended 2026 approach.
Database Choice
ShipFast:
- MongoDB (default) OR Supabase Postgres
- Choose at setup, not interchangeable
- MongoDB = no RLS, simpler data model
- Supabase = Postgres + RLS + realtime
Makerkit:
- Supabase Postgres only
- Prisma schema included
- Can swap to Neon/PlanetScale with URL change
- RLS policies for core tables (orgs, memberships)
Supastarter:
- Supabase Postgres only
- Raw Supabase client (no Prisma by default)
- Full RLS for ALL tables pre-written
- Migration files: run with `supabase db push`
Database verdict: Supastarter has the most complete Supabase setup. If you're building on Supabase and want everything pre-configured (RLS, storage, realtime), Supastarter saves the most time. Makerkit offers more flexibility (Prisma makes DB swapping easier).
Billing Complexity Supported
// Simple Stripe subscription (all three):
const session = await stripe.checkout.sessions.create({
mode: 'subscription',
line_items: [{ price: monthlyPriceId, quantity: 1 }],
// ...
});
// Per-seat billing (Supastarter):
// Billing updates when team members are added/removed:
await stripe.subscriptions.update(subscriptionId, {
items: [{
id: currentItem.id,
quantity: newSeatCount,
}],
proration_behavior: 'create_prorations',
});
// Makerkit per-seat (partial — you add seat counting):
// Makerkit's billing module handles the subscription
// but seat-count billing requires custom implementation
// ShipFast — no per-seat (B2C model only):
// One price per user, no organization seat counting
Documentation Quality
| ShipFast | Makerkit | Supastarter | |
|---|---|---|---|
| Getting started | Excellent | Excellent | Good |
| Auth guide | Good | Excellent | Good |
| Billing guide | Good | Excellent | Good |
| Multi-tenancy guide | N/A | Good | Good |
| Plugin guide | N/A | Excellent | N/A |
| Video tutorials | Some (Marc's YouTube) | Few | Few |
| Community Q&A | 🏆 Best (Discord) | Good | Good |
Makerkit has the best written documentation. ShipFast has the best community support via Discord — with 7,500+ members, someone has usually solved your problem already.
Pricing Reality
ShipFast:
$199 — Core (one domain)
$299 — All-in (unlimited domains + future updates)
→ One-time payment, lifetime updates
Makerkit:
$299 — Core kit
+ $99-199 per plugin (teams, blog, roadmap, etc.)
A fully-featured setup: $299 + 2-3 plugins = $500-700
→ One-time payment, lifetime updates
Supastarter:
$299 — Next.js version
$349 — Next.js + Nuxt 3 bundle
→ One-time payment, lifetime updates
True cost if you need full-featured B2B SaaS:
- ShipFast: you build multi-tenancy yourself (~2-3 weeks dev time)
- Makerkit: $299 + plugins = ~$500-600 total
- Supastarter: $299 flat (most features included)
Decision Framework
Pick ShipFast if:
- You're building B2C (no teams, no organizations)
- Speed to launch > feature completeness
- You want the largest community
- Your product is simple (auth + payments + dashboard)
- You're a solo indie hacker
Pick Makerkit if:
- You want to pay incrementally as features are needed
- Your SaaS will add features over time (plugin system is future-proof)
- You need i18n and admin from day one
- You want Prisma (easier to swap databases)
- You're a small dev team building a product with uncertain requirements
Pick Supastarter if:
- You're building B2B SaaS (companies buy accounts, not individuals)
- Multi-tenancy is a day-1 requirement (save 2-3 weeks of development)
- You want complete Supabase integration (RLS, storage, realtime)
- Your team uses Nuxt (only option with a Nuxt version)
- You need i18n from launch
All three boilerplates will ship a production SaaS. The meaningful differences are in the ceiling: how far does each one take you before architectural decisions need to change? ShipFast gets you to launch fastest but hits its ceiling when you need organizations. Makerkit's plugin architecture grows further before you hit the ceiling. Supastarter has the highest ceiling but the longest runway to launch. Buy based on where you expect to be in 12 months, not just where you are at launch.
Compare ShipFast, Makerkit, and Supastarter in our best open-source SaaS boilerplates guide.
See our ShipFast review for the in-depth solo-founder analysis.
See our multi-tenancy patterns guide to understand what Supastarter's organizations feature provides.