Data validation is your application's first line of defense. Invalid data causes bugs, security vulnerabilities, and corrupted databases. Robust validation catches problems early and provides clear feedback to users and developers.
Validation Principles#
Validate at Boundaries#
External input → Validation → Internal processing
Boundaries:
- API endpoints
- Form submissions
- File uploads
- Database reads (legacy data)
- Third-party API responses
- Environment variables
Fail Fast#
Schema Validation with Zod#
Basic Schemas#
Complex Schemas#
Transformations#
Refinements#
API Validation#
Express Middleware#
tRPC Integration#
Form Validation#
React Hook Form + Zod#
Database Validation#
Prisma Integration#
Database Constraints as Backup#
Environment Validation#
At Startup#
Error Messages#
User-Friendly Messages#
Error Formatting#
Sanitization#
Input Sanitization#
Testing Validation#
Best Practices#
1. Single Source of Truth#
2. Composition#
3. Graceful Degradation#
Conclusion#
Validation is not optional—it's essential for security, reliability, and user experience. Use schema validation libraries like Zod for type-safe, composable validation that works across your entire stack.
Validate at every boundary, fail fast with clear errors, and test your validation logic thoroughly. The effort invested in robust validation pays dividends in prevented bugs and security issues.