Customizing errors
In Zod, validation errors are surfaced as instances of the z.core.$ZodError
class.
The zod
package uses a subclass of this called ZodError
that implements some additional convenience methods.
Instances of $ZodError
contain an .issues
property containing a human-readable message
and additional structured information about each encountered validation issue.
Every issue inside a $ZodError
contains a message
property with a human-readable error message. This message can be customized in a number of ways.
The error
param
Virtually every Zod API accepts an optional parameters object. The error
param is used to customize the error messages produced by a particular schema.
Nearly all functions and methods support error
.
The error
param optionally accepts a function, also known as an error map. This function will be called at parse time.
Note — In Zod v3, there were separate params for message
(a string) and errorMap
(a function). These have been unified in Zod 4 as error
.
The error
function received a context object you can use to customize the error message based on the input
or other validation information.
For advanced cases, the iss
object provides additional information you can use to customize the error.
Depending on the API you are using, there may be additional properties available. Use TypeScript's autocomplete to explore the available properties.
Per-parse error customization
To customize errors on a per-parse basis, pass an error map into the parse method:
This has lower precedence than any schema-level custom messages.
The iss
object is a discriminated union of all possible issue types. Use the code
property to discriminate between them.
For a breakdown of all Zod issue codes, see the @zod/core
documentation.
Global error customization
To specify a global error map, use z.config()
to set Zod's customError
configuration setting:
Global error messages have lower precedence than schema-level or per-parse error messages.
The iss
object is a discriminated union of all possible issue types. Use the code
property to discriminate between them.
For a breakdown of all Zod issue codes, see the @zod/core
documentation.
Internationalization
To support internationalization of error message, Zod provides several built-in locales. These are exported from the @zod/core
package.
Note — The zod
library automatically loads the en
locale automatically. The @zod/mini
package does not load any locale; instead all error messages default to Invalid input
.
For convenience, you can also references these from the z.core
namespace exports from zod
/@zod/mini
.
Locales
The following locales are available:
en
— English