Best Boilerplate with Stripe Integration: ShipFast vs Makerkit vs Supastarter
Stripe Is the Easy Part — Until It Isn't
Every SaaS boilerplate advertises "Stripe integration." But the gap between a basic Stripe Checkout session and a production-ready billing system is enormous.
The basics — creating a subscription, handling a successful payment — take a few hours. The hard parts — subscription upgrades with proration, failed payment recovery, tax calculation, multi-currency, team billing, usage-based pricing — take weeks.
We compared how ShipFast, Makerkit, and Supastarter handle Stripe integration, from the simple stuff to the edge cases that break production billing systems.
TL;DR
Supastarter has the most comprehensive Stripe integration — five payment providers, per-org billing, subscription management UI, and webhook handling for the full subscription lifecycle. Makerkit is a close second with clean billing architecture and Lemon Squeezy support. ShipFast handles the basics well but requires manual work for enterprise billing features. Choose Supastarter for billing flexibility. Choose Makerkit for clean architecture. Choose ShipFast if basic subscriptions are enough.
Key Takeaways
- Supastarter supports 5 payment providers — Stripe, Lemon Squeezy, Polar, Creem, and Dodo Payments. ShipFast and Makerkit support Stripe + Lemon Squeezy.
- Per-organization billing is Supastarter's edge — charge per team, not per user. ShipFast has user-only billing.
- All three handle basic subscriptions — plans, pricing pages, checkout, customer portal. The differences appear in edge cases.
- Webhook handling varies significantly. Supastarter handles 12+ Stripe webhook events. ShipFast handles ~5. Missing webhooks means missing payment state changes.
- Tax calculation is the hardest part — Supastarter and Makerkit support Stripe Tax. ShipFast leaves tax to you.
- Makerkit's billing architecture is cleanest — isolated in its own package, easy to customize or replace.
Feature-by-Feature Comparison
Subscription Management
| Feature | ShipFast | Makerkit | Supastarter |
|---|---|---|---|
| Create subscription | ✅ | ✅ | ✅ |
| Cancel subscription | ✅ | ✅ | ✅ |
| Upgrade/downgrade | ⚠️ Basic | ✅ With proration | ✅ With proration |
| Pause subscription | ❌ | ✅ | ✅ |
| Resume subscription | ❌ | ✅ | ✅ |
| Free trial (no card) | ✅ | ✅ | ✅ |
| Free trial (with card) | ✅ | ✅ | ✅ |
| Subscription quantities | ❌ | ✅ | ✅ |
| Multiple subscriptions | ❌ | ❌ | ⚠️ Manual |
Pricing and Checkout
| Feature | ShipFast | Makerkit | Supastarter |
|---|---|---|---|
| Pricing page | ✅ Pre-built | ✅ Pre-built | ✅ Pre-built |
| Monthly/annual toggle | ✅ | ✅ | ✅ |
| Custom pricing tiers | ✅ Config-based | ✅ Config-based | ✅ Config-based |
| Stripe Checkout | ✅ | ✅ | ✅ |
| Embedded checkout | ❌ | ✅ | ✅ |
| Coupons/promo codes | ⚠️ Manual | ✅ | ✅ |
| Multi-currency | ❌ | ⚠️ Via Stripe | ✅ |
| Tax calculation | ❌ | ✅ Stripe Tax | ✅ Stripe Tax |
Webhook Handling
| Event | ShipFast | Makerkit | Supastarter |
|---|---|---|---|
checkout.session.completed | ✅ | ✅ | ✅ |
customer.subscription.created | ✅ | ✅ | ✅ |
customer.subscription.updated | ✅ | ✅ | ✅ |
customer.subscription.deleted | ✅ | ✅ | ✅ |
invoice.payment_succeeded | ⚠️ | ✅ | ✅ |
invoice.payment_failed | ❌ | ✅ | ✅ |
customer.subscription.trial_will_end | ❌ | ✅ | ✅ |
invoice.upcoming | ❌ | ❌ | ✅ |
customer.updated | ❌ | ✅ | ✅ |
payment_intent.payment_failed | ❌ | ❌ | ✅ |
charge.refunded | ❌ | ❌ | ✅ |
customer.subscription.paused | ❌ | ✅ | ✅ |
Missing webhook events means your application doesn't know about payment failures, upcoming invoices, or subscription state changes. ShipFast covers the basics. Supastarter covers edge cases that matter in production.
Customer Portal
| Feature | ShipFast | Makerkit | Supastarter |
|---|---|---|---|
| Stripe Customer Portal | ✅ Redirect | ✅ Redirect | ✅ Redirect |
| In-app billing UI | ⚠️ Basic | ✅ Custom | ✅ Custom |
| Invoice history | ❌ | ✅ | ✅ |
| Payment method update | ✅ Via portal | ✅ Via portal | ✅ Via portal |
| Usage display | ❌ | ❌ | ⚠️ Manual |
Billing Architecture
| Feature | ShipFast | Makerkit | Supastarter |
|---|---|---|---|
| Billing per user | ✅ | ✅ | ✅ |
| Billing per organization | ❌ | ✅ | ✅ |
| Per-seat pricing | ❌ | ⚠️ Manual | ✅ |
| Usage-based billing | ❌ | ❌ | ⚠️ Manual |
| Multiple payment providers | ⚠️ Stripe only | ✅ Stripe + Lemon Squeezy | ✅ 5 providers |
| Provider switching | ❌ | ✅ Config change | ✅ Config change |
How Each Handles Common Billing Scenarios
Scenario 1: User Upgrades Mid-Cycle
ShipFast: Redirects to Stripe Customer Portal. Stripe handles proration. Your app receives a webhook when the subscription updates. Basic but functional.
Makerkit: Custom in-app upgrade flow. Calls Stripe's subscription.update() with proration_behavior: 'create_prorations'. Shows the prorated amount before confirming. Updates local subscription state via webhook.
Supastarter: Similar to Makerkit but also handles organization-level upgrades. If a team admin upgrades, all team members gain access to the new plan immediately.
Scenario 2: Payment Fails
ShipFast: No built-in handling. The subscription enters Stripe's "past_due" state, but the app doesn't know unless you manually check. Users keep full access until Stripe cancels.
Makerkit: Handles invoice.payment_failed webhook. Shows a banner in the app prompting the user to update their payment method. Optionally restricts feature access during past_due state.
Supastarter: Same as Makerkit, plus sends email notifications about failed payments and handles the customer.subscription.trial_will_end event to send trial ending reminders.
Scenario 3: Team Billing with Per-Seat Pricing
ShipFast: Not supported. You'd need to build team management, organization-level billing, and seat counting from scratch.
Makerkit: Organizations are built-in. Per-seat pricing requires manual implementation but the architecture supports it — add/remove members triggers a subscription quantity update.
Supastarter: Per-organization billing is native. Adding a team member can automatically update the subscription quantity. Removing a member adjusts the next invoice.
Alternative Payment Providers
Lemon Squeezy Support
| Feature | ShipFast | Makerkit | Supastarter |
|---|---|---|---|
| Lemon Squeezy | ❌ | ✅ Full | ✅ Full |
| Tax handling | N/A | ✅ Automatic (LS handles) | ✅ Automatic |
| Global payments | N/A | ✅ 135+ countries | ✅ 135+ countries |
| Merchant of record | N/A | ✅ LS handles | ✅ LS handles |
Lemon Squeezy acts as the Merchant of Record — they handle global tax compliance, VAT, and currency conversion. For solo founders selling globally, this eliminates the need for Stripe Tax configuration.
Supastarter's Additional Providers
Supastarter also supports Polar (open-source focused), Creem, and Dodo Payments. The payment provider is configurable — switch by changing a config value without rewriting billing logic.
The Verdict
For MVP / Indie Hacker:
ShipFast is fine. Basic Stripe subscriptions work. You'll handle edge cases when they arise — most MVPs don't need per-seat billing or failed payment recovery on day one.
For Serious SaaS:
Makerkit gives you clean billing architecture with proper webhook handling. The plugin system means billing is isolated and customizable. Lemon Squeezy support is a bonus for global sales.
For Enterprise / B2B:
Supastarter is the clear winner. Per-organization billing, five payment providers, comprehensive webhook handling, and tax calculation are enterprise table stakes. Building these from scratch takes 4-8 weeks.
Compare billing features across 50+ boilerplates on StarterPick — filter by payment provider, billing model, and pricing.
Check out this boilerplate
View Supastarter on StarterPick →