DocsCLI
Open documentation actions
Create Command
Scaffold a new Better Fullstack project with prompts, defaults, templates, shapes, or explicit flags.
create writes a new project from a typed stack configuration. Use it interactively to explore, or pass flags when you need the same project shape every time.
npm create better-fullstack@latest [project-name] -- [flags]For npm, Better Fullstack flags go after --.
Design-system lint
Select shadcn-lint together with oxlint, or with both eslint and prettier, through --addons. For graph input, use --part codeQuality:universal:oxlint --part codeQuality:universal:shadcn-lint, or replace the Oxlint part with both codeQuality:universal:eslint and codeQuality:universal:prettier. The interactive Code Quality prompt accepts one base profile and this optional second check.
This requires Tailwind CSS v4 and one of next, vinext, tanstack-router, tanstack-start, react-router, or react-vite. Generated DESIGN.md explains the initial Button contract and lint:design command. The configuration and dependencies are also present with --no-install and in builder downloads.
Operational contract
| Concern | Contract |
|---|---|
| Preview | Add --dry-run to render and list files without writing them. |
| Writes | Creates a project directory; dependency installation and Git initialization follow --install and --git. |
| Safe inspection | Combine --dry-run, --no-install, and --no-git. |
| Recovery | Generate into a new directory and remove it if you reject the scaffold. Existing-directory behavior is controlled by --directory-conflict. |
| Source of truth | The live CLI schema and the generated flag tables below, shared with the Stack Builder and MCP server. |
Command modes
| Mode | Shape | Use it when |
|---|---|---|
| Wizard | [launcher] my-app | You want prompts and defaults. |
| Defaults | [launcher] my-app [flags] --yes | You want the default stack without prompts. |
| Scripted | [launcher] my-app [flags] | You want repeatable output. |
| Dry run | [launcher] my-app [flags] --dry-run | You want to inspect files before writing. |
Project shapes
--shape names what you are building, and the CLI then runs only the prompts that shape needs:
| Shape | Asks | Result |
|---|---|---|
--shape fullstack | Nothing extra; the standard composition prompt runs. | The full guided flow. |
--shape frontend | TypeScript, Rust, or .NET. | A client app with the server half switched off. |
--shape backend | TypeScript, Go, Rust, Python, Java/Kotlin, .NET, or Elixir. | An API with no web frontend. |
--shape mobile | React Native, Kotlin, Swift, or Flutter. | A mobile app on the platform you pick. |
# Prompts for the mobile platform
bun create better-fullstack@latest my-app --shape mobile
# Platform answered up front; Kotlin libraries and Git are still asked
bun create better-fullstack@latest my-app --shape mobile --kotlin-mobile compose-multiplatform
# Fully prompt-free
bun create better-fullstack@latest my-app --shape backend --ecosystem go --yesWith --yes, nothing is left to prompt, so a shape falls back to its default ecosystem: TypeScript for frontend and backend, React Native for mobile.
A shape decides the stack, so the CLI rejects rather than silently overrules a command that already decides it too: --config, --from-history, --part, and --template each carry a complete stack; a flag the shape switches off contradicts it; and --shape mobile accepts selectors for exactly one platform. Kotlin, Swift, and Flutter apps build through Gradle, XcodeGen, and Flutter, which the CLI does not run, so --install is skipped with a notice on those platforms instead of reporting an install that never happened.
Templates
--template starts from a filled-in stack. Flags you pass alongside override individual fields, and --yes accepts the rest as-is:
| Template | Stack |
|---|---|
t3 | Next.js, tRPC, Prisma, PostgreSQL, Better Auth, Biome, Turborepo |
saas | Next.js, tRPC, Drizzle, PostgreSQL, Better Auth organizations, Creem billing |
mern | React Router, Express, Mongoose, MongoDB Atlas, oRPC, Better Auth |
pern | TanStack Router, Express, Drizzle, PostgreSQL, tRPC, Better Auth |
uniwind | Expo with Uniwind, mobile only, no backend |
npm create better-fullstack@latest my-app -- --template t3Prompt behavior
- Explicit flags skip only the categories they cover.
--yesaccepts defaults and conflicts with core stack flags such as--frontend,--backend,--database,--orm,--auth, and--api.- Use
noneto disable optional categories, including--ai-docs none. --verifyruns every generated target check after scaffolding without starting dev servers. Those toolchains may fetch dependencies and write normal lockfiles, caches, or build artifacts.--version-channel latestfollows npmlatesttags except for temporary compatibility holds that keep generated projects installable.
Flag tables
The tables below are generated from the same shared schemas the CLI, Stack Builder, and MCP server use.
Common
| Flag | Accepted values | Default |
|---|---|---|
--ecosystemLanguage/runtime ecosystem to scaffold. |
| typescript |
--templateStart from a curated stack preset instead of individual flags. |
| - |
--shapeStart from a project shape. Asks which language or platform, then only the prompts that shape needs. |
| - |
--partAdd a multi-ecosystem stack part. Repeat once per part. | role:ecosystem:tool (e.g. frontend:typescript:next) | - |
--examplesmultipleOptional example features to include. |
| none |
--ai-docsmultipleAgent instruction files to generate. |
| claude-md agents-md |
--package-managerPackage manager for the generated workspace. |
| bun |
--workspace-shapeMonorepo or single-app workspace layout. |
| monorepo |
--version-channelDependency version channel. |
| stable |
--web-deployDeployment target config for the web app. |
| none |
--server-deployDeployment target config for the server. |
| none |
--directory-conflictStrategy when the target directory already exists. |
| - |
--installInstall dependencies after scaffolding. | --install / --no-install | --install |
--gitInitialize a Git repository. | --git / --no-git | --git |
--dry-runPreview generated files without writing them. | boolean flag | - |
--verifyRun generated checks after scaffolding where supported. | boolean flag | - |
--yesAccept defaults. Conflicts with core stack flags. | boolean flag | - |
--yoloSkip safety confirmations where supported. | boolean flag | - |
--verbosePrint detailed scaffold output. | boolean flag | - |
--disable-analyticsOpt out of anonymous CLI analytics. | boolean flag | - |
TypeScript stack
Use these with --ecosystem typescript.
| Flag | Accepted values | Default |
|---|---|---|
--frontendmultipleWeb frontend framework(s). |
| tanstack-router |
--backendBackend framework. `self` pairs with fullstack frontends. |
| hono |
--runtimeServer runtime. |
| bun |
--databaseDatabase engine. |
| sqlite |
--ormORM / query layer. |
| drizzle |
--db-setupHosted database provider setup. |
| none |
--authAuthentication provider. |
| better-auth |
--apiAPI layer. tRPC is React-oriented. |
| trpc |
--astro-integrationAstro UI framework integration (Astro frontends). |
| none |
--manual-dbSkip provider-specific database setup prompts. | boolean flag | - |
Services
| Flag | Accepted values | Default |
|---|---|---|
--aiAI SDK / agent framework. |
| none |
--paymentsPayments provider. |
| none |
--emailEmail provider. |
| none |
--realtimeRealtime transport. |
| none |
--job-queueBackground job / queue system. |
| none |
--cmsContent management system. |
| none |
--cachingCache layer. |
| none |
--searchSearch engine. |
| none |
--file-storageObject storage provider. |
| none |
--file-uploadFile upload helper. |
| none |
--analyticsWeb analytics provider. |
| none |
--web-mcpExperimental browser-native WebMCP tools. |
| none |
--feature-flagsFeature flag platform. |
| none |
--integrationsThird-party integrations SDK. |
| none |
--ecommerceE-commerce platform SDK. |
| none |
--vector-dbVector database. |
| none |
--rate-limitRate limiting helper. |
| none |
--bot-protectionBot and CAPTCHA verification provider. |
| none |
--i18nInternationalization library. |
| none |
--effectEffect capability level. |
| none |
--loggingLogging library. |
| none |
--observabilityObservability provider. |
| none |
UI and app behavior
| Flag | Accepted values | Default |
|---|---|---|
--css-frameworkCSS framework. |
| tailwind |
--ui-libraryComponent library. |
| shadcn-ui |
--state-managementClient state manager. |
| none |
--formsForm library. |
| react-hook-form |
--validationSchema validation library. |
| zod |
--testingTesting setup. |
| vitest |
--animationAnimation library. |
| none |
shadcn/ui
| Flag | Accepted values | Default |
|---|---|---|
--shadcn-baseshadcn primitive base. |
| radix |
--shadcn-styleshadcn style preset. |
| nova |
--shadcn-icon-libraryIcon library. |
| lucide |
--shadcn-color-themeColor theme. |
| neutral |
--shadcn-base-colorBase neutral color. |
| neutral |
--shadcn-fontDefault font. |
| inter |
--shadcn-radiusCorner radius scale. |
| default |
React Native
Use these with --ecosystem react-native.
| Flag | Accepted values | Default |
|---|---|---|
--frontendmultipleExpo native frontend styling. |
| native-bare |
--mobile-navigationNavigation library. |
| none |
--mobile-uiMobile UI kit. |
| none |
--mobile-storageOn-device storage. |
| none |
--mobile-testingMobile testing setup. |
| none |
--mobile-pushPush notifications. |
| none |
--mobile-otaOver-the-air updates. |
| none |
--mobile-deep-linkingDeep linking. |
| none |
--mobile-librariesmultipleOptional Expo modules. |
| none |
--kotlin-mobileKotlin mobile app. |
| - |
--kotlin-mobile-librariesmultipleOptional Kotlin mobile libraries. |
| - |
--swift-mobileSwift mobile app. |
| - |
--dart-mobileFlutter / Dart mobile app. |
| - |
Language ecosystems
| Flag | Accepted values | Default |
|---|---|---|
--rust-web-frameworkRust web framework. |
| none |
--rust-frontendWASM frontend. |
| none |
--rust-ormRust ORM / database. |
| none |
--rust-apiRust API layer. |
| none |
--rust-cliRust CLI tooling. |
| none |
--rust-librariesmultipleRust core libraries. |
| none |
--rust-loggingRust logging. |
| tracing |
--rust-error-handlingRust error handling. |
| anyhow-thiserror |
--rust-cachingRust caching. |
| none |
--rust-authRust auth. |
| none |
--rust-realtimeRust realtime. |
| none |
--rust-message-queueRust message queue. |
| none |
--rust-observabilityRust observability. |
| none |
--rust-templatingRust templating. |
| none |
| Flag | Accepted values | Default |
|---|---|---|
--python-web-frameworkPython web framework. |
| fastapi |
--python-ormPython ORM / database. |
| sqlalchemy |
--python-validationValidation library. |
| pydantic |
--python-aimultiplePython AI / ML libraries. |
| none |
--python-authPython auth. |
| none |
--python-apiPython API framework. |
| none |
--python-task-queuePython task queue. |
| none |
--python-graphqlPython GraphQL. |
| none |
--python-qualityPython code quality tool. |
| ruff |
--python-testingmultiplePython testing libraries. |
| none |
--python-cachingPython caching. |
| none |
--python-realtimePython realtime. |
| none |
--python-observabilityPython observability. |
| none |
--python-climultiplePython CLI tooling. |
| none |
--python-cloud-sdkPython cloud SDK. |
| none |
--python-http-clientPython HTTP client. |
| none |
--python-datamultiplePython data and scientific libraries. |
| none |
--python-mediaPython media library. |
| none |
--python-serverPython production server. |
| none |
--python-package-managerPython package manager. |
| uv |
--python-message-queuePython message queue client. |
| none |
Go auth splits in two: GoBetterAuth uses the global --auth go-better-auth value, while Go-native helpers use --go-auth.
| Flag | Accepted values | Default |
|---|---|---|
--go-web-frameworkGo web framework. |
| gin |
--go-ormGo ORM / database. |
| gorm |
--go-apiGo API layer. |
| none |
--go-cliGo CLI tooling. |
| none |
--go-loggingGo logging. |
| zap |
--go-authGo-native auth helpers. |
| none |
--go-testingmultipleGo testing libraries. |
| none |
--go-realtimeGo realtime. |
| none |
--go-message-queueGo message queue. |
| none |
--go-cachingGo caching. |
| none |
--go-configGo config loader. |
| none |
--go-observabilityGo observability. |
| none |
--go-validationGo validation. |
| none |
--go-qualityGo code quality. |
| none |
--go-migrationsGo database migrations. |
| none |
--go-templatingGo templating. |
| none |
--go-proto-toolingGo protobuf tooling. |
| none |
--go-diGo dependency injection. |
| none |
| Flag | Accepted values | Default |
|---|---|---|
--java-web-frameworkJava web framework. |
| spring-boot |
--java-languageJVM language (java or kotlin). |
| - |
--java-build-toolBuild tool. |
| maven |
--java-ormJava ORM / database. |
| none |
--java-authJava auth. |
| none |
--java-apiJava API layer. |
| none |
--java-loggingJava logging. |
| none |
--java-librariesmultipleJava libraries. |
| none |
--java-testing-librariesmultipleJava testing libraries. |
| junit5 |
| Flag | Accepted values | Default |
|---|---|---|
--dotnet-frontend.NET frontend. |
| - |
--dotnet-web-framework.NET web framework. |
| aspnet-minimal |
--dotnet-orm.NET data access. |
| ef-core |
--dotnet-auth.NET auth. |
| aspnet-identity |
--dotnet-api.NET API style. |
| minimal-api |
--dotnet-testingmultiple.NET testing libraries. |
| xunit |
--dotnet-job-queue.NET background jobs. |
| none |
--dotnet-realtime.NET realtime. |
| signalr |
--dotnet-observabilitymultiple.NET observability. |
| serilog |
--dotnet-validation.NET validation. |
| none |
--dotnet-caching.NET caching. |
| none |
--dotnet-deploy.NET deploy target. |
| docker |
--dotnet-librariesmultipleOptional .NET libraries. |
| none |
| Flag | Accepted values | Default |
|---|---|---|
--elixir-web-frameworkElixir web framework. |
| phoenix |
--elixir-ormElixir ORM / database. |
| ecto-sql |
--elixir-authElixir auth. |
| none |
--elixir-apiElixir API layer. |
| rest |
--elixir-realtimeElixir realtime. |
| channels |
--elixir-jobsElixir jobs. |
| none |
--elixir-validationElixir validation. |
| ecto-changesets |
--elixir-httpElixir HTTP client. |
| req |
--elixir-jsonElixir JSON library. |
| jason |
--elixir-emailElixir email. |
| none |
--elixir-cachingElixir caching. |
| none |
--elixir-observabilityElixir observability. |
| telemetry |
--elixir-testingElixir testing. |
| ex_unit |
--elixir-qualityElixir code quality. |
| credo |
--elixir-i18nElixir internationalization. |
| none |
--elixir-http-serverElixir HTTP server. |
| cowboy |
--elixir-application-frameworkElixir application framework. |
| none |
--elixir-documentationElixir documentation. |
| none |
--elixir-clusteringElixir clustering. |
| none |
--elixir-deployElixir deploy target. |
| none |
--elixir-librariesmultipleElixir libraries. |
| none |
Examples
Flat single-app output
--workspace-shape single-app flattens a thin Next.js or TanStack Start self-backend scaffold into the project root. It is a create-time layout choice. If the stack needs separate database, ORM, auth, API, service, native, container, or deployment packages, compatibility safely restores the default monorepo layout.
npm create better-fullstack@latest thin-next-app -- \ --frontend next \ --backend self \ --runtime none \ --workspace-shape single-app \ --database none \ --orm none \ --api none \ --auth none \ --payments none \ --email none \ --observability none \ --logging none \ --web-deploy none \ --server-deploy none \ --examples none \ --ai-docs none \ --no-install \ --no-gitMulti-ecosystem project
npm create better-fullstack@latest my-mixed-app -- \ --part frontend:typescript:next \ --part backend:go:gin \ --part backend.orm:go:gorm \ --part database:universal:postgres \ --part mobile:react-native:native-bareSee Multi-Ecosystem for the full part model.
Scaffold history
history lists recent scaffolds with the reproducible command that created each one:
npx create-better-fullstack@latest historyFlags: --limit <n> (default 10), --clear, and --json. To reuse a stack, copy its reproducible command and re-run it with a new name or adjusted flags. History stays local under your user directory.