zod breaking changes
Every breaking API change we have recorded in zod on npm: 2,049 breaking changes in 83 versions. Below are its newest 6 versions, removals and renames first, each with its source.
Newest change October 11, 2026

On this page
4.6.6
- Signature changed
core.$ZodRecordInternals
Was interface $ZodRecordInternals<Key extends $ZodRecordKey = $ZodRecordKey, Value extends SomeType = $ZodType> extends $ZodTypeInternals<$InferZodRecordOutput<Key, Value>, $InferZodRecordInput<Key, Value>>; now interface... npmjs.com - Signature changed
core.$ZodRecordInternals.input
Was input: I; now input: $InferZodRecordInput<Key, Value>. npmjs.com - Signature changed
core.$ZodRecordInternals.output
Was output: O; now output: $InferZodRecordOutput<Key, Value>. npmjs.com
4.6.5
- Signature changed
ZodInstanceOf.properties
Was properties<Shape extends core.$ZodShape>(shape: Shape, params?: string | core.$ZodCheckPropertiesParams): ZodInstanceOf<T & core.$InferObjectInput<Shape, {}>>; now properties<Shape extends {[k in keyof T as T[k] extends Function ?... npmjs.com
4.6.4
- Signature changed
core.$ZodNumberParams
Was type $ZodNumberParams = TypeParams<schemas.$ZodNumber<number>, "coerce">; now type $ZodNumberParams = TypeParams<schemas.$ZodNumber<number>, "coerce"> & {checks?: readonly checks.$ZodCheck<number>[];}. npmjs.com - Signature changed
core.$ZodStringFormatTypes
Was type $ZodStringFormatTypes = $ZodGUID | $ZodUUID | $ZodEmail | $ZodURL | $ZodEmoji | $ZodNanoID | $ZodCUID | $ZodCUID2 | $ZodULID | $ZodXID | $ZodKSUID | $ZodISODateTime | $ZodISODate | $ZodISOTime | $ZodISODuration | $ZodIPv4 |... npmjs.com - Signature changed
core.$ZodStringParams
Was type $ZodStringParams = TypeParams<schemas.$ZodString<string>, "coerce">; now type $ZodStringParams = TypeParams<schemas.$ZodString<string>, "coerce"> & {checks?: readonly checks.$ZodCheck<string>[];}. npmjs.com
4.6.3
- Signature changed
core._properties
Was function _properties<Shape extends schemas.$ZodShape>(Class: util.SchemaClass<schemas.$ZodProperties>, shape: Shape, params?: string | $ZodPropertiesParams): schemas.$ZodProperties<Shape>; now function _properties<Shape extends... npmjs.com - Signature changed
core.$ZodTypeDef.type
Was type: "string" | "number" | "int" | "boolean" | "bigint" | "symbol" | "null" | "undefined" | "void" | "never" | "any" | "unknown" | "date" | "object" | "record" | "file" | "array" | "tuple" | "union" | "intersection" | "map" | "set" |... npmjs.com - Signature changed
core.$ZodTypes
Was type $ZodTypes = $ZodString | $ZodNumber | $ZodBigInt | $ZodBoolean | $ZodDate | $ZodSymbol | $ZodUndefined | $ZodNullable | $ZodNull | $ZodAny | $ZodUnknown | $ZodNever | $ZodVoid | $ZodArray | $ZodObject | $ZodUnion |... npmjs.com - Signature changed
mini:properties
Was function properties<Shape extends core.$ZodShape>(shape: Shape, params?: string | core.$ZodPropertiesParams): ZodMiniProperties<Shape>; now function _properties<Shape extends schemas.$ZodShape>(shape: Shape, params?: string |... npmjs.com - Signature changed
properties
The standalone z.properties() schema from 4.6.0 is removed. Use z.instanceof().properties() or the .check(...z.properties()) form, which are unchanged. npmjs.com - Signature changed
ZodInstanceOf.properties
Was properties<Shape extends core.$ZodShape>(shape: Shape, params?: string | core.$ZodPropertiesParams): ZodInstanceOf<T & core.$InferObjectInput<Shape, {}>>; now properties<Shape extends core.$ZodShape>(shape: Shape, params?: string |... npmjs.com
4.6.2
- Signature changed
core.$ZodPrefaultInternals
Was interface $ZodPrefaultInternals<T extends SomeType = $ZodType> extends $ZodTypeInternals<util.NoUndefined<core.output<T>>, core.input<T> | undefined>; now interface $ZodPrefaultInternals<T extends SomeType = $ZodType> extends... npmjs.com - Signature changed
mini:prefault
Was function prefault<T extends SomeType>(innerType: T, defaultValue: util.NoUndefined<core.input<T>> | (() => util.NoUndefined<core.input<T>>)): ZodMiniPrefault<T>; now function prefault<T extends SomeType>(innerType: T, defaultValue... npmjs.com
4.6.1
- Signature changed
core.$InferObjectInput
Was type $InferObjectInput<T extends $ZodLooseShape, Extra extends Record<string, unknown>> = string extends keyof T ? util.IsAny<T[keyof T]> extends true ? Record<string, unknown> : Record<string, core.input<T[keyof T]>> : keyof (T &... npmjs.com - Signature changed
core.$InferObjectOutput
Was type $InferObjectOutput<T extends $ZodLooseShape, Extra extends Record<string, unknown>> = string extends keyof T ? util.IsAny<T[keyof T]> extends true ? Record<string, unknown> : Record<string, core.output<T[keyof T]>> : keyof (T &... npmjs.com - Signature changed
core.$ZodDiscriminatedUnionInternals.bag
Was bag: util.LoosePartial<{optionsMap: Map<util.Primitive, $ZodType>;}>; now bag: util.LoosePartial<{optionsMap: Map<util.Primitive, $ZodType | null>;}>. npmjs.com
Check your code
These are the changes. To see which of them reach your code, scan a public repository, or have your coding agent call check_code with your manifest or lockfile over MCP. The API reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

Put your code on continuous management.
Scan a public repository now, or give your agent one line.
See how out of date your code is.
Tell your agent what changed since it was trained.
claude mcp add --transport http since https://api.since.dev/mcp