--- name: nextjs-tanstack-form description: TanStack Form v1 for Next.js 16 with Server Actions, Zod validation, and shadcn/ui integration. Use when building forms, validation, multi-step wizards, or dynamic field arrays. versions: tanstack-form: 1.0 nextjs: 16 react: 19 zod: 3.24 user-invocable: true references: references/installation.md, references/basic-usage.md, references/field-api.md, references/form-state.md, references/validation-zod.md, references/server-actions.md, references/array-fields.md, references/async-validation.md, references/shadcn-integration.md, references/typescript.md, references/multi-step-form.md, references/performance.md, references/testing.md, references/migration-rhf.md related-skills: nextjs-16, nextjs-shadcn, solid-nextjs --- # TanStack Form for Next.js 16 Type-safe, performant forms with Server Actions and signal-based reactivity. ## Agent Workflow (MANDATORY) Before ANY implementation, use `TeamCreate` to spawn 3 agents: 1. **fuse-ai-pilot:explore-codebase** - Analyze existing forms and validation patterns 2. **fuse-ai-pilot:research-expert** - Verify latest TanStack Form docs via Context7/Exa 3. **mcp__context7__query-docs** - Check form options and field API After implementation, run **fuse-ai-pilot:sniper** for validation. --- ## Overview ### When to Use - Building forms with complex validation requirements - Need Server Actions integration for form submission - Implementing multi-step wizards or dynamic field arrays - Require real-time async validation (username availability) - Want type-safe forms with full TypeScript inference ### Why TanStack Form | Feature | Benefit | |---------|---------| | Signal-based state | Minimal re-renders, optimal performance | | Full TypeScript | DeepKeys, DeepValue inference | | Server Actions native | Built-in Next.js 16 integration | | Zod adapter | Schema-first validation | | Framework agnostic | Same API for React, Vue, Solid | | Headless | Works with any UI library (shadcn/ui) | --- ## Critical Rules 1. **formOptions shared** - Define once, use in client and server 2. **Server validation** - DB checks in `onServerValidate`, not client 3. **Zod schemas** - Client-side instant feedback 4. **useActionState** - React 19 hook for Server Actions 5. **mergeForm** - Combine server errors with client state 6. **SOLID paths** - Forms in `modules/[feature]/src/components/forms/` --- ## SOLID Architecture ### Module Structure Forms organized by feature module: - `modules/auth/src/components/forms/` - Auth forms (login, signup) - `modules/auth/src/interfaces/` - Form types and schemas - `modules/auth/src/actions/` - Server Actions for form submission - `modules/cores/lib/forms/` - Shared form utilities ### File Organization | File | Purpose | Max Lines | |------|---------|-----------| | `form-options.ts` | Shared formOptions + Zod schema | 50 | | `FormComponent.tsx` | Client form UI with fields | 80 | | `form.action.ts` | Server Action with validation | 30 | | `form.interface.ts` | Types for form values | 30 | --- ## Key Concepts ### Form Options Pattern Define form configuration once, share between client and server. Ensures type safety and consistency. ### Field API Each field has state (value, errors, touched, validating) and handlers (handleChange, handleBlur). ### Validation Levels - **onChange** - Real-time as user types - **onBlur** - When field loses focus - **onSubmit** - Before form submission - **onServer** - Server-side in action ### Error Management Errors exist at field-level and form-level. Use `field.state.meta.errors` for field errors, `form.state.errorMap` for form errors. --- ## Reference Guide | Need | Reference | |------|-----------| | Initial setup | [installation.md](references/installation.md) | | Basic patterns | [basic-usage.md](references/basic-usage.md), [field-api.md](references/field-api.md) | | Validation | [validation-zod.md](references/validation-zod.md), [async-validation.md](references/async-validation.md) | | Server Actions | [server-actions.md](references/server-actions.md) | | Dynamic forms | [array-fields.md](references/array-fields.md), [multi-step-form.md](references/multi-step-form.md) | | UI integration | [shadcn-integration.md](references/shadcn-integration.md) | | TypeScript | [typescript.md](references/typescript.md) | | Migration | [migration-rhf.md](references/migration-rhf.md) | --- ## Best Practices 1. **Define schemas first** - Zod schemas drive both validation and types 2. **Shared formOptions** - Single source of truth for client/server 3. **Debounce async validation** - Use `asyncDebounceMs` for API calls 4. **form.Subscribe** - Selective re-renders for submit state 5. **Field composition** - Reusable field components with shadcn/ui 6. **Server errors merge** - Use `mergeForm` to show server validation errors --- ## Comparison vs React Hook Form | Aspect | TanStack Form | React Hook Form | |--------|---------------|-----------------| | Type Safety | 100% (DeepKeys) | Manual typing | | Performance | Signals (minimal) | Refs (good) | | Server Actions | Native support | Manual integration | | Bundle Size | ~12KB | ~9KB | | Learning Curve | Medium | Low | | Use Case | Complex apps | Standard forms |