Installation

You do not need to install create-fs-appglobally. Use your package manager's create / exec command to always run the latest version.

# npm (npx)
$ npx create-fs-app my-app

# pnpm
$ pnpm create fs-app my-app

# yarn
$ yarn create fs-app my-app

First-run fetches the scaffold templates from the registry and caches them in ~/.cache/create-fs-app. Subsequent runs are instant unless you pass --refresh.

Quickstart

  1. Run the wizardnpx create-fs-app my-app drops you into an interactive prompt.
  2. Answer five questions — frontend, backend, database, ORM, and styling. Everything else defaults to a sensible value.
  3. Scaffold fires — a Turborepo monorepo lands in ./my-app/ with all wiring done: env files, shared packages, docker-compose, CI workflow.
  4. cd my-app && pnpm install && pnpm dev — both the frontend and backend dev servers start simultaneously.

Modes of use

There are three ways to drive the CLI:

Wizard (default)

Run with no flags for the interactive prompt. Ideal for first-timers or exploratory scaffolds.

$ npx create-fs-app my-app

Flags

Pass every option as a CLI flag. Useful for scripts, CI, or power users who know exactly what they want.

$ npx create-fs-app my-app \
    --frontend next.js \
    --backend nestjs \
    --database postgresql \
    --orm prisma \
    --api rest \
    --auth jwt

Presets

Load a named preset that bundles a full stack config into a single flag.

$ npx create-fs-app my-app --preset saas-starter

Frontend

Pass --frontend <value>. Default: next.js.

ValueFrameworkNotes
next.jsNext.js (App Router)Default. Full SSR/SSG. Supports Turbopack.
reactReact + ViteSPA only. Lightest bundle.
vueVue 3 + ViteComposition API. Options API supported.
nuxtNuxt 3Vue-based SSR/SSG. Auto-routing.
angularAngular 17+Standalone components, esbuild.

Backend

Pass --backend <value>. Default: nestjs.

ValueFrameworkNotes
nestjsNestJSDefault. Decorators, DI, modular. Pairs well with TypeORM & Prisma.
expressExpressMinimal, flexible. Widest ecosystem.
fastifyFastifyHigh throughput. Schema validation built-in.
koaKoaAsync-first middleware. Lightweight.

Database & ORM

Pass --database <value> and --orm <value> independently. The CLI enforces compatibility automatically.

DatabaseCompatible ORMs
postgresqlprisma, typeorm, drizzle
mysqlprisma, typeorm, drizzle
sqliteprisma, typeorm, drizzle
mongodbmongoose only
nonenone (raw SQL or no DB)

API style

Pass --api <value>. Controls whether the backend exposes a REST layer, a GraphQL layer, or both.

ValueWhat you get
restRESTful controllers with OpenAPI annotations
graphqlGraphQL schema + resolvers, code-first (Nexus / Pothos)
bothREST + GraphQL side-by-side. Larger initial footprint.

Auth

Pass --auth <value>. Default: none.

ValueWhat is scaffolded
noneNo auth. Add it yourself later.
jwtJWT access + refresh tokens. Register/login endpoints, a JwtAuthGuard, and a token refresh strategy. Secrets stored in .env.

Feature flags

Boolean options that toggle tooling. Each has an on form and an off form.

FlagOff formDefault
--eslint--no-eslinton
--prettier--no-prettieron
--docker--no-dockeron
--turbopackn/a (omit)off
--cin/a (omit)off
n/a (on by default)--no-giton

--turbopack is only valid when --frontend next.js is set; it is silently ignored otherwise. --ci adds a GitHub Actions workflow for lint, type-check, and test.

Compatibility rules

  • MongoDB forces Mongoose — selecting --database mongodb automatically sets --orm mongoose. Other ORM choices are ignored.
  • No database clears ORM — selecting --database none sets --orm noneregardless of the value you pass.
  • Mongoose requires MongoDB — selecting --orm mongoose with a relational database auto-corrects the ORM to prisma.
  • Turbopack requires Next.js — the --turbopack flag is stripped when --frontend is not next.js.

Built-in presets

Presets bundle a complete stack config. Run them with --preset <name>.

