CLI

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

ConcernContract
PreviewAdd --dry-run to render and list files without writing them.
WritesCreates a project directory; dependency installation and Git initialization follow --install and --git.
Safe inspectionCombine --dry-run, --no-install, and --no-git.
RecoveryGenerate into a new directory and remove it if you reject the scaffold. Existing-directory behavior is controlled by --directory-conflict.
Source of truthThe live CLI schema and the generated flag tables below, shared with the Stack Builder and MCP server.

Command modes

ModeShapeUse it when
Wizard[launcher] my-appYou want prompts and defaults.
Defaults[launcher] my-app [flags] --yesYou want the default stack without prompts.
Scripted[launcher] my-app [flags]You want repeatable output.
Dry run[launcher] my-app [flags] --dry-runYou 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:

ShapeAsksResult
--shape fullstackNothing extra; the standard composition prompt runs.The full guided flow.
--shape frontendTypeScript, Rust, or .NET.A client app with the server half switched off.
--shape backendTypeScript, Go, Rust, Python, Java/Kotlin, .NET, or Elixir.An API with no web frontend.
--shape mobileReact Native, Kotlin, Swift, or Flutter.A mobile app on the platform you pick.
bash
# 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 --yes

With --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.

Presets

The preset command lists the curated stacks and creates a project from one:

bash
# List every preset with its options
bun create better-fullstack@latest preset

# Create from a preset
bun create better-fullstack@latest preset future-stack my-app
bun create better-fullstack@latest preset future-stack my-app --framework tanstack-start --effect server

create --template <id> accepts the same preset ids, for example t3, nextjs-saas, mern, pern, or uniwind. Flags you pass alongside override individual fields, and --yes accepts the rest as-is. Retired ids keep working: saas resolves to nextjs-saas, and solidstart-fullstack resolves to future-stack.

npm create better-fullstack@latest my-app -- --template t3

Future Stack

Future Stack is Solid, Effect, and the TanStack libraries in one project: Query, DB, Form, Table, Virtual, Pacer, and Store, with oRPC, Drizzle, SQLite, and Better Auth. The generated app has a /showcase route that uses each library. Its task list writes through TanStack DB, validates with Effect Schema, and persists through an Effect service on the server.

OptionChoicesDefault
--frameworksolid-start (SolidStart 2) or tanstack-start (TanStack Start on Solid)solid-start
--effectapp (Effect runs inside the framework server) or server (a separate Effect server)app

TanStack Start on Solid is also available as --frontend tanstack-start-solid. For now it supports oRPC, Better Auth, Tailwind CSS, and the TanStack showcase; the CLI and the builder reject other integrations for it.

Prompt behavior

  • Explicit flags skip only the categories they cover.
  • --yes accepts defaults and conflicts with core stack flags such as --frontend, --backend, --database, --orm, --auth, and --api.
  • Use none to disable optional categories, including --ai-docs none.
  • --verify runs 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 latest follows npm latest tags 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

TypeScript stack

Use these with --ecosystem typescript.

Services

UI and app behavior

shadcn/ui

React Native

Use these with --ecosystem react-native.

Language ecosystems

Go auth splits in two: GoBetterAuth uses the global --auth go-better-auth value, while Go-native helpers use --go-auth.

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-git

Multi-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-bare

See Multi-Ecosystem for the full part model.

Scaffold history

history lists recent scaffolds with the reproducible command that created each one:

bash
npx create-better-fullstack@latest history

Flags: --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.

GitHub Sponsors