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"
}

Nuxt example

json
{
  "$schema": "https://raw.githubusercontent.com/FSD-CLI/cli/main/schema/fsd.config.schema.json",
  "schemaVersion": 1,
  "framework": "nuxt",
  "packageManager": "npm",
  "apiClient": "fetch",
  "serverState": "vue-query",
  "clientState": "pinia",
  "forms": "vee-validate-zod",
  "ui": "shared-ui"
}

Nuxt defaults to its native $fetch client. Pinia and VeeValidate are registered as Nuxt modules, while Vue Query uses an SSR-aware plugin.

Vue + Vite example

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

SvelteKit example

json
{
  "$schema": "https://raw.githubusercontent.com/FSD-CLI/cli/main/schema/fsd.config.schema.json",
  "schemaVersion": 1,
  "framework": "sveltekit",
  "packageManager": "npm",
  "apiClient": "fetch",
  "serverState": "svelte-query",
  "clientState": "svelte-store",
  "forms": "sveltekit-superforms-zod",
  "ui": "shared-ui"
}

These defaults generate Svelte 5 components, TanStack Svelte Query accessors, framework-native stores, and progressively enhanced Superforms backed by Zod 4.

Supported fields

FieldValuesPurpose
frameworkreact-vite | nextjs | vue-vite | nuxt | sveltekitControls framework-native components, providers, and generators.
packageManagernpm | pnpm | yarn | bunKeeps setup commands and lockfiles consistent.
apiClientaxios | fetchChooses generated request helpers.
serverStatereact-query | vue-query | svelte-query | noneControls the framework-compatible TanStack Query output.
clientStatezustand | redux | pinia | svelte-store | noneControls client-state files and provider wiring.
formsreact-hook-form-zod | vee-validate-zod | sveltekit-superforms-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.

Framework compatibility is validated

The capability matrix rejects mixed stacks such as Pinia in a React project, Zustand in a Vue project, or Pinia in a SvelteKit project. Defaults are selected from the chosen framework before--yes is applied.

Support FSD CLI

If FSD CLI helps you build, consider supporting its development and documentation. Donations are optional.

Buy Me a Coffee (opens in a new tab)

InstaPay · Egypt

ashrafmo-1

للدعم من مصر عبر إنستا باي. تأكد من بيانات المستلم قبل تأكيد التحويل.