NameStackNotes
saas-starterNext.js + NestJS + PostgreSQL + Prisma + Tailwind + JWT + CIProduction-ready SaaS baseline. Most popular preset.
ecommerceNext.js + Fastify + PostgreSQL + Drizzle + Tailwind + GraphQL + JWT + CIOptimised for catalog + cart flows.
minimalReact + Express + SQLite + Prisma + CSS (no Docker, no CI)Lightest possible scaffold. Good for learning.

Save your own preset

Run the CLI with any combination of flags, then save it to ~/.config/create-fs-app/presets.json via the --save-preset flag:

$ npx create-fs-app my-app \
    --frontend vue \
    --backend fastify \
    --database postgresql \
    --orm drizzle \
    --save-preset my-vue-stack

After saving, load it any time with npx create-fs-app new-project --preset my-vue-stack. User presets are stored locally and never uploaded.

Official templates

Official templates live in the create-fs-app/templates GitHub organisation. They are versioned, tested against each CLI release, and pulled from the CDN-backed registry on demand.

Browse all 14 official templates on the Templates page or run cfs list --official in a terminal.

Contributed templates

Anyone can publish a template. Community templates must pass an automated lint & security scan before appearing in the registry. Use them exactly like official ones:

$ npx create-fs-app my-app --template community/vue-pinia-drizzle

47 community templates are currently available. See the full list on the Templates page.

From any GitHub URL

Point directly at any public GitHub repo or sub-directory. The CLI clones it, runs validation, and scaffolds:

# full repo
$ npx create-fs-app my-app --template github:acmecorp/my-template

# specific branch
$ npx create-fs-app my-app --template github:acmecorp/my-template#feat/v2

# sub-directory
$ npx create-fs-app my-app --template github:acmecorp/monorepo/packages/template-a

cfs list

The cfs companion CLI ships with every scaffold. Run it from inside any generated repo.

$ cfs list
┌──────────────────────────────────────────────────┐
│  create-fs-app registry · 61 templates           │
├─────────────────────────┬────────────┬──────────┤
│ name                    │ type       │ stars    │
├─────────────────────────┼────────────┼──────────┤
│ saas-starter            │ official   │ ★ 412    │
│ ecommerce               │ official   │ ★ 301    │
│ minimal                 │ official   │ ★ 188    │
│ …                       │            │          │
└─────────────────────────┴────────────┴──────────┘

Filter by type: cfs list --official / cfs list --community. Search by name: cfs list vue.

cfs info

Print metadata for a specific template: description, stack, last update, and download count.

$ cfs info saas-starter
template   : saas-starter
type       : official
stack      : next.js · nestjs · postgresql · prisma
auth       : jwt
ci         : github-actions
updated    : 2026-04-18
downloads  : 41,203
stars      : 412

cfs health

Run inside a scaffolded repo to check for version drift, missing env vars, and misconfigured workspace links.

$ cfs health
✔ workspace links valid
✔ env files present
⚠ @repo/ui — local package not built (run pnpm build)
✔ no known security advisories

cfs cache

Manage the local template cache in ~/.cache/create-fs-app.

# show cache contents
$ cfs cache list
cached templates: 7  (last sync: 3 hours ago)
size: 14 MB

# force refresh all templates
$ cfs cache refresh
refreshing 61 templates … done

# clear cache entirely
$ cfs cache clear
cache cleared.

Contribute a template

Templates are plain git repos with a cfs.config.json at the root. To add yours to the registry, fork create-fs-app/registry and run:

$ node scripts/add-template.mjs --name my-template --repo github:yourname/my-template

The script validates cfs.config.json, runs a test scaffold, and opens a pull request automatically. The CI gate checks for missing env placeholders, runaway node_modules inclusions, and licence compatibility.

Local development

To hack on create-fs-app itself:

$ git clone https://github.com/create-fs-app/create-fs-app
$ cd create-fs-app
$ pnpm install
$ pnpm dev

The pnpm dev command starts a file-watcher that rebuilds the CLI on every change. Test your local build against a temp directory:

$ node dist/index.js --frontend next.js --backend nestjs /tmp/test-scaffold

Run the test suite with pnpm test before submitting a PR. Integration tests scaffold real repos into a temp directory and validate the output structure.

© 2026 create-fs-app · ISC$ built for developers who hate boilerplate