// Turborepo scaffold engine
█████╗██████╗ ███████╗ █████╗ ████████╗███████╗
██╔══╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
██║   ██████╔╝█████╗  ███████║   ██║   █████╗
██║   ██╔══██╗██╔══╝  ██╔══██║   ██║   ██╔══╝
╚████╗██║  ██║███████╗██║  ██║   ██║   ███████╗
 ╚═══╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝   ╚═╝   ╚══════╝
████████╗██╗   ██╗██████╗ ██████╗  ██████╗
╚══██╔══╝██║   ██║██╔══██╗██╔══██╗██╔═══██╗
   ██║   ██║   ██║██████╔╝██████╔╝██║   ██║
   ██║   ██║   ██║██╔══██╗██╔══██╗██║   ██║
   ██║   ╚██████╔╝██║  ██║██████╔╝╚██████╔╝
   ╚═╝    ╚═════╝ ╚═╝  ╚═╝╚═════╝  ╚═════╝
███████╗████████╗ █████╗  ██████╗██╗  ██╗
██╔════╝╚══██╔══╝██╔══██╗██╔════╝██║ ██╔╝
███████╗   ██║   ███████║██║     █████╔╝
╚════██║   ██║   ██╔══██║██║     ██╔═██╗
███████║   ██║   ██║  ██║╚██████╗██║  ██╗
╚══════╝   ╚═╝   ╚═╝  ╚═╝ ╚═════╝╚═╝  ╚═╝

Scaffold production-ready Turborepo monorepos in seconds, not days. Database, auth, API, shared UI, environment validation — all wired correctly from the start.

create-turbo-stack
bash
$
9App types
3Databases
5Auth providers
10Integrations
01Why

The hard part isn't creating files

It's wiring them correctly across packages — the part every starter skips.

Wiring > scaffolding

File count is easy. Correct cross-package wiring is the value — Tailwind @source, catalog deps, env chains, tsconfig refs, all consistent.

@source "../../packages/ui/src";
"react": "catalog:"
extends: [authEnv, dbEnv]

Zero version drift

Every dependency is pinned once in the root catalog. Workspaces use the catalog: protocol — no mismatched React across packages, ever.

Env validation

t3-env chains per app. Missing vars crash at boot, not in prod.

tsconfig chain

One shared base, per-package extends. Same compiler options everywhere.

Synced with the schema

Every option on this page is read from the same Zod schema the CLI and builder use. The site can't drift from what's actually supported.

Preset = universal contract

CLI, web builder, community registry and MCP all emit the same Preset JSON. Save it, share it by URL, reuse it.

02How it works

One preset, fully wired

Three steps from an empty folder to a monorepo that already compiles.

01

Answer the prompts

Pick a package manager, database, auth, API layer and styling — or load a preset to skip ahead.

$ npx create-turbo-stack
02

Core resolves the preset

One Preset JSON drives the engine: file tree, dependency catalog, CSS @source, env chains and tsconfig refs.

preset.json → TreeDiff
03

Ship a wired monorepo

Apps and packages, correctly cross-wired from the first commit. Run install, then dev. That's it.

$ bun install && bun dev
03Stack

Choose your stack

Read straight from the schema — the same list the CLI and builder use.

Database03
SupabaseDrizzlePrisma
API03
tRPCHonoREST (Next.js)
Auth05
Supabase AuthBetter AuthClerkNextAuth.jsLucia
CSS03
Tailwind CSS 4Vanilla CSSCSS Modules
UI01
shadcn/ui
Apps09
Next.jsNext.js (API only)ExpoHono StandaloneVite + ReactVite + VueSvelteKitAstroTauri
04Integrations

Batteries, optional

Drop-in providers wired with env validation and per-app packages.

Analytics

03
  • PostHog
  • Vercel Analytics
  • Plausible

Error Tracking

02
  • Sentry
  • Bugsnag

Email

02
  • React Email + Resend
  • Nodemailer

Rate Limit

01
  • Upstash

AI

02
  • Vercel AI SDK
  • LangChain
05Under the hood

The wiring you'd otherwise hand-write

A few of the cross-package files the engine generates and keeps consistent.

Dependency catalogpackage.json
{
  "workspaces": {
    "catalog": {
      "react": "19.2.4",
      "next": "16.2.0",
      "zod": "4.3.6"
    }
  }
}

// packages/ui/package.json
"dependencies": {
  "react": "catalog:"
}
CSS @source directivesapps/web/app.css
@import "tailwindcss";

/* generated — every package that
   ships classes is wired in */
@source "../../packages/ui/src";
@source "../../packages/email/src";
Typed env chainapps/web/env.ts
import { createEnv } from "@t3-oss/env-nextjs";
import { env as auth } from "@acme/auth/env";
import { env as db } from "@acme/db/env";

export const env = createEnv({
  extends: [auth, db],
  server: { RESEND_KEY: z.string() },
});
06Presets

Built-in presets

Start with a proven configuration. Or build your own.

minimal

Next.js + UI package + Tailwind 4 + Biome

$ npx create-turbo-stack --preset minimal
saas-starter

Supabase + tRPC + shadcn + i18n + Sentry + PostHog

$ npx create-turbo-stack --preset saas-starter
api-only

Hono + Drizzle + Upstash — no frontend

$ npx create-turbo-stack --preset api-only
// 07 — Agents

Scaffold from your editor

An MCP server exposes the engine to AI agents. Claude Code and Cursor run the CLI through the Model Context Protocol — they emit a Preset, not raw files.

Read the MCP docs
claude
mcp
▸ create_preset({
    apps: ["web"],
    database: "drizzle",
    auth: "better-auth"
  })

✓ preset resolved → 6 packages
✓ ready to scaffold

Ready to build?

~/projects
$ npx create-turbo-stack