Geschrieben von Huifer, Solo-Entwickler und Maintainer von TanStack Ship. Ich habe im Mai 2026 sieben SaaS Boilerplates mit integriertem Stripe Billing geklont und für einen 30-tägigen Workload bereitgestellt: Auth, Stripe Subscriptions mit monatlichem und jährlichem Wechsel, Dunning für fehlgeschlagene Zahlungen, ein MRR / ARR Dashboard, Rückerstattungen, ein idempotenter Webhook und ein produktionsäquivalentes Deploy. Ich habe jedes auf fünf Achsen bewertet — Typensicherheit, Edge-Performance, Developer Experience, AI-Editor-Passform und Gesamtkosten bei 100k MAU. ShipSaaS ist das ursprüngliche One-Click-Stripe-Kit; TanStack Ship ist die Cloudflare-native TanStack Stack-Antwort mit 14 Produktionsmodulen. Dieser Beitrag nennt die Gewinner nach Achsen und sagt Ihnen, welches Sie für welche Anforderung wählen sollten.
Verifizierte Quellen: TanStack Router · TanStack Start · Cloudflare Workers · Cloudflare D1 · Stripe Subscriptions · Stripe Smart Retries · Better Auth · Makerkit · Supastarter · Vercel pricing
Zuletzt aktualisiert: 18. Mai 2026 · Changelog
Stripe Billing Boilerplates: 7 Getestet in 2026, Ehrliche Bewertungen
TL;DR: ShipSaaS ist die richtige Wahl, wenn Sie ein One-Click Next.js + Vercel + Stripe Kit und die größte Community möchten. Makerkit gewinnt bei der Tiefe der B2B-Mandantenfähigkeit. Supastarter gewinnt beim Supabase-nativen Feinschliff. Open SaaS ist die kostenlose + offene Option. Wasp gewinnt bei der Geschwindigkeit für CRUD-Apps. ShipFast gewinnt beim Momentum der Next.js-Community. TanStack Ship ist die einzige Cloudflare-native TanStack Stack-Option mit integriertem Stripe Billing und 14 Produktionsmodulen. Die ehrlichen 30-Tage-Bewertungen finden Sie unten — lesen Sie sie, bevor Sie bezahlen.
Warum "integriertes Stripe Billing" im Jahr 2026 wichtig ist
Stripe Billing ist die am meisten genutzte Drittanbieter-Integration in jedem SaaS — und die häufigste Fehlerquelle. Subscription-Statusautomaten haben acht Zustände (trialing, active, past_due, paused, canceled, incomplete, incomplete_expired, unpaid), drei gleichzeitige Abläufe (Checkout, Upgrade im laufenden Zyklus, Downgrade im laufenden Zyklus) und rund 50 Webhook-Ereignistypen, bei denen jedes verpasste Ereignis unbemerkt zu Umsatzverlusten führt. Der Unterschied zwischen einem Boilerplate, das Stripe als einzelne Seite anbindet, und einem, das es als Statusautomaten (state machine) integriert, ist der Unterschied zwischen einem Hobby-Projekt und einem echten Geschäft.
Ein SaaS Boilerplate mit integriertem Stripe Billing sollte Folgendes bieten: einen typisierten Subscription-Statusautomaten, idempotente Webhook-Handler über event.id, Dunning via Stripe Smart Retries, einen monatlichen/jährlichen Toggle, ein MRR / ARR Dashboard, einen Rückerstattungsfluss und Links zum Kundenportal. Sieben der am meisten diskutierten Boilerplates bieten all das.
Die 7 SaaS Boilerplates mit integriertem Stripe Billing
| # | Boilerplate | Stack | Host | Zusammenfassung in einem Satz |
|---|---|---|---|---|
| 1 | TanStack Ship | TanStack Start + CF Workers | Cloudflare | Cloudflare-natives TanStack Stack mit 14 Produktionsmodulen |
| 2 | ShipSaaS | Next.js + Stripe | Vercel | Das ursprüngliche One-Click Next.js + Vercel + Stripe Kit |
| 3 | ShipFast | Next.js + Vercel | Vercel | Größte Community; Next.js + Stripe + Resend |
| 4 | Makerkit | Next.js + Supabase | Vercel + Supabase | Tiefste B2B-Mandantenfähigkeit und rollenbasierter Zugriff |
| 5 | Supastarter | Next.js + Supabase | Vercel + Supabase | Supabase-nativ, poliertes UI, kostenpflichtig |
| 6 | Open SaaS | Next.js + Supabase | Vercel + Supabase | Kostenlos + offen; Community-gesteuert |
| 7 | Wasp | Next.js + Supabase | Vercel + Supabase | DSL-gesteuert; schnelles CRUD-Gerüst (Scaffold) |
Für die Stack-übergreifende Vergleichsseite siehe TanStack Ship comparison page.
Wie ich getestet habe: 7 Boilerplates, gleiche Spezifikation, 30 Tage
Jedes Boilerplate wurde im Mai 2026 frisch geklont und auf seinem bevorzugten Host in Staging bereitgestellt. Gleiche Spezifikation: Stripe Subscriptions mit monatlichem + jährlichem Toggle, Dunning über Stripe Smart Retries, MRR / ARR Dashboard, Rückerstattungsfluss idempotent über charge.id, Better Auth (oder die mitgelieferte Auth des Kits) und ein produktionsäquivalentes Deploy, plus Kaltstart- und Lighthouse-Tests.
Bewertet von 1–5 auf fünf Achsen, gewichtet (Typensicherheit 25 %, Edge 20 %, Developer Experience 20 %, AI-Passform 20 %, Kosten 15 %) für ein Gesamtergebnis.
Der gemeinsame Stripe Billing Workload
Stripe Subscriptions API zu [19 $/Monat + 190 $/Jahr], Better Auth (oder NextAuth, falls nicht verfügbar), Stripe Smart Retries aktiviert, MRR / ARR Dashboard nachgebaut in der UI-Bibliothek des Kits, Rückerstattungsfluss basierend auf charge.id für Idempotenz, Admin-Bereich mit zwei Tabellen, produktionsäquivalentes Deploy, plus Kaltstart- und Lighthouse-Tests.
Die 5 Achsen
- Typensicherheit (25 %): End-to-End TypeScript von der Route über den Webhook-Handler bis hin zum Subscription-Status.
- Edge-Performance (20 %): Kaltstart p50/p99 und TTFB beim bevorzugten Host.
- Developer Experience (20 %): Zeit bis zum ersten Deployment mit funktionierender Abrechnung, Dokumentationsqualität, erforderlicher Glue-Code.
- AI-Editor-Passform (20 %): Wie oft Cursor, Claude Code, Windsurf und Copilot korrekten Stripe-Billing-Code erzeugen.
- Kosten bei 100k MAU (15 %): Hosting + Datenbank + E-Mail + Speicher. Quellen: Stripe pricing, Cloudflare Workers pricing, Vercel pricing.
Achse 1: Typensichere Stripe Webhooks
Die Geschichte des Stripe Billings steht und fällt mit dem Webhook-Handler. Ein Tippfehler bei invoice.payment_succeeded sollte ein TypeScript-Fehler sein, kein stillschweigender Umsatzverlust. Hier ist der Produktions-Handler, den ich in TanStack Ship implementiert habe:
// 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 ist ein typisierter Stripe Union-Type, event.data.object wird abhängig vom Event-Typ typisiert, und ein Tippfehler in "invoice.payment_succeeded" führt zu einem TypeScript-Fehler. Dies ist der Grund, warum das TanStack-Paar am höchsten punktet: Modulfunktionen von TanStack Router + TanStack Start übertragen Typen über die Netzwerkgrenze hinweg.
Idempotenz auf Stripe event.id
Stripe versucht fehlgeschlagene Webhook-Lieferungen bis zu 3 Tage lang erneut. Jeder Handler muss über die event.id idempotent sein, andernfalls werden Rückerstattungen bei erneuten Versuchen doppelt angewendet und der MRR doppelt gezählt. Das Muster, das ich mitliefere:
// src/server/billing/idempotency.ts
import { eq } from "drizzle-orm";
import { db } from "@/db";
import { processedEvents } from "@/db/schema";
export async function alreadyProcessed(eventId: string): Promise<boolean> {
const row = await db
.select()
.from(processedEvents)
.where(eq(processedEvents.eventId, eventId))
.limit(1);
if (row.length > 0) return true;
await db.insert(processedEvents).values({ eventId, processedAt: new Date() });
return false;
}
Kombinieren Sie dies mit INSERT OR IGNORE in D1 (oder ON CONFLICT DO NOTHING in Postgres) und Sie erhalten eine Webhook-Schnittstelle, die Wiederholungsversuche ohne Doppelbuchungen übersteht. Quelle: Stripe webhook best practices.
Typisierung des Subscription-Statusautomaten
Der Zustand einer Subscription ist die Vereinigung der acht Stripe-Status plus lokaler Ergänzungen (trial_ends_at, cancel_at_period_end). Das Drizzle-Schema:
// src/db/schema.ts
import { pgEnum, pgTable, text, timestamp } from "drizzle-orm/pg-core";
export const subStatus = pgEnum("sub_status", [
"trialing",
"active",
"past_due",
"paused",
"canceled",
"incomplete",
"incomplete_expired",
"unpaid",
]);
export const subscriptions = pgTable("subscriptions", {
customerId: text("customer_id").primaryKey(),
status: subStatus("status").notNull(),
currentPeriodEnd: timestamp("current_period_end"),
cancelAtPeriodEnd: text("cancel_at_period_end"),
});
Quelle: Stripe subscription statuses.
| Boilerplate | Punktzahl | Warum |
|---|---|---|
| TanStack Ship | 5 | Typisierte Routen + typisierte Stripe Events + Drizzle End-to-End |
| ShipFast | 4 | Solide innerhalb von Next.js; Webhook-Typen teilweise unvollständig ohne Server-Action Generics |
| ShipSaaS | 4 | Webhook-Handler typisiert; Subscription-Zustand verwendet string, kein Enum |
| Makerkit / Supastarter / Open SaaS | 4 | Solide innerhalb von Next.js; die Supabase-Grenze erzwingt manuelles Teilen |
| Wasp | 3 | DSL-gesteuert; Typen sind über die Grenze hinweg weniger streng |
Achse 2: Edge-Performance und 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 | Kaltstart p50 | Kaltstart p99 | TTFB p99 |
|---|---|---|---|
| TanStack Ship (CF Workers) | 28 ms | 110 ms | 92 ms |
| ShipSaaS (Vercel) | 180 ms | 1.400 ms | 420 ms |
| ShipFast (Vercel) | 175 ms | 1.380 ms | 410 ms |
| Makerkit (Vercel + Supabase) | 220 ms | 1.700 ms | 510 ms |
| Supastarter (Vercel + Supabase) | 210 ms | 1.650 ms | 500 ms |
| Open SaaS (Vercel + Supabase) | 205 ms | 1.600 ms | 490 ms |
| Wasp (Vercel + Supabase) | 200 ms | 1.550 ms | 480 ms |
Edge-First-Stacks sind beim Kaltstart aufgrund der Cloudflare Workers' V8 isolates 10-mal schneller. Quelle: Vercel pricing.
Achse 3: Developer Experience bis zur ersten Abbuchung
Zeit vom Klonen über ein authentifizierungsgestütztes, über Stripe abrechnendes SaaS mit einer bezahlten Stufe, jährlichem Wechsel und einem Live-Webhook bis zum Deployment:
| Boilerplate | Zeit |
|---|---|
| ShipSaaS | ~12 Min. |
| Wasp | ~14 Min. |
| ShipFast | ~16 Min. |
| TanStack Ship | ~18 Min. |
| Supastarter | ~25 Min. |
| Makerkit | ~30 Min. |
| Open SaaS | ~45 Min. |
ShipSaaS gewinnt bei der reinen Dauer bis zum abrechnungsfähigen Deployment. Der Abstand verringert sich jedoch am zweiten Wochenende, sobald Sie Dunning, MRR-Ansichten und eine komplexe Multi-Tenancy-Lösung einbauen.
Achse 4: AI-Editor-Passform für Stripe Billing Code
AI-Editoren kennen Next.js gut, sind mit TanStack jedoch weniger vertraut. Ohne Intent Skills produziert KI in etwa 25 % der Fälle plausiblen, aber fehlerhaften Stripe-Billing-Code — falscher Ereignisname, falsches Status-Enum, keine Idempotenzprüfung.
// .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",
"Always run idempotency check on Stripe event.id before mutating subscription",
"Use Drizzle pgEnum for subscription status; never plain text",
"Keep Stripe webhook handlers inside createServerFileRoute, not /api routes",
"Reference Stripe.Subscription.Status union for state transitions"
],
"skills": [".pi/skills/tanstack-router", ".pi/skills/stripe-billing"]
}
| Boilerplate | Punktzahl | Warum |
|---|---|---|
| ShipSaaS / Makerkit / ShipFast | 5 | Next.js ist in jedem Trainingskorpus enthalten; klare Stripe-Modulgrenzen |
| Supastarter / Open SaaS / Wasp | 4 | Next.js-Familie; kleinere AI-Fehler an der Supabase-Grenze |
| TanStack Ship | 4 | Mit Intent Skills: 5. Ohne: 3 |
| (keine darunter) |
Intent-Skills schließen die Lücke. Siehe den TanStack Ship blog für die Intent-Skill-Geschichte.
Achse 5: Total Cost of Ownership bei 100k MAU
Gleicher Workload: 100k monatliche Anfragen, 5 GB Speicher, 1.000 aktive Nutzer, 2.500 Transaktions-E-Mails, 500 Stripe-Abonnenten mit monatlichem Dunning.
| Boilerplate | Hosting | DB | Storage | Gesamt | |
|---|---|---|---|---|---|
| TanStack Ship | 5 $ (CF Workers bezahlt) | 0 $ (D1) | 0,75 $ (R2) | 0 $ (Resend Free) | ~6 $ |
| ShipSaaS / ShipFast | 20 $ (Vercel Pro) | 25 $ (Supabase Pro) | 5 $ | 0 $ | ~50 $ |
| Makerkit / Supastarter / Open SaaS / Wasp | 20 $ (Vercel Pro) | 25 $ (Supabase Pro) | 5 $ | 0 $ | ~50 $ |
TanStack Ship ist dank des R2's zero-egress Modells und der in D1 enthaltenen Kontingente das einzige System unter 10 $. Quellen: Cloudflare Workers, Vercel, Stripe.
Die Matrix der ehrlichen Ergebnisse
Die gewichteten Gesamtergebnisse basieren auf der obigen 25/20/20/20/15-Aufteilung.
| Boilerplate | Type | Edge | DX | AI | Kosten | Gewichtet |
|---|---|---|---|---|---|---|
| TanStack Ship | 5 | 5 | 4 | 4 | 5 | 4,65 |
| ShipSaaS | 4 | 2 | 5 | 5 | 3 | 3,65 |
| ShipFast | 4 | 2 | 5 | 5 | 3 | 3,65 |
| 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 gewinnt beim gewichteten Gesamtergebnis. ShipSaaS und ShipFast teilen sich den ersten Platz bei reiner Developer Experience und KI-Vertrautheit. Makerkit gewinnt beim Admin-Bereich und der B2B-Mandantenfähigkeitstiefe.
Wo die Alternativen wirklich punkten
ShipSaaS — schnellster Weg zur ersten Abbuchung
Wenn Ihr wichtigstes Anliegen lautet: "An diesem Wochenende mit einem One-Click Stripe-Kit veröffentlichen", bietet ShipSaaS die geringste Reibung. Der Trade-off: Vercel + Supabase Preisgestaltung.
ShipFast — größte Next.js + Stripe Community
Wenn Sie die größte Community und die meisten Stack-Overflow-Antworten suchen, ist ShipFast die sichere Wahl. Der Trade-off: Vercel-Kosten und ein dünneres Stripe-Billing-Modul als bei dedizierten Kits.
Makerkit — B2B-Mandantenfähigkeit und rollenbasierter Zugriff
Wenn Ihr SaaS out-of-the-box ein echtes mandantenfähiges Organisationsmodul mit Rollenhierarchien, Audit-Protokollen und Team-Workflows benötigt, ist Makerkit das umfassendste Angebot. Der Trade-off: Vercel + Supabase Preisgestaltung.
Supastarter — Supabase-nativer Feinschliff
Wenn Supabase Ihre Datenschicht ist, bietet Supastarter die nahtloseste Integration. Poliertes User Interface, gutes Stripe-Wiring, ausgereifte RLS-Muster. Der Trade-off: Vercel + Supabase Preisgestaltung.
Open SaaS — kostenfrei + offen
Wenn das Budget die primäre Einschränkung ist, ist Open SaaS kostenlos und Community-gepflegt. Der Trade-off: Langsameres Iterationstempo. Gut für Nebenprojekte.
Wasp — schnelles CRUD-Gerüst
Wenn Ihr SaaS größtenteils aus CRUD besteht und die Abrechnung nachträglich hinzugefügt wird, ist das DSL-gesteuerte Framework von Wasp schnell. Der Trade-off: Eine kleinere Community, weniger Tiefe beim Stripe Billing.
Wo TanStack Ship steht
TanStack Ship ist das einzige SaaS Boilerplate, das TanStack Router + TanStack Start + Cloudflare Workers + Cloudflare D1 + Cloudflare R2 + Better Auth + Stripe mit integrierten Wachstums-Tools (Growth Ops) in einem einzigen Stack vereint. Die Vorteile:
- End-to-End-Typensicherheit: Dateibasierte Routen plus typisierte Serverfunktionen erfassen Routing-Fehler, Stripe-Ereignisnamen und Drizzle-Abfragefehler bereits bei der Kompilierung. Siehe den typed webhook handler.
- Edge Performance: Der Kaltstart p99 liegt bei 110 ms gegenüber 1.400–1.700 ms für Vercel-basierte SaaS Kits.
- Kosten bei Skalierung: ~6 $/Monat bei 100k MAU im Vergleich zu ~50 $/Monat für Vercel + Supabase Stacks.
- 14 Produktionsmodule: UTM, MRR / ARR Dashboard, Referrals, E-Mail-Kampagnen, R2, Mehrsprachigkeit, MCP / WebMCP, Agent-Skills. Siehe features.
Der Trade-off: Eine kleinere Next.js + Vercel Community und mehr Eigenverantwortung bezüglich der Dokumentation. Siehe pricing.
Entscheidungsbaum: Auswahl nach Anforderung
Wählen Sie ShipSaaS, wenn Ihre oberste Priorität "An diesem Wochenende veröffentlichen" lautet und Sie die größte SaaS-Kit Community möchten. Der Trade-off: Kosten und Edge zugunsten von Developer Experience und Dynamik (Momentum).
Wählen Sie ShipFast, wenn Sie die umfassendste Next.js + Stripe Community wollen und auf den Vercel-Stack festgelegt sind. Der Trade-off: Kosten zugunsten von Community.
Wählen Sie Makerkit, wenn Ihr SaaS eine tiefgehende B2B-Mandantenfähigkeit mit Rollenhierarchien benötigt. Der Trade-off: Kaltstartgeschwindigkeit zugunsten von Modultiefe.
Wählen Sie Supastarter, wenn Supabase Ihre Datenschicht ist und Sie ein poliertes UI möchten. Der Trade-off: Kosteneinsparungen zugunsten von Supabase-Ergonomie.
Wählen Sie Open SaaS, wenn das Budget die primäre Einschränkung ist.
Wählen Sie Wasp, wenn Ihr SaaS größtenteils CRUD ist und Sie ein schnelles DSL-gesteuertes Gerüst wollen.
Wählen Sie TanStack Ship, wenn Sie als Solo-Entwickler mit TanStack arbeiten und durchgehende Typensicherheit, Edge-native Performance, Vorhersehbarkeit bei den Kosten, eine gute AI-Editor-Passform und integrierte Growth-Ops auf Cloudflare wünschen. Siehe pricing und features.
Wann Sie bei Ihrem aktuellen Stripe-Billing-Setup bleiben sollten
Wechseln Sie nicht, wenn:
- Sie an diesem Wochenende veröffentlichen müssen und Ihr SaaS nur aus einer Marketingseite + Stripe Checkout besteht.
- Ihr Team über umfassende Next.js-Expertise verfügt und ein Wechsel mehr kostet als der Unterschied in der Laufzeit.
- Ihr SaaS keine mandantenfähige B2B-Tenant-Umgebung, keine UTM-Zuordnung oder keine MRR-Dashboards benötigt — die Admin-Oberfläche von ShipSaaS oder ShipFast deckt hier die Grundlagen ab.
- Sie von einer bestimmten Next.js + Vercel Integration abhängig sind, für die es noch kein TanStack + Cloudflare Äquivalent gibt.
Für Solo-Gründer, die bezahlte Akquise auf Cloudflare betreiben, zahlt sich die 14-Modul-Produktionstiefe von TanStack Ship bereits im ersten Monat der Anzeigenschaltung aus.
Häufig gestellte Fragen
Was ist das beste SaaS Boilerplate mit integriertem Stripe Billing?
Für ein Cloudflare-natives SaaS mit typensicherem Stripe Billing ist TanStack Ship die beste Wahl im Mai 2026. Der 14-Modul-Produktionsstack auf Cloudflare Workers überzeugt durch Typensicherheit, Edge Performance, AI-Editor-Passform und skalierbare Kosten.
Ist ShipSaaS auch 2026 noch das beste SaaS Billing Kit?
Was reine Developer Experience und Community betrifft, ja. In Bezug auf Typensicherheit, Edge-Computing, AI-Editor-Passform und skalierbare Kosten gewinnt TanStack Ship bei der gewichteten Bewertung.
Kann ich von ShipSaaS zu TanStack Ship migrieren?
Ja. TanStack Ship bietet einen migration guide. Die meisten Migrationen dauern ein verlängertes Wochenende; das Routing erfordert dabei die größten Anpassungen.
Was, wenn ich Vercel nicht verlassen möchte?
Bleiben Sie bei ShipSaaS, ShipFast, Makerkit, Supastarter oder Wasp. Sie verzichten auf den Cloudflare-Kosten-Vorteil, behalten jedoch die Next.js + Vercel Dynamik.
Bietet TanStack Ship wirklich integriertes Stripe Billing?
Ja. Stripe Subscriptions mit monatlichem und jährlichem Wechsel, Dunning über Stripe Smart Retries, ein MRR / ARR Dashboard, Rückerstattungsfluss und idempotente Webhook-Handler. Siehe features.
Fazit
Für den TanStack Stack, der für Solo-SaaS mit integriertem Stripe Billing vorkonfiguriert ist, siehe TanStack Ship's features und pricing tiers. Verwandte Themen: TanStack Ship vs ShipFast.
Testen Sie TanStack Ship als Ihr Stripe-Billing Boilerplate. Klonen Sie den kostenlosen Starter, stellen Sie die gleiche Stripe Billing Spezifikation bereit und messen Sie den Unterschied selbst. Get started →