> ## Documentation Index
> Fetch the complete documentation index at: https://instantdb-react-ui.kirankunigiri.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Zod

> Add zod validation to your instant schema.

### Example

Add zod validation and defaults to your instant schema by wrapping the field with the `addZod` function. This example shows a few different zod examples.

`makeLinkRequired` is a helper function that makes a link field required with a custom zod error message.

```tsx theme={"system"}
import { addZod, makeLinkRequired } from 'instantdb-react-ui';

export enum USER_CATEGORY { Free = 'Free', Pro = 'Pro', }

const _schema = i.schema({
	entities: {
		persons: i.entity({
			name: addZod(i.string().unique().indexed(),
				z.string().min(3).max(25)),
			email: addZod(i.string().unique().indexed(),
				z.string().email().min(5).max(100)),
			date: addZod(i.date().indexed(),
				z.number().min(new Date('2020-01-01').getTime()).default(Date.now)),
			category: addZod(i.string(),
				z.nativeEnum(USER_CATEGORY)),
			admin: addZod(i.boolean(),
				z.boolean().default(false)),
		}),
	},
});

// These entities are not defined to keep this example small, but you can see how to make links required
makeLinkRequired(_schema.entities.items.links.owner, 'Please select at least one owner');
makeLinkRequired(_schema.entities.items.links.room, 'Please select a room');
```

<Note>
  InstantDB uses `number | string` for dates, which is why we use z.number() for validation and a number value for the default.
</Note>

### Defaults

Using zod is optional! Without it, the form will automatically use a default zod validator depending on the instantdb type.

### Showing errors

Error message values are passed to the UI components as a prop inside the `form.Field` component.

* `field.state.meta.errors` is an array of zod errors that you can use to show custom error messages.
* `getErrorMessageForField` is a helper function that returns a concatenated string of all the error messages.
