By separating validation logic from your UI, you get a system that handles async checks, dependent fields, and conditional logic without cluttering your component state.
Designed for the way you build
A complete toolkit for form sanity
Vest combines a familiar testing syntax with a smart, stateful core. It manages pending async tests, field focus, and strict type safety so you don't have to.
Testing syntax
Write validations using test() and enforce() - declarative syntax you already know from Mocha or Jest.
Use it anywhere
Framework agnostic. Works seamlessly with React, Vue, Svelte, or vanilla JS. Fully compatible with Standard Schema.
Async by default
Handle server checks and promises natively. Vest tracks pending states and prevents race conditions automatically.
Fully typed
First-class TypeScript support. Define your data shape once and enjoy full type inference and autocomplete across your suite.
Zero external dependencies
Built on a modular architecture of internal micro-packages. No third-party bloat, no supply chain surprises.
Smart state
Vest remembers previous runs and merges results, allowing you to validate only the fields the user is interacting with.
Full stack
Run the same validation logic on both client and server. Share your suite between environments for consistent, tamper-proof validation.