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
- Run the wizard —
npx create-fs-app my-appdrops you into an interactive prompt. - Answer five questions — frontend, backend, database, ORM, and styling. Everything else defaults to a sensible value.
- Scaffold fires — a Turborepo monorepo lands in
./my-app/with all wiring done: env files, shared packages, docker-compose, CI workflow. 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-appFlags
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.
| Value | Framework | Notes |
|---|---|---|
next.js | Next.js (App Router) | Default. Full SSR/SSG. Supports Turbopack. |
react | React + Vite | SPA only. Lightest bundle. |
vue | Vue 3 + Vite | Composition API. Options API supported. |
nuxt | Nuxt 3 | Vue-based SSR/SSG. Auto-routing. |
angular | Angular 17+ | Standalone components, esbuild. |
Backend
Pass --backend <value>. Default: nestjs.
| Value | Framework | Notes |
|---|---|---|
nestjs | NestJS | Default. Decorators, DI, modular. Pairs well with TypeORM & Prisma. |
express | Express | Minimal, flexible. Widest ecosystem. |
fastify | Fastify | High throughput. Schema validation built-in. |
koa | Koa | Async-first middleware. Lightweight. |
Database & ORM
Pass --database <value> and --orm <value> independently. The CLI enforces compatibility automatically.
| Database | Compatible ORMs |
|---|---|
postgresql | prisma, typeorm, drizzle |
mysql | prisma, typeorm, drizzle |
sqlite | prisma, typeorm, drizzle |
mongodb | mongoose only |
none | none (raw SQL or no DB) |
API style
Pass --api <value>. Controls whether the backend exposes a REST layer, a GraphQL layer, or both.
| Value | What you get |
|---|---|
rest | RESTful controllers with OpenAPI annotations |
graphql | GraphQL schema + resolvers, code-first (Nexus / Pothos) |
both | REST + GraphQL side-by-side. Larger initial footprint. |
Auth
Pass --auth <value>. Default: none.
| Value | What is scaffolded |
|---|---|
none | No auth. Add it yourself later. |
jwt | JWT 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.
| Flag | Off form | Default |
|---|---|---|
--eslint | --no-eslint | on |
--prettier | --no-prettier | on |
--docker | --no-docker | on |
--turbopack | n/a (omit) | off |
--ci | n/a (omit) | off |
| n/a (on by default) | --no-git | on |
--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 mongodbautomatically sets--orm mongoose. Other ORM choices are ignored. - No database clears ORM — selecting
--database nonesets--orm noneregardless of the value you pass. - Mongoose requires MongoDB — selecting
--orm mongoosewith a relational database auto-corrects the ORM toprisma. - Turbopack requires Next.js — the
--turbopackflag is stripped when--frontendis notnext.js.
Built-in presets
Presets bundle a complete stack config. Run them with --preset <name>.
| Name | Stack | Notes |
|---|---|---|
saas-starter | Next.js + NestJS + PostgreSQL + Prisma + Tailwind + JWT + CI | Production-ready SaaS baseline. Most popular preset. |
ecommerce | Next.js + Fastify + PostgreSQL + Drizzle + Tailwind + GraphQL + JWT + CI | Optimised for catalog + cart flows. |
minimal | React + 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.