The MakerKit TanStack Start SaaS starter kit is a production SaaS codebase built on TanStack Start, TanStack Router, and TanStack Query, with authentication, billing, teams, role-based access control, and a super admin panel included. It ships in three variants, Drizzle, Prisma, and Supabase, and all three have been available since launch on July 9, 2026. The feature set matches our Next.js kit; the framework underneath is TanStack Start.
TL;DR
- What it is: a SaaS starter kit on TanStack Start (Vite + Nitro), TanStack Router, and TanStack Query.
- Three variants: Drizzle, Prisma, and Supabase. Drizzle and Prisma share one architecture and differ only in
packages/database. The Supabase variant uses Supabase Auth instead of Better Auth, Postgres Row Level Security (RLS) instead of@kit/rbac, and keeps feature code underpackages/features. - Stack: TanStack Start, React 19, TypeScript 7, Tailwind CSS 4, Base UI, Postgres. Better Auth on Drizzle/Prisma, Supabase Auth on Supabase.
- Dev tooling: oxlint and oxfmt for linting and formatting, TypeScript 7's native compiler for type checking, all chained by
pnpm healthcheck. - AI coding agents:
AGENTS.mdfiles at the root and per package, Claude Code skills in.claude/, and a bundled MCP server wired through.mcp.json. - Included: auth, billing, teams/organizations, RBAC, super admin, storage, transactional emails, i18n, analytics, monitoring, and a CMS for blog and docs.
- Deployment: Nitro builds a Node server by default, and the docs cover Docker, Railway, Vercel, Cloudflare, and a VPS.
- Start here: the TanStack Start landing page, or the Drizzle, Prisma, or Supabase docs.
What is the MakerKit TanStack Start kit?
It is a full SaaS application on TanStack Start: sign-up through paid subscription, team management, and an admin panel. The web app lives in apps/web, runs on vite dev, and uses TanStack Router's file-based routing under apps/web/src/routes.
The three variants:
- TanStack Start + Drizzle (docs): Better Auth, with workspace packages including
@kit/auth,@kit/organization-core,@kit/rbac, and@kit/admin. - TanStack Start + Prisma (docs): the same architecture as Drizzle; only
packages/databasechanges. - TanStack Start + Supabase (docs): Supabase Postgres, Supabase Auth, and RLS-enforced authorization through
@kit/supabase.
All three ship the same features. Drizzle and Prisma differ in one package. Supabase changes the auth provider, the authorization model, and the package layout. Both differences are covered below.
Why we built a TanStack Start version
We built it because a meaningful share of developers prefer TanStack Start's tradeoffs over Next.js App Router, and TanStack Start is now stable enough to run production SaaS apps. We cover the comparison in detail in TanStack Start vs Next.js. The reasons that mattered to us:
Vite for dev and build. TanStack Start runs on Vite, so cold starts and hot module replacement stay fast as the app grows. Large App Router projects tend to slow down in dev; this is the main difference developers notice when they switch.
Type-safe routing. TanStack Router is file-based and fully typed. Route params, search params, and loader data are inferred, so a link to a route that doesn't exist fails type checking instead of returning a 404 in production. String-based route helpers can't do this.
Server functions. Server logic is written as typed server functions and called from the client with types inferred across the boundary. There is no hand-written fetch layer to keep in sync.
TanStack Query built in. Caching, invalidation, and mutations go through TanStack Query from the start instead of being added later.
Deploy targets. TanStack Start builds through Nitro, which outputs a self-contained Node server (apps/web/.output) by default and supports other presets. Our docs include guides for Docker and Railway on the Drizzle/Prisma variants, and for Vercel, Cloudflare, Docker, and a VPS on the Supabase variant. If you host on your own VPS or on Cloudflare, you don't need a platform-specific workaround.
Dev tooling. Linting runs on oxlint and formatting on oxfmt, both from the Rust-based Oxc toolchain. Type checking runs on TypeScript 7, the Go port of the compiler that went GA on July 8, 2026; Microsoft reports 8–12x faster full builds than TypeScript 6 (InfoWorld). pnpm healthcheck runs linting, formatting, type checking, and manypkg fix in one command (unit tests run separately with pnpm test:unit). A short, deterministic check matters for AI coding agents, which run it to verify their own changes before handing them back.
Setup for AI coding agents. The root and each package (packages/database, packages/ui, apps/web, and the rest) have an AGENTS.md. CLAUDE.md references AGENTS.md, and GEMINI.md covers Gemini CLI, so Claude Code, Codex, Cursor, and Gemini read the same conventions. Claude Code also gets skills in .claude/skills (a Drizzle expert, a form builder, a code reviewer, and others). A bundled MCP server (tooling/mcp-server, configured in .mcp.json) exposes MakerKit-specific tools to the agent. See the AI agents docs for the full list.
New to the framework? Read What is TanStack Start first.
What's included
Each item below maps to a package that ships in the kit.
Auth, teams, and permissions
On the Drizzle and Prisma variants, authentication uses Better Auth through @kit/auth and @kit/better-auth: sign-up, sign-in, password reset, email verification, and 2FA/OTP. @kit/organization-core handles multi-tenancy: personal accounts, organizations, member invites, and workspace switching. @kit/rbac adds per-tenant roles, so your customers define their own permissions. The Better Auth + TanStack Start guide explains how the auth wiring works.
On the Supabase variant, the same features run on Supabase Auth through @kit/supabase, and Postgres RLS enforces authorization. Multi-tenancy, member invites, and roles live under packages/features (accounts, team-accounts), and route and function guards use withMinRole and withFeaturePermission from @kit/function-middleware. The TanStack Start + Supabase Auth guide covers that setup.
Billing and admin
On Drizzle and Prisma, billing uses @kit/billing-ui and the billing config package, with Stripe or Polar selected through VITE_BILLING_PROVIDER. On Supabase, @kit/billing-gateway supports Stripe, Lemon Squeezy, and Paddle. Every variant includes subscriptions and a customer portal. The super admin panel lets you manage users and organizations and impersonate accounts for debugging.
Supporting infrastructure
The kit also includes:
- File uploads to S3-compatible storage (
@kit/storage), or Supabase Storage on the Supabase variant - Provider-agnostic transactional email (
@kit/mailers) - Internationalization (
@kit/i18n) - Analytics and monitoring (
@kit/analytics,@kit/monitoring) - A marketing site, blog, and docs backed by
@kit/cms
Drizzle vs Prisma: what's the difference?
The only difference is the ORM in packages/database. Auth, billing, teams, RBAC, admin, routing, and UI are identical in both variants.
- The Drizzle variant depends on
drizzle-ormandpostgres, and usesdrizzle-kitfor migrations and Drizzle Studio. - The Prisma variant depends on
@prisma/clientand the Prisma Postgres adapter, and uses the Prisma CLI for migrations and Prisma Studio.
The packages/database dependencies are the whole diff:
// packages/database — Drizzle variant"dependencies": { "drizzle-orm": "...", "postgres": "...", "drizzle-kit": "..."}// packages/database — Prisma variant"dependencies": { "@prisma/client": "...", "@prisma/adapter-pg": "...", "prisma": "..."}Choose based on how you prefer to work with your database, since the features are the same. Prisma 7 dropped the Rust query engine and is pure TypeScript, so both variants deploy to Nitro's serverless and edge targets. Drizzle is our default for the TanStack Start kit; Prisma is a drop-in alternative. For bundle size and workflow comparisons, read TanStack Start: Drizzle vs Prisma.
When to choose the Supabase variant
Choose the Supabase variant if you already run on Supabase, or if you want Postgres RLS to be your authorization layer instead of Better Auth's application-level checks.
It replaces packages/database and Better Auth with packages/supabase (Supabase clients and generated types) and Supabase Auth. Feature code is organized under packages/features (accounts, admin, auth, notifications, team-accounts) instead of the separate @kit/organization-core, @kit/rbac, and @kit/admin packages used by Drizzle and Prisma.
It is also the migration path for teams on our Next.js + Supabase kit who want TanStack Router and Vite without leaving Supabase.
How to get started
Pick a variant and follow its installation guide:
- TanStack Start + Drizzle installation
- TanStack Start + Prisma installation
- TanStack Start + Supabase installation
The kit is a Turborepo monorepo managed with pnpm. Drizzle and Prisma run local Postgres in Docker; Supabase uses the Supabase CLI for local Postgres, Auth, and Storage. pnpm dev starts the app, and the docs cover environment variables, database setup, and your first deploy.
Screenshots and pricing are on the TanStack Start SaaS starter kit landing page.