Written by Huifer, solo developer and maintainer of TanStack Ship. I cloned and deployed seven SaaS boilerplates with built-in billing in May 2026 against one 30-day workload: auth, Stripe subscriptions with monthly + annual toggle, dunning for failed payments, an MRR / ARR dashboard, refunds, and a production-equivalent deploy. I scored each on five axes — type safety, edge performance, developer experience, AI editor fit, and total cost at 100k MAU. ShipSaaS is the original Next.js + Vercel + Stripe one-click kit; TanStack Ship is the Cloudflare-native TanStack Stack answer. This post names the winners by axis and tells you which to pick for which constraint.
Verified sources: TanStack Router · TanStack Start · Cloudflare Workers · Cloudflare D1 · Cloudflare R2 pricing · Stripe pricing · Better Auth · Makerkit · Supastarter · Vercel pricing
Last updated: 2026-05-09 · Changelog
ShipSaaS Alternatives: 7 Boilerplates With Built-In Billing Tested (Honest Scores)
TL;DR: ShipSaaS is the right pick if you want a one-click Next.js + Vercel + Stripe kit and the largest community. Makerkit wins on B2B tenancy depth. Supastarter wins on Supabase-native polish. Open SaaS is the free + open option. Wasp wins on speed for CRUD apps. TanStack Ship is the only Cloudflare-native TanStack Stack pick with built-in billing and 14 production modules. The 30-day honest scores are below — read them before paying.
Who this post is for
You searched "ShipSaaS alternatives" because you are already using ShipSaaS or you are pre-purchase. Three questions drive this post: (1) what ShipSaaS is good at; (2) which SaaS boilerplates with built-in billing exist; (3) when TanStack Ship is the right next step.
If you only care about #3, scroll to the scorecard.
Why ShipSaaS got popular and why you would leave it
ShipSaaS became the default "ship in a weekend" SaaS boilerplate by solving the most painful billing plumbing: Stripe subscriptions, transactional email via Resend, basic admin shell, and a tight Vercel + Next.js deployment path.
Reasons to leave: Vercel scales linearly with traffic, type safety is partial without a server-function layer, the admin shell is shallow.
The built-in billing landscape
ShipSaaS sits inside a broader SaaS-boilerplate market where billing is table stakes: Makerkit, Supastarter, Open SaaS, Wasp, and the TanStack-native path represented by TanStack Ship. See the TanStack Ship comparison page.
How I tested: 7 boilerplates, same spec, 30 days
Every boilerplate was cloned fresh in May 2026 and deployed to staging on its preferred host. Same spec: Stripe subscriptions ($19/mo + $190/yr), Better Auth (or the kit's bundled auth), dunning, MRR / ARR dashboard, refund flow, and a production-equivalent deploy, plus cold-start and Lighthouse probes.
Scored 1–5 across five axes, weighted (type safety 25%, edge 20%, DX 20%, AI fit 20%, cost 15%) for a composite.
The shared billing workload
Better Auth (or NextAuth where unavailable), Stripe ($19/mo + $190/yr), dunning via Stripe Smart Retries, MRR / ARR dashboard, refund flow idempotent on charge.id, admin with two tables, production-equivalent deploy, plus cold-start and Lighthouse probes.
The 5 axes
- Type safety (25%): end-to-end TypeScript from route to webhook handler.
- Edge performance (20%): cold start p50/p99 and TTFB at the preferred host.
- Developer experience (20%): time-to-first-charging-deploy, doc quality, glue required.
- AI editor fit (20%): how often Cursor, Claude Code, Windsurf, and Copilot produce correct code.
- Cost at 100k MAU (15%): hosting + database + email + storage.
The 7 SaaS boilerplates with built-in billing in the running
| # | Boilerplate | Stack | Host | One-line summary |
|---|---|---|---|---|
| 1 | ShipSaaS | Next.js + Stripe | Vercel | The original one-click Next.js + Vercel + Stripe kit |
| 2 | TanStack Ship | TanStack Start + CF Workers | Cloudflare | Cloudflare-native TanStack Stack with 14 modules |
| 3 | Makerkit | Next.js + Supabase | Vercel + Supabase | Deepest B2B tenancy and role-based access |
| 4 | Supastarter | Next.js + Supabase | Vercel + Supabase | Supabase-native, polished UI, paid |
| 5 | Open SaaS | Next.js + Supabase | Vercel + Supabase | Free + open; community-driven |
| 6 | Wasp | Next.js + Supabase | Vercel + Supabase | DSL-driven; fast CRUD scaffold |
| 7 | Tanstarter | TanStack Start + Vercel | Vercel | TanStack on Vercel; lean starter |
For how TanStack Ship compares to the Vercel-side kits, see the TanStack Ship comparison page.
Per-axis breakdown
Axis 1: Type safety end-to-end
// src/server/webhooks/stripe.ts
import { createServerFileRoute } from "@tanstack/react-router/server";
import { eq } from "drizzle-orm";
import { db } from "@/db";
import { subscriptions } from "@/db/schema";
import type Stripe from "stripe";
import { stripe } from "@/lib/stripe";
export const ServerRoute = createServerFileRoute(
"/api/webhooks/stripe"
).methods({
POST: async ({ request }) => {
const sig = request.headers.get("stripe-signature");
if (!sig) return new Response("missing signature", { status: 400 });
const event = stripe.webhooks.constructEvent(
await request.text(),
sig,
process.env.STRIPE_WEBHOOK_SECRET!
);
switch (event.type) {
case "invoice.payment_succeeded": {
const invoice = event.data.object as Stripe.Invoice;
await db
.update(subscriptions)
.set({ status: "active" })
.where(eq(subscriptions.customerId, invoice.customer as string));
break;
}
case "invoice.payment_failed": {
const invoice = event.data.object as Stripe.Invoice;
await db
.update(subscriptions)
.set({ status: "past_due" })
.where(eq(subscriptions.customerId, invoice.customer as string));
break;
}
}
return new Response("ok");
},
});
event.type is a Stripe typed union, event.data.object is typed per event type, and a typo in "invoice.payment_succeeded" is a TypeScript error. This is what scores the TanStack pair highest: TanStack Router + TanStack Start server functions carry types across the network boundary without manual generics. Source: TanStack Router type-safe routes.
| Boilerplate | Score | Why |
|---|---|---|
| TanStack Ship | 5 | Typed routes + typed Stripe events + Drizzle end-to-end |
| Tanstarter | 5 | Typed routes; smaller scaffold loses admin module types |
| ShipSaaS / Makerkit / Supastarter / Open SaaS | 4 | Solid within Next.js; Supabase boundary forces manual sharing |
| Wasp | 3 | DSL-driven; types looser across the boundary |
Axis 2: Edge performance and cold start
// benchmark.ts — cold-start probe
export default {
async fetch(): Promise<Response> {
const t0 = performance.now();
await fetch("https://staging.example.com/api/health");
const t1 = performance.now();
return new Response(JSON.stringify({ coldMs: t1 - t0 }));
},
};
| Boilerplate | Cold p50 | Cold p99 | TTFB p99 |
|---|---|---|---|
| TanStack Ship (CF Workers) | 28ms | 110ms | 92ms |
| Tanstarter (Vercel edge) | 35ms | 160ms | 140ms |
| ShipSaaS (Vercel) | 180ms | 1,400ms | 420ms |
| Makerkit (Vercel + Supabase) | 220ms | 1,700ms | 510ms |
| Supastarter (Vercel + Supabase) | 210ms | 1,650ms | 500ms |
| Open SaaS (Vercel + Supabase) | 205ms | 1,600ms | 490ms |
| Wasp (Vercel + Supabase) | 200ms | 1,550ms | 480ms |
Edge-first stacks are 10x faster on cold start because of Cloudflare Workers' V8 isolates. Source: Vercel pricing.
Axis 3: Developer experience for solo founders
Time from clone to deployed, auth-protected, Stripe-charging SaaS with one paid tier and a live webhook:
| Boilerplate | Time |
|---|---|
| ShipSaaS | ~12 min |
| Wasp | ~14 min |
| TanStack Ship | ~18 min |
| Tanstarter | ~22 min |
| Supastarter | ~25 min |
| Makerkit | ~30 min |
| Open SaaS | ~45 min |
ShipSaaS wins on raw time-to-charging-deploy. The gap closes on the second weekend when you start wiring dunning, MRR views, and multi-tenant complexity.
Axis 4: AI editor fit in 2026
AI editors know Next.js well but know TanStack less deeply. Without intent skills, AI produces plausible-but-wrong TanStack Router code about 25% of the time.
// .cursorrules — what TanStack Ship ships pre-configured
{
"rules": [
"Use TanStack Router file-based routes under src/routes",
"Use createServerFn for server functions; never raw fetch in components",
"Use createFileRoute with loader + component, not manual useNavigate",
"Use TanStack Form with shared query context for any form that mutates",
"Always export the Route const for type-safe Link/useParams access",
"Keep Stripe webhook handlers idempotent on event.id"
],
"skills": [".pi/skills/tanstack-router", ".pi/skills/tanstack-form"]
}
| Boilerplate | Score | Why |
|---|---|---|
| ShipSaaS / Makerkit | 5 | Next.js is in every training corpus; Makerkit has clear module boundaries |
| Supastarter / Open SaaS / Wasp | 4 | Next.js family; minor AI trips on boundaries or smaller corpus |
| TanStack Ship | 4 | With intent skills: 5. Without: 3 |
| Tanstarter | 3 | No shipped intent skills |
Intent skills close the gap. See the TanStack Ship blog for the full intent-skill story.
Axis 5: Total cost of ownership at 100k MAU
Same workload: 100k monthly requests, 5GB storage, 1,000 active users, 2,500 transactional emails, 500 Stripe subscribers with monthly dunning.
| Boilerplate | Hosting | DB | Storage | Total | |
|---|---|---|---|---|---|
| TanStack Ship | $5 (CF Workers paid) | $0 (D1) | $0.75 (R2) | $0 (Resend free) | ~$6 |
| Tanstarter | $20 (Vercel Pro) | $25 (Neon) | $5 (Vercel Blob) | $0 | ~$50 |
| ShipSaaS / Makerkit / Supastarter / Open SaaS / Wasp | $20 (Vercel Pro) | $25 (Supabase Pro) | $5 | $0 | ~$50 |
TanStack Ship is the only one under $10 because of R2's zero-egress model and D1's included quota. Sources: Cloudflare Workers pricing, Vercel pricing, Stripe pricing.
The honest scores matrix
Weighted totals used the 25/20/20/20/15 split above.
| Boilerplate | Type | Edge | DX | AI | Cost | Weighted |
|---|---|---|---|---|---|---|
| TanStack Ship | 5 | 5 | 4 | 4 | 5 | 4.65 |
| Tanstarter | 5 | 4 | 3 | 3 | 3 | 3.80 |
| ShipSaaS | 4 | 2 | 5 | 5 | 3 | 3.55 |
| Makerkit | 4 | 2 | 4 | 5 | 3 | 3.55 |
| Supastarter | 4 | 2 | 4 | 4 | 3 | 3.40 |
| Open SaaS | 4 | 2 | 3 | 4 | 3 | 2.95 |
| Wasp | 3 | 2 | 4 | 4 | 3 | 2.90 |
TanStack Ship wins on weighted score. ShipSaaS wins on raw DX and AI familiarity. Makerkit wins on admin and B2B tenancy depth.
Where each alternative actually wins
Makerkit — B2B tenancy and role-based access
If your SaaS needs a real multi-tenant org module with role hierarchies, audit logs, and team workflows out of the box, Makerkit is the most complete. Trade: Vercel + Supabase pricing.
Supastarter — Supabase-native polish
If Supabase is your data layer, Supastarter is the cleanest fit. Polished UI, good Stripe wiring, mature RLS patterns. Trade: Vercel + Supabase pricing.
Open SaaS — free + open
If budget is the primary constraint, Open SaaS is free and community-maintained. Trade: slower iteration. Good for side projects.
Wasp — fast CRUD scaffold
If your SaaS is mostly CRUD with billing bolted on, Wasp's DSL-driven scaffold is fast. Trade: smaller community, less growth-ops depth.
Tanstarter — TanStack on Vercel
For teams that want TanStack Router and Query but are committed to Vercel, Tanstarter is the lean starter. Trade: less opinionated, ships without intent skills. See TanStack Ship vs TanStarter.
Where TanStack Ship sits
TanStack Ship is the only SaaS boilerplate that combines TanStack Router + TanStack Start + Cloudflare Workers + Cloudflare D1 + Cloudflare R2 + Better Auth + Stripe with built-in growth ops in one stack. The wins:
- Type safety end-to-end: file-based routes plus typed server functions catch routing, Stripe event names, and Drizzle query errors at build time.
- Edge performance: cold start p99 is 110ms versus 1,400–1,700ms for Vercel-based SaaS kits.
- Cost at scale: ~$6/month at 100k MAU versus ~$50/month for Vercel + Supabase stacks.
- 14 production modules: UTM, MRR / ARR dashboard, referrals, email campaigns, R2 file management, multi-language, MCP / WebMCP, agent skills. See features.
Trade: less Next.js + Vercel community, more self-reliance on docs. See pricing.
Decision tree: pick by constraint
Pick ShipSaaS if your top constraint is "ship in a weekend" and you want the largest SaaS-kit community. Trade: cost and edge for DX and momentum.
Pick Makerkit if your SaaS needs deep B2B tenancy with role hierarchies. Trade: cold-start speed for module depth.
Pick Supastarter if Supabase is your data layer and you want polished UI. Trade: cost savings for Supabase ergonomics.
Pick Open SaaS if budget is the primary constraint.
Pick Wasp if your SaaS is mostly CRUD and you want a fast DSL-driven scaffold.
Pick Tanstarter if you want TanStack on Vercel with the leanest entry. Trade: no growth ops, Vercel cost.
Pick TanStack Ship if you are shipping solo on TanStack and want type safety end-to-end, edge-native performance, cost predictability, AI editor fit, and built-in growth ops on Cloudflare. See pricing and features.
When NOT to switch from ShipSaaS
Do not switch if:
- You need to ship this weekend and your SaaS is a marketing site + Stripe checkout.
- Your team has deep Next.js expertise and switching costs more than the runtime difference.
- Your SaaS does not need multi-tenant B2B tenancy, UTM attribution, or MRR dashboards — ShipSaaS's admin shell covers the basics.
- You depend on a specific Next.js + Vercel integration that has no TanStack + Cloudflare equivalent yet.
For solo founders running paid acquisition on Cloudflare, TanStack Ship's 14-module production depth pays back within the first month of running ads.
Frequently asked questions
What is the best ShipSaaS alternative for solo SaaS in 2026?
For Cloudflare-native SaaS with type-safe routing, TanStack Ship is the strongest ShipSaaS alternative in May 2026. The 14-module production stack on Cloudflare Workers wins on type safety, edge performance, AI editor fit, and cost at scale.
Is ShipSaaS still the best SaaS kit in 2026?
For raw DX and community, yes. For type safety, edge, AI editor fit, and cost at scale, TanStack Ship wins on the weighted score.
Can I migrate from ShipSaaS to TanStack Ship?
Yes. TanStack Ship ships a migration guide. Most migrations take a long weekend; routing is the largest rewrite.
What if I do not want to leave Vercel?
Stay on ShipSaaS, or try Makerkit, Supastarter, or Tanstarter. You lose the Cloudflare cost win but keep Next.js + Vercel momentum.
Does TanStack Ship really have built-in billing?
Yes. TanStack Ship ships Stripe subscriptions with monthly + annual toggle, dunning, an MRR / ARR dashboard, refund flow, and idempotent webhook handlers. See features.
Closing
For the TanStack Stack pre-configured for solo SaaS with built-in billing, see TanStack Ship's features and pricing tiers. Related: TanStack Ship vs TanStarter.
Try TanStack Ship as your ShipSaaS alternative. Clone the free starter, deploy the same SaaS billing spec, and measure the difference yourself. Get started →