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
Compare ShipFast, Makerkit, and Supastarter in detail at StarterPick.