zod-validationlisted
Install: claude install-skill smicolon/ai-kit
# Zod Validation in Hono
Patterns for request validation using Zod and @hono/zod-validator.
## Setup
```bash
bun add zod @hono/zod-validator
```
## Basic Validation
### JSON Body
```typescript
import { zValidator } from '@hono/zod-validator'
import { z } from 'zod'
const createUserSchema = z.object({
email: z.string().email('Invalid email address'),
name: z.string().min(1, 'Name is required').max(100),
age: z.number().int().positive().optional(),
})
app.post('/users',
zValidator('json', createUserSchema),
async (c) => {
const data = c.req.valid('json')
// data is typed as { email: string; name: string; age?: number }
return c.json(data, 201)
}
)
```
### Query Parameters
```typescript
const paginationSchema = z.object({
page: z.coerce.number().int().positive().default(1),
limit: z.coerce.number().int().min(1).max(100).default(20),
sort: z.enum(['asc', 'desc']).default('desc'),
search: z.string().optional(),
})
app.get('/users',
zValidator('query', paginationSchema),
async (c) => {
const { page, limit, sort, search } = c.req.valid('query')
// All values are properly typed and coerced
return c.json({ page, limit, sort, search })
}
)
```
### Path Parameters
```typescript
const userParamsSchema = z.object({
id: z.string().uuid('Invalid user ID format'),
})
app.get('/users/:id',
zValidator('param', userParamsSchema),
async (c) => {
const { id } = c.req.valid('param')
return c.json({ id })
}
)
```
### H