---
title: "zod Breaking Changes on npm | Since.dev"
description: "What each zod release removed, renamed or changed: 2,049 breaking changes in 83 versions on npm, each with its source."
canonical_url: https://since.dev/packages/npm/zod
last_updated: 2026-10-11
---

# 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

## 4.6.6

3 breaking changes, first published October 11, 2026.

- **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](https://www.npmjs.com/package/zod/v/4.6.6)
- **Signature changed** `core.$ZodRecordInternals.input`  

Was input: I; now input: $InferZodRecordInput<Key, Value>. [npmjs.com](https://www.npmjs.com/package/zod/v/4.6.6)
- **Signature changed** `core.$ZodRecordInternals.output`  

Was output: O; now output: $InferZodRecordOutput<Key, Value>. [npmjs.com](https://www.npmjs.com/package/zod/v/4.6.6)

## 4.6.5

1 breaking change, first published September 13, 2026.

- **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](https://www.npmjs.com/package/zod/v/4.6.5)

## 4.6.4

3 breaking changes, first published September 13, 2026.

- **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](https://www.npmjs.com/package/zod/v/4.6.4)
- **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](https://www.npmjs.com/package/zod/v/4.6.4)
- **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](https://www.npmjs.com/package/zod/v/4.6.4)

## 4.6.3

6 breaking changes, first published September 12, 2026.

- **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](https://www.npmjs.com/package/zod/v/4.6.3)
- **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](https://www.npmjs.com/package/zod/v/4.6.3)
- **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](https://www.npmjs.com/package/zod/v/4.6.3)
- **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](https://www.npmjs.com/package/zod/v/4.6.3)
- **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](https://www.npmjs.com/package/zod/v/4.6.3)
- **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](https://www.npmjs.com/package/zod/v/4.6.3)

## 4.6.2

2 breaking changes, first published September 10, 2026.

- **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](https://www.npmjs.com/package/zod/v/4.6.2)
- **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](https://www.npmjs.com/package/zod/v/4.6.2)

## 4.6.1

3 breaking changes, first published September 9, 2026.

- **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](https://www.npmjs.com/package/zod/v/4.6.1)
- **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](https://www.npmjs.com/package/zod/v/4.6.1)
- **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](https://www.npmjs.com/package/zod/v/4.6.1)

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#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.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
