plugins/nextjs-expert/skills/nextjs-tanstack-form/SKILL.md
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.
npx skillsauth add fusengine/agents nextjs-tanstack-formInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Type-safe, performant forms with Server Actions and signal-based reactivity.
Before ANY implementation, use TeamCreate to spawn 3 agents:
After implementation, run fuse-ai-pilot:sniper for validation.
| 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) |
onServerValidate, not clientmodules/[feature]/src/components/forms/Forms organized by feature module:
modules/auth/src/components/forms/ - Auth forms (login, signup)modules/auth/src/interfaces/ - Form types and schemasmodules/auth/src/actions/ - Server Actions for form submissionmodules/cores/lib/forms/ - Shared form utilities| 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 |
Define form configuration once, share between client and server. Ensures type safety and consistency.
Each field has state (value, errors, touched, validating) and handlers (handleChange, handleBlur).
Errors exist at field-level and form-level. Use field.state.meta.errors for field errors, form.state.errorMap for form errors.
| Need | Reference |
|------|-----------|
| Initial setup | installation.md |
| Basic patterns | basic-usage.md, field-api.md |
| Validation | validation-zod.md, async-validation.md |
| Server Actions | server-actions.md |
| Dynamic forms | array-fields.md, multi-step-form.md |
| UI integration | shadcn-integration.md |
| TypeScript | typescript.md |
| Migration | migration-rhf.md |
| Client-side form component | client-form.md — load when wiring useActionState + mergeForm in a 'use client' form component |
| Server-side validation | server-validation.md — load when writing createServerValidate + ServerValidateError in a Server Action |
asyncDebounceMs for API callsmergeForm to show server validation errors| 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 |
testing
Copy self-audit and ban-lists — filler verbs/hype adjectives, slop placeholder names, fake-precise numbers, Title Case headlines, humor in error copy ('Oops!'), em-dash crutch, one copy register per page.
development
Logged-in web apps — dashboards, auth flows, settings, onboarding, data tables, command palettes, modals, toasts. Register `product`: density and glance-speed over marketing polish, no hero/CTA-tricks, every data surface covers empty/loading/error explicitly, tables and dataviz follow preattentive-processing rules.
development
Marketing sites, landing pages, campaign pages — register `brand` (design IS the product). Structure comes from the register's POV + a macrostructure pick, never from copying an inspiration site's section flow. Hero discipline, deviated section order, asymmetric grids, and a silhouette lookalike-test gate before ship.
development
Token-strategy core — OKLCH color rules, neutral tinting, accent-commitment levels, type scale, 8pt spacing grid, touch targets, and the canonical output format of design-system.md (the file the harness gates on). This is routing step 1 of design-method/SKILL.md — read it before design-web/design-webapp/design-ios/design-android, before picking or auditing a single color/type/spacing value.