Best T3 Stack Variations and Forks in 2026
The T3 Stack Ecosystem
Theo Browne's T3 Stack changed how JavaScript developers approach full-stack TypeScript apps. The core formula — Next.js + TypeScript + Tailwind + tRPC + Prisma + NextAuth — spawned an ecosystem of variations addressing different needs.
In 2026, T3 has evolved. Theo's own recommended stack has shifted toward Drizzle (replacing Prisma), Lucia v3 (replacing NextAuth), and server components (augmenting tRPC). The community has followed.
The Variations
create-t3-app — The Original
Price: Free | Creator: Theo Browne / T3 OSS
npm create t3-app@latest
# Choose: Next.js, TypeScript, Tailwind, tRPC, Prisma, NextAuth
Still the best starting point for new T3 apps. Modular — choose which components you want. Each combination is pre-configured and tested. 25k+ GitHub stars.
Best for: Developers new to T3 who want a guided setup.
T3 Turbo — Monorepo Edition
Price: Free | Creator: Julius Marminge
create-t3-app extended to a Turborepo monorepo. Shares API code between Next.js web app and Expo mobile app. Packages: @t3-turbo/api, @t3-turbo/auth, @t3-turbo/db.
apps/
├── nextjs/ # Web app (Next.js + tRPC client)
└── expo/ # Mobile app (Expo + tRPC client)
packages/
├── api/ # tRPC router (shared)
├── auth/ # NextAuth config (shared)
└── db/ # Prisma schema (shared)
Best for: Teams building both a web app and mobile app sharing business logic.
T3 + Drizzle (The 2026 Way)
Price: Free | Creator: Community
The T3 stack with Drizzle ORM replacing Prisma. Drizzle is now often preferred for its smaller bundle size, better edge runtime support, and SQL-like query API.
// Drizzle schema (type-safe, SQL-like)
export const users = pgTable('users', {
id: varchar('id', { length: 255 }).notNull().primaryKey(),
name: varchar('name', { length: 255 }),
email: varchar('email', { length: 255 }).notNull(),
createdAt: timestamp('created_at').defaultNow().notNull(),
});
// Drizzle query (vs Prisma's findMany)
const userList = await db.select().from(users).where(eq(users.email, email));
Best for: Edge deployments, smaller bundle requirements, SQL-fluent developers.
T3 + Lucia Auth
Price: Free | Creator: Community
NextAuth (now Auth.js) can be heavy and opinionated. Lucia v3 provides a lightweight auth library that gives you full control over session management:
import { Lucia } from 'lucia';
import { DrizzlePostgreSQLAdapter } from '@lucia-auth/adapter-drizzle';
export const lucia = new Lucia(adapter, {
sessionCookie: { attributes: { secure: process.env.NODE_ENV === 'production' } },
getUserAttributes: (attributes) => ({
email: attributes.email,
name: attributes.name,
}),
});
Best for: Apps that need custom auth flows beyond what Auth.js provides out of the box.
create-t3-app + shadcn/ui
The most popular T3 customization. shadcn/ui components replace the default Tailwind classes with accessible, copy-paste components:
npx create-t3-app@latest --tailwind
cd my-app
npx shadcn@latest init
npx shadcn@latest add button card input dialog
Best for: Apps that need a polished UI without building a component library from scratch.
T3 Stack Configuration Matrix
| Use Case | Auth | ORM | UI | Extra |
|---|---|---|---|---|
| Quick SaaS | NextAuth | Prisma | shadcn/ui | — |
| Edge SaaS | Lucia | Drizzle | shadcn/ui | Cloudflare |
| Mobile + Web | NextAuth | Prisma | Tamagui | T3 Turbo |
| AI SaaS | Clerk | Drizzle | shadcn/ui | Vercel AI SDK |
| Enterprise | Lucia | Drizzle | shadcn/ui | Custom auth |
When to Use T3 vs Other Starters
T3 Stack is best when:
- You're building a TypeScript-first full-stack app
- Type safety from database to UI is a priority
- tRPC's end-to-end type safety is valuable for your team
- You want fine-grained control over each dependency
Consider ShipFast/Makerkit instead when:
- You need billing/subscriptions pre-configured
- Team management is a requirement
- Email transactional flows need to work from day one
Compare T3 variations and other starters on StarterPick — find your ideal TypeScript stack.
Check out this boilerplate
View create-t3-app on StarterPick →