tanstack-form

TanStack Form v1 headless form state management for React. Covers field validation (sync/async, debouncing), form submission, array fields, linked fields, form composition patterns, and Standard Schema integration (Zod, Valibot, ArkType, Yup). Use when building forms with complex validation, implementing reusable form components, handling dynamic field lists, managing form state, or integrating validation libraries.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "tanstack-form" with this command: npx skills add oakoss/agent-skills

TanStack Form

Overview

TanStack Form is a headless form state manager, not a UI component library. You provide your own inputs and handle their events; TanStack Form manages validation, state, and submission logic.

When to use: Complex multi-step forms, reusable form patterns, dynamic field arrays, cross-field validation, async server validation, forms requiring fine-grained performance optimization.

When NOT to use: Simple forms with native HTML validation (use plain form elements), server-only validation (use Server Actions), purely static forms with no validation.

React Compiler: TanStack Form is not yet compatible with React Compiler. Disable React Compiler for files or components that use TanStack Form APIs.

Quick Reference

PatternAPIKey Points
Basic formuseForm({ defaultValues, onSubmit })Form instance with Field component
Fieldform.Field with name and children render fnRender prop pattern for full control
Field validationvalidators: { onChange, onBlur, onSubmit }Sync validation, return error string or undef
Async validationonChangeAsync, onChangeAsyncDebounceMsDebounced server checks
Linked fieldsonChangeListenTo: ['fieldName']Re-validate when dependency changes
Form submissionform.handleSubmit()Validates and calls onSubmit if valid
Form stateform.state.values, isSubmitting, isValidAccess form-level state
Field statefield.state.value, meta.errors, meta.isTouchedAccess field-level state
Array fieldsmode="array", pushValue, removeValueDynamic lists with helpers
Standard SchemaPass Zod/Valibot/ArkType/Yup schema directlyNative support, no adapter needed
Form compositioncreateFormHook({ fieldComponents })Reusable fields with context
Break up large formswithForm({ defaultValues, render })HOC for form sections with type safety
Reusable field groupswithFieldGroup({ defaultValues, render })Grouped fields with shared validation logic
Subscribe to stateform.Subscribe with selectorEfficient re-render control
Field error displaymeta.isTouched && meta.errors.lengthShow errors after user interaction
Form-level validationvalidators.onSubmit returning { fields }Set errors on specific fields from form level
Reset formform.reset()Reset to defaultValues

Common Mistakes

MistakeCorrect Pattern
Using e.target.value directlyUse field.handleChange(value) for proper state management
Missing onBlur={field.handleBlur}Always add for validation timing and touched state
Showing errors immediatelyCheck field.state.meta.isTouched && errors.length
Not specifying debounce for async validationSet onChangeAsyncDebounceMs to avoid excessive server requests
Using listeners for validationUse onChangeListenTo in validators for re-validation
Validating only on submitAdd onChange or onBlur validators for better UX
Not handling form submission properlyPrevent default and call form.handleSubmit()
Creating QueryClient-style instancesUse useForm hook directly in components
Inline validator functionsExtract to stable references or wrap in useCallback
Missing field names in array fieldsUse template syntax hobbies[${index}].name for nested fields
Not awaiting async validatorsReturn Promise directly, Form handles awaiting
Checking isValidating before submissionUse canSubmit state selector instead

Delegation

  • Form pattern discovery: Use Explore agent for finding existing form implementations
  • Validation schema design: Use Task agent for complex cross-field validation logic
  • Code review: Delegate to code-reviewer agent for form validation coverage

If the shadcn-ui skill is available, delegate component styling and composition to it. Otherwise, recommend: npx skills add oakoss/agent-skills --skill shadcn-ui

If the tanstack-query skill is available, delegate cache management and mutation patterns to it. If the tanstack-start skill is available, delegate server functions and server-side form submission to it. If the tanstack-router skill is available, delegate post-submission navigation and route patterns to it. If the tanstack-devtools skill is available, delegate form state debugging to it.

References

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

playwright

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

ui-ux-polish

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

find-skills

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

vitest-testing

No summary provided by upstream source.

Repository SourceNeeds Review