Most Next.js SaaS starter kit guides focus entirely on authentication and boilerplate structure. This guide goes deeper. In real SaaS products, payments are where production issues usually appear first, and the payment provider you choose affects almost everything: transaction fees, tax compliance, subscription flexibility, and even which starter kits make sense for your business model.
This guide explains the strongest Next.js SaaS starter kits available in 2026, the payment decision many founders underestimate, and the exact process of integrating payments into any Next.js SaaS starter.
What Is the Best Next.js Starter Kit for SaaS in 2026?
There is no universal answer because the best option depends on three factors:
- Which payment provider you plan to use
- Whether you're building solo or with a team
- Whether multi-tenancy is required from the beginning
Best Free Next.js Starter Kits on GitHub
ixartz/SaaS-Boilerplate
Currently, the most feature-rich free Next.js SaaS starter kit that is actively maintained. Includes multi-tenancy with organisation support, RBAC, Clerk authentication (social login, magic links, passkeys, MFA, and user impersonation), Drizzle ORM, Stripe billing, landing page, dashboard, internationalisation, Shadcn UI, Vitest, Playwright, Sentry, and GitHub Actions CI/CD. Already updated for Next.js 16.
One important detail: authentication is powered by Clerk. Clerk has a generous free tier, but once you exceed the monthly active user limits, pricing becomes usage-based. That cost should be considered before fully committing to the stack.
GitHub:
github.com/ixartz/SaaS-Boilerplate
Best for:
Multi-tenant SaaS applications need maximum functionality with no upfront cost.
nextjs/saas-starter
The official minimal SaaS starter is maintained directly by the Vercel and Next.js team. Includes Auth.js v5, Drizzle ORM, PostgreSQL, Stripe billing, Shadcn UI, and Tailwind CSS. It always tracks the newest stable Next.js version.
What it intentionally excludes:
Multi-tenancy, permissions and roles, transactional emails, internationalisation, and testing infrastructure. The project is designed more as a reference implementation than a production-ready SaaS framework.
GitHub:
github.com/nextjs/saas-starter
Best for:
Developers learning modern Next.js SaaS architecture or building heavily customised systems from a lightweight foundation.
PaddleHQ/paddle-nextjs-starter-kit
Paddle's official starter kit for Next.js applications. Designed specifically for SaaS products using Paddle Billing, Supabase, and Vercel. Comes with localized pricing pages, inline checkout flows, and authenticated dashboards with subscription management included.
Notably, this is the only major starter kit officially maintained by a payment company outside the Stripe ecosystem.
GitHub:
github.com/PaddleHQ/paddle-nextjs-starter-kit
Best for:
Teams choosing Paddle instead of Stripe for billing infrastructure.
mickasmt/next-saas-stripe-starter
A clean and thoughtfully organised open-source starter kit. Includes Auth.js v5, Prisma ORM, Neon serverless PostgreSQL, Stripe subscriptions, Resend for transactional email delivery, React Email templates, Shadcn UI, and a role-based admin dashboard.
This sits comfortably between the minimal Vercel starter and the larger ixartz boilerplate. Easier to understand than ixartz while still offering more functionality than the official starter.
GitHub:
github.com/mickasmt/next-saas-stripe-starter
Best for:
Teams wanting a clean architecture without the heavier complexity of enterprise-oriented boilerplates.
boxyhq/saas-starter-kit
An enterprise-oriented free SaaS starter kit. Includes SAML SSO, SCIM directory sync, audit logs, and webhook infrastructure alongside standard SaaS features. Built by a company focused on enterprise identity and security APIs.
GitHub:
github.com/boxyhq/saas-starter-kit
Best for:
Enterprise B2B SaaS platforms requiring compliance and security review readiness.
The Paddle Next.js Starter Kit: An Underrated Option
Most developers default to Stripe automatically. Paddle's official starter kit deserves more attention because Paddle operates under a fundamentally different billing model.
What Paddle's starter includes
The PaddleHQ/paddle-nextjs-starter-kit is a complete, production-ready starter that includes:
The PaddleHQ/paddle-nextjs-starter-kit provides:
Localised pricing pages with multi-currency support
Inline checkout embedded directly into the application
Authenticated billing dashboard
Webhook synchronisation between Paddle and your database
Supabase authentication and database integration
Shadcn UI and Tailwind CSS
One-click Vercel deployment support
What makes Paddle different from Stripe
Paddle acts as a Merchant of Record (MoR). Legally, Paddle becomes the seller of your software products. This means Paddle handles:
VAT collection and remittance
GST compliance
US sales tax collection
Global tax calculations and filings
Instead of managing tax registrations across dozens of jurisdictions, you simply receive payouts from Paddle after taxes are already handled.
Stripe works differently. Stripe is only the payment processor. You remain the legal seller and are responsible for global tax compliance yourself. Stripe Tax can automate calculations, but filing and compliance obligations remain yours.
Paddle's fee structure
Paddle charges 5% + $0.50 per transaction.
Stripe charges 2.9% + $0.30 per transaction, plus 0.5% for Stripe Tax.
Once you add currency conversion, international card fees, and Stripe Billing for subscription management, the effective rate for internationally selling SaaS products is often comparable.
When to choose Paddle's starter kit
Choose Paddle when:
You're selling internationally
Your audience includes consumers or small businesses
You want taxes fully managed
You don't want to deal with VAT registration and remittance
The extra 2–3% cost is usually worth it for small teams and solo founders without dedicated finance or legal resources.
When Stripe makes more sense:
You're building B2B SaaS
Most customers are in a single country
You need deep billing customisation
You require full API flexibility and advanced checkout workflows
Stripe remains stronger for highly customised enterprise billing systems and developer-heavy payment flows.
Stripe vs Lemon Squeezy vs Paddle: Which Should Your Starter Use?
This decision comes before choosing a starter kit. Once you commit to a payment provider, your available starter kit choices become much narrower because most SaaS starters are tightly built around one billing system.
The merchant of record decision
The key distinction is whether you want to operate as the Merchant of Record yourself (Stripe) or use a platform that becomes the Merchant of Record on your behalf (Lemon Squeezy or Paddle).
Stripe: You remain the seller. Customers see your business name on invoices and bank statements, not Stripe's. You keep full ownership of the customer relationship and gain access to one of the most flexible subscription billing systems available.
The trade-off: You are responsible for global tax compliance yourself, either manually or with tools like Stripe Tax.
Lemon Squeezy: Lemon Squeezy acts as the Merchant of Record for your SaaS business. They manage worldwide tax compliance automatically.
Pricing:
5% + $0.50 per transaction.
Advantages:
Very easy setup
Minimal billing configuration
Global tax handling included
VAT/GST management included
Notable detail: Stripe acquired Lemon Squeezy in July 2024, although Lemon Squeezy still operates independently.
Paddle: Paddle also acts as the Merchant of Record and handles:
VAT
GST
US sales tax
International tax remittance
Compared to Lemon Squeezy, Paddle offers stronger enterprise billing features and broader international payment support, including:
KakaoPay
NaverPay
WeChat Pay
Pix
Advanced subscription management
Which starter kits support each provider
Stripe: ixartz SaaS Boilerplate, nextjs/saas-starter, mickasmt/next-saas-stripe-starter, boxyhq/saas-starter-kit, Kostra, ShipFast (default), MakerKit (primary option)
Lemon Squeezy: Supastarter supports both Stripe and Lemon Squeezy. Some MakerKit tiers support Lemon Squeezy.
Paddle: PaddleHQ/paddle-nextjs-starter-kit (official), and some commercial kits like Supastarter add Paddle as an option.
The practical decision for most founders
Solo founder, global consumer SaaS: Lemon Squeezy or Paddle. Tax compliance handled for you. Worth the extra 2%.
B2B SaaS, customers primarily US/EU: Stripe. More control, lower fees at scale, better subscription management for complex B2B billing.
Large global product, enterprise features needed: Paddle. Better international payment method support than Lemon Squeezy, more enterprise-focused.
How to Add Payments to a Next.js SaaS Starter
If your chosen starter doesn't include payments, or you need to swap the payment provider, here's how to add each option.
Adding Stripe
Install the Stripe SDK:
npm install stripe @stripe/stripe-js
Add your keys to .env.local:
STRIPE_SECRET_KEY=sk_test_...
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
Create a checkout session in a Server Action:
// app/actions/billing.ts
'use server'
import Stripe from 'stripe'
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!)
export async function createCheckoutSession(priceId: string, userId: string) {
const session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
mode: 'subscription',
line_items: [{ price: priceId, quantity: 1 }],
success_url: ${process.env.NEXT_PUBLIC_APP_URL}/dashboard?success=true,
cancel_url: ${process.env.NEXT_PUBLIC_APP_URL}/pricing,
metadata: { userId },
})
return { url: session.url }
}
Create a webhook handler to keep your database in sync:
// app/api/stripe/webhook/route.ts
import Stripe from 'stripe'
import { headers } from 'next/headers'
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!)
export async function POST(req: Request) {
const body = await req.text()
const signature = (await headers()).get('stripe-signature')!
let event: Stripe.Event
try {
event = stripe.webhooks.constructEvent(
body,
signature,
process.env.STRIPE_WEBHOOK_SECRET!
)
} catch {
return new Response('Invalid signature', { status: 400 })
}
switch (event.type) {
case 'customer.subscription.created':
case 'customer.subscription.updated':
// Update subscription status in your database
break
case 'customer.subscription.deleted':
// Remove subscription access in your database
break
}
return new Response(null, { status: 200 })
}
Test webhooks locally:
stripe listen --forward-to localhost:3000/api/stripe/webhook
Adding Paddle
Install the Paddle.js SDK:
npm install @paddle/paddle-js
Add your Paddle keys to .env.local:
NEXT_PUBLIC_PADDLE_CLIENT_TOKEN=test_...
PADDLE_API_KEY=pdl_...
PADDLE_NOTIFICATION_WEBHOOK_SECRET=...
NEXT_PUBLIC_PADDLE_ENV=sandbox
Initialize Paddle in your layout:
// app/providers.tsx
'use client'
import { initializePaddle, Paddle } from '@paddle/paddle-js'
import { useEffect, useState } from 'react'
export function PaddleProvider({ children }: { children: React.ReactNode }) {
const [paddle, setPaddle] = useState()
useEffect(() => {
initializePaddle({
environment: process.env.NEXT_PUBLIC_PADDLE_ENV as 'sandbox' | 'production',
token: process.env.NEXT_PUBLIC_PADDLE_CLIENT_TOKEN!,
}).then(paddleInstance => setPaddle(paddleInstance))
}, [])
return (
// Pass paddle instance to context if needed
<>{children}</>
)
}
Open a checkout:
paddle?.Checkout.open({
items: [{ priceId: 'pri_your_price_id', quantity: 1 }],
})
Create a webhook handler to sync subscription state:
// app/api/webhook/route.ts
import { EventName } from '@paddle/paddle-node-sdk'
export async function POST(req: Request) {
const signature = req.headers.get('paddle-signature')!
const rawBody = await req.text()
// Verify signature
// Process event.eventType
// Update database accordingly
return new Response(null, { status: 200 })
}
The Paddle starter kit (PaddleHQ/paddle-nextjs-starter-kit) has all of this pre-configured. Cloning it is faster than implementing from scratch.
Adding Lemon Squeezy
npm install @lemonsqueezy/lemonsqueezy.js
LEMONSQUEEZY_API_KEY=...
LEMONSQUEEZY_STORE_ID=...
LEMONSQUEEZY_WEBHOOK_SECRET=...
Lemon Squeezy uses a hosted checkout URL rather than an inline checkout. You redirect users to checkoutUrl returned from the API to complete payment.
import { createCheckout } from '@lemonsqueezy/lemonsqueezy.js'
const checkout = await createCheckout(storeId, variantId, {
checkoutOptions: { embed: false },
checkoutData: { email: userEmail },
productOptions: {
redirectUrl: ${process.env.NEXT_PUBLIC_APP_URL}/dashboard,
},
})
redirect(checkout.data?.data.attributes.url)
How to Set Up a Next.js Starter Kit with Auth, Database, and Stripe
Full setup flow from clone to running locally, using the ixartz SaaS Boilerplate as the example.
Step 1: Clone without Git history
npx degit ixartz/SaaS-Boilerplate my-saas
cd my-saas
npm install
cp .env.example .env.local
Step 2: Configure your database
The ixartz boilerplate uses Drizzle ORM. Create a free PostgreSQL database on Neon (neon.tech), then add the connection string:
DATABASE_URL=postgres://user:pass@host/dbname?sslmode=require
Run migrations:
npm run db:migrate
Step 3: Set up Clerk auth
Create a Clerk application at clerk.com. Add the keys to .env.local:
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_...
CLERK_SECRET_KEY=sk_test_...
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/dashboard
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/onboarding
Enable the OAuth providers you want (Google, GitHub) in the Clerk dashboard under Social Connections.
Step 4: Set up Stripe
Create a Stripe account. In test mode, create your products and pricing tiers. Add the keys:
STRIPE_SECRET_KEY=sk_test_...
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
Update the pricing tiers in the boilerplate to match your Stripe price IDs.
Step 5: Configure email
The ixartz boilerplate uses Sentry for error monitoring but doesn't include email by default. Add Resend for transactional email:
npm install resend
RESEND_API_KEY=re_...
Step 6: Run locally and test
npm run dev
In a separate terminal, start the Stripe webhook forwarding:
stripe listen --forward-to localhost:3000/api/stripe/webhook
Test the full flow: sign up, create an organization, upgrade to a paid plan using test card 4242 4242 4242 4242. Check your database to verify subscription status updated correctly.
Step 7: Deploy
Push to GitHub. Connect to Vercel. Add all production environment variables. Create a production Stripe webhook pointing to https://yourdomain.com/api/stripe/webhook. Switch Stripe keys from test to live.
Which Next.js Starter Kit Is Best for Solo Founders?
There are specific priorities that solo founders have versus teams: speed to launch over architecture, documentation over flexibility, and cost over feature completeness.
Free option for solo founders: ixartz SaaS Boilerplate
Feature complete, well-maintained, and free. Drawback: setup process takes more time. ixartz boilerplate does more than most paid starters but takes some configuring. Expect to allocate half a day to go through the boilerplate code and configure all services.
Paid option for solo founders: ShipFast
Best known for its ability to give you a quick SaaS launch out of the box. Everything is well-documented. Discord community is large and engaged. Consistently, developers claim they can launch their SaaS, with user authentication and payment, within a day after buying. Drawback: opinionated stack, which means it's hard to deviate from. It relies heavily on Clerk + Stripe + a specific folder structure.
For global consumer SaaS specifically: Paddle starter kit
If you're selling your product internationally and don't want to think about taxes, use Paddle Next.js starter kit. Officially supported by Paddle and free, it will save you the headache of figuring out global tax compliance once you start seeing orders from other countries.
What nobody dares to ask the solo founder about explicitly:
How much time you have?
If you can spend at least a couple of days setting up your SaaS framework, use ixartz for free. Otherwise, if you need to write product features the next day, a paid starter like ShipFast pays itself off after the first afternoon.
Downloading and Setting Up a Next.js Starter Kit
Method 1: degit (recommended)
npx degit username/repo my-project
cd my-project
npm install
degit clones without Git history. You get clean project ownership from day one without the original repo's commit history.
Method 2: GitHub template
Many starter repos have a "Use this template" button on GitHub. This creates a new repo in your GitHub account forked from the starter. Good if you want the initial commit history and a linked GitHub repo immediately.
Method 3: npx create commands
Some starters offer a create command:
npx create-next-app@latest --example "https://github.com/nextjs/saas-starter"
After cloning: the mandatory first steps
Before you start coding your actual product, remember to perform these actions:
Read the README completely. Understand what's included before you start. Most setup problems come from skipping steps described in the documentation.
Copy .env.example to .env.local and fill in all values. Most starters won't run at all without their required environment variables. All of them are documented in .env.example with explanations.
Check the Next.js version. To do this, open package.json of the starter. If Next.js version number is less than 15.x, this means you're working with an outdated version. If it is less than 16.x - it dates back to times before major changes in 2025年年底前.
FAQs
Where can I find Next.js starter kit repos on GitHub?
There is one topic specifically created for Next.js starters - nextjs-saas. Other popular searches include nextjs saas starter kit, saas boilerplate nextjs, or nextjs starter template. Use sorting by Most Stars to filter for quality and inspect the last commit date. Repos to consider: ixartz/SaaS-Boilerplate, nextjs/saas-starter, PaddleHQ/paddle-nextjs-starter-kit, boxyhq/saas-starter-kit.
How do I download a Next.js starter kit?
Clone it with npx degit username/repo my-project to get a fresh codebase with no Git history, or git clone https://github.com/username/repo to make a full clone with history included. After that, use npm install, copy the env variables in .env.example to .env.local, fill up values and run npm run dev.
What is the best Next.js starter template?
There isn't a single "best" Next.js starter template. For regular projects, try ixartz/Next-js-Boilerplate (free, supports the latest Next.js 16). If you need multi-tenancy in your SaaS, check out ixartz/SaaS-Boilerplate (free) and Kostra (paid, used in production by bigger companies). To use Paddle Billing, there is PaddleHQ/paddle-nextjs-starter-kit (free, official).
Are there free Next.js templates available?
Absolutely! Here are the strongest free options: nextjs/saas-starter (official and minimal), ixartz/SaaS-Boilerplate (most features), PaddleHQ/paddle-nextjs-starter-kit (integrates with Paddle), boxyhq/saas-starter-kit (enterprise), mickasmt/next-saas-stripe-starter (minimal but clean). These repos are all free to use and licensed under a permissive open-source license.
What is the Paddle Next.js starter kit?
The PaddleHQ/paddle-nextjs-starter-kit is an official starter kit for Next.js developed and supported by Paddle. It provides a comprehensive base for creating SaaS products using Paddle billing (not Stripe), Supabase for auth and backend database, and Vercel for hosting your app. Includes landing page with pricing, inline checkout, authenticated user dashboard, and webhooks handler. Paddle Billing is the Merchant of Record and takes care of global tax compliance for you. The starter is completely free and available both on GitHub and deployed via the Vercel templates library.
What is the best Next.js starter kit overall in 2026?
It really depends on your payment provider and the number of developers. If you are a solo founder or have a small team and need the most feature-rich option for free, use ixartz SaaS Boilerplate. If you want only a minimal starter template from the Next.js team, then try nextjs/saas-starter. For projects working with Paddle, their official starter kit should work just fine. Finally, Kostra will be the best choice for a paid production-ready solution. What people mean when saying SaaS starter kit from "Bulletproof Next.js" developers is ixartz SaaS Boilerplate.
What is the best Next.js starter kit in 2025 and 2026?
Quite a difference there between those two years. Next.js 16 was released in October 2025 and introduced major changes, such as replacing the middleware.ts file with proxy.ts and using Turbopack by default. At the same time, Tailwind CSS v4 became stable and deprecated its JavaScript config file. Next.js starter kits that have not been updated are now using outdated configurations.
Here are the actively maintained and kept-up-to-date options for the Next.js starter kit in 2026: ixartz SaaS Boilerplate (free, uses the latest Next.js 16 and Tailwind v4), Blazity/next-enterprise (free and enterprise-grade), nextjs/saas-starter (always current), Kostra (actively maintained and paid). Check the last commit date and the Next.js version in the package.json of the starter before using it.


Top comments (0)