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
| Field | Values | Purpose |
|---|---|---|
| framework | react-vite | nextjs | Controls framework-specific output. |
| packageManager | npm | pnpm | yarn | bun | Keeps setup commands and lockfiles consistent. |
| apiClient | axios | fetch | Chooses generated request helpers. |
| serverState | react-query | none | Controls TanStack React Query output. |
| clientState | zustand | redux | none | Controls client-state files and provider wiring. |
| forms | react-hook-form-zod | none | Controls typed forms and validation schemas. |
| ui | shared-ui | Targets 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.