Project source of truth

Configure once, generate consistently

Every project created by the wizard receives an fsd.config.json file. Generators read it automatically, so developers do not repeat the same stack decisions for every feature.

Example

json
{
  "$schema": "https://raw.githubusercontent.com/FSD-CLI/cli/main/schema/fsd.config.schema.json",
  "schemaVersion": 1,
  "packageManager": "npm",
  "apiClient": "axios",
  "serverState": "react-query",
  "clientState": "zustand",
  "forms": "react-hook-form-zod",
  "ui": "shared-ui",
  "framework": "react-vite"
}

Supported fields

FieldValuesPurpose
frameworkreact-vite | nextjsControls framework-specific output.
packageManagernpm | pnpm | yarn | bunKeeps setup commands and lockfiles consistent.
apiClientaxios | fetchChooses generated request helpers.
serverStatereact-query | noneControls TanStack React Query output.
clientStatezustand | redux | noneControls client-state files and provider wiring.
formsreact-hook-form-zod | noneControls typed forms and validation schemas.
uishared-uiTargets the starter's shared UI primitives.

When the file exists

The CLI validates schemaVersion and generates files from the saved choices without asking the stack questions again.

Existing projects

If the file is missing, the generator infers a compatible setup from dependencies in package.json. Adding the config later makes that behavior explicit and repeatable.