Skip to content

Update Amplify backend packages to support Zod v4 #3093

@Ktsierra

Description

@Ktsierra

Environment information

System:
  OS: macOS 26.2
  CPU: (10) arm64 Apple M4
  Memory: 166.00 MB / 16.00 GB
  Shell: /bin/zsh
Binaries:
  Node: 22.18.0 - /Users/ktsierra/.nvm/versions/node/v22.18.0/bin/node
  Yarn: 1.22.22 - /opt/homebrew/bin/yarn
  npm: 10.9.3 - /Users/ktsierra/.nvm/versions/node/v22.18.0/bin/npm
  pnpm: 10.28.1 - /Users/ktsierra/Library/pnpm/pnpm
NPM Packages:
  @aws-amplify/ai-constructs: Not Found
  @aws-amplify/auth-construct: Not Found
  @aws-amplify/backend: 1.20.0
  @aws-amplify/backend-ai: Not Found
  @aws-amplify/backend-auth: Not Found
  @aws-amplify/backend-cli: 1.8.2
  @aws-amplify/backend-data: Not Found
  @aws-amplify/backend-deployer: Not Found
  @aws-amplify/backend-function: Not Found
  @aws-amplify/backend-output-schemas: Not Found
  @aws-amplify/backend-output-storage: Not Found
  @aws-amplify/backend-secret: Not Found
  @aws-amplify/backend-storage: Not Found
  @aws-amplify/cli-core: Not Found
  @aws-amplify/client-config: Not Found
  @aws-amplify/data-construct: Not Found
  @aws-amplify/data-schema: Not Found
  @aws-amplify/deployed-backend-client: Not Found
  @aws-amplify/form-generator: Not Found
  @aws-amplify/model-generator: Not Found
  @aws-amplify/platform-core: Not Found
  @aws-amplify/plugin-types: Not Found
  @aws-amplify/sandbox: Not Found
  @aws-amplify/schema-generator: Not Found
  @aws-cdk/toolkit-lib: Not Found
  aws-amplify: 6.16.0
  aws-cdk-lib: 2.236.0
  typescript: 5.9.3
npm warn exec The following package was not found and will be installed: [email protected]
No AWS environment variables
No CDK environment variables

Describe the feature

support for zod v4 in amplify-backend packages, right now attempting to use zod v4 on an amplify project throws Amplify outputs could not be generated. [ZodError].

This can be done following zod migration to v4 in zod repo:

Bumping to v4 and keep using v3 to avoid issues with:

import * as z from "zod/v3"; // Zod 3

and in package.json:

{
  "peerDependencies": {
    "zod": "^3.25.0 || ^4.0.0" //or the pinned zod version
  }
}

This will allow amplify packages to keep working using v3 zod from zod/v3 and users to use v4 from zod .

On pnpm why zod it's revealed:

dependencies:
zod 4.3.6

devDependencies:
@aws-amplify/backend 1.20.0
├─┬ @aws-amplify/backend-auth 1.9.1
│ ├─┬ @aws-amplify/auth-construct 1.11.0
│ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ └── zod 4.3.6 peer
│ │ ├─┬ @aws-amplify/backend-output-storage 1.3.3
│ │ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ │ └── zod 4.3.6 peer
│ │ │ └─┬ @aws-amplify/platform-core 1.10.4
│ │ │   └── zod 3.25.17
│ │ └─┬ @aws-amplify/platform-core 1.10.4
│ │   └── zod 3.25.17
│ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ └── zod 4.3.6 peer
│ └─┬ @aws-amplify/backend-output-storage 1.3.3
│   ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│   │ └── zod 4.3.6 peer
│   └─┬ @aws-amplify/platform-core 1.10.4
│     └── zod 3.25.17
├─┬ @aws-amplify/backend-data 1.6.3
│ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ └── zod 4.3.6 peer
│ └─┬ @aws-amplify/backend-output-storage 1.3.3
│   ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│   │ └── zod 4.3.6 peer
│   └─┬ @aws-amplify/platform-core 1.10.4
│     └── zod 3.25.17
├─┬ @aws-amplify/backend-function 1.16.0
│ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ └── zod 4.3.6 peer
│ └─┬ @aws-amplify/backend-output-storage 1.3.3
│   ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│   │ └── zod 4.3.6 peer
│   └─┬ @aws-amplify/platform-core 1.10.4
│     └── zod 3.25.17
├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ └── zod 4.3.6 peer
├─┬ @aws-amplify/backend-output-storage 1.3.3
│ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ └── zod 4.3.6 peer
│ └─┬ @aws-amplify/platform-core 1.10.4
│   └── zod 3.25.17
├─┬ @aws-amplify/backend-secret 1.4.2
│ └─┬ @aws-amplify/platform-core 1.10.4
│   └── zod 3.25.17
├─┬ @aws-amplify/backend-storage 1.4.3
│ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ └── zod 4.3.6 peer
│ └─┬ @aws-amplify/backend-output-storage 1.3.3
│   ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│   │ └── zod 4.3.6 peer
│   └─┬ @aws-amplify/platform-core 1.10.4
│     └── zod 3.25.17
├─┬ @aws-amplify/client-config 1.10.0
│ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ └── zod 3.25.17 peer
│ ├─┬ @aws-amplify/deployed-backend-client 1.8.1
│ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ └── zod 3.25.17 peer
│ │ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ │ └── zod 3.25.17
│ │ └── zod 3.25.17
│ ├─┬ @aws-amplify/model-generator 1.2.2
│ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ └── zod 3.25.17 peer
│ │ ├─┬ @aws-amplify/deployed-backend-client 1.8.1
│ │ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ │ └── zod 3.25.17 peer
│ │ │ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ │ │ └── zod 3.25.17
│ │ │ └── zod 3.25.17
│ │ └─┬ @aws-amplify/platform-core 1.10.4
│ │   └── zod 3.25.17
│ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ └── zod 3.25.17
│ └── zod 3.25.17
└─┬ @aws-amplify/platform-core 1.10.4
  └── zod 3.25.17
@aws-amplify/backend-cli 1.8.2
├─┬ @aws-amplify/backend-deployer 2.1.5
│ └─┬ @aws-amplify/platform-core 1.10.4
│   └── zod 3.25.17
├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ └── zod 3.25.17 peer
├─┬ @aws-amplify/backend-secret 1.4.2
│ └─┬ @aws-amplify/platform-core 1.10.4
│   └── zod 3.25.17
├─┬ @aws-amplify/cli-core 2.2.3
│ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ └── zod 3.25.17
│ └── zod 3.25.17
├─┬ @aws-amplify/client-config 1.10.0
│ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ └── zod 3.25.17 peer
│ ├─┬ @aws-amplify/deployed-backend-client 1.8.1
│ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ └── zod 3.25.17 peer
│ │ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ │ └── zod 3.25.17
│ │ └── zod 3.25.17
│ ├─┬ @aws-amplify/model-generator 1.2.2
│ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ └── zod 3.25.17 peer
│ │ ├─┬ @aws-amplify/deployed-backend-client 1.8.1
│ │ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ │ └── zod 3.25.17 peer
│ │ │ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ │ │ └── zod 3.25.17
│ │ │ └── zod 3.25.17
│ │ └─┬ @aws-amplify/platform-core 1.10.4
│ │   └── zod 3.25.17
│ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ └── zod 3.25.17
│ └── zod 3.25.17
├─┬ @aws-amplify/deployed-backend-client 1.8.1
│ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ └── zod 3.25.17 peer
│ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ └── zod 3.25.17
│ └── zod 3.25.17
├─┬ @aws-amplify/model-generator 1.2.2
│ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ └── zod 3.25.17 peer
│ ├─┬ @aws-amplify/deployed-backend-client 1.8.1
│ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ └── zod 3.25.17 peer
│ │ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ │ └── zod 3.25.17
│ │ └── zod 3.25.17
│ └─┬ @aws-amplify/platform-core 1.10.4
│   └── zod 3.25.17
├─┬ @aws-amplify/platform-core 1.10.4
│ └── zod 3.25.17
├─┬ @aws-amplify/sandbox 2.1.4
│ ├─┬ @aws-amplify/backend-deployer 2.1.5
│ │ └─┬ @aws-amplify/platform-core 1.10.4
│ │   └── zod 3.25.17
│ ├─┬ @aws-amplify/backend-secret 1.4.2
│ │ └─┬ @aws-amplify/platform-core 1.10.4
│ │   └── zod 3.25.17
│ ├─┬ @aws-amplify/cli-core 2.2.3
│ │ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ │ └── zod 3.25.17
│ │ └── zod 3.25.17
│ ├─┬ @aws-amplify/client-config 1.10.0
│ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ └── zod 3.25.17 peer
│ │ ├─┬ @aws-amplify/deployed-backend-client 1.8.1
│ │ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ │ └── zod 3.25.17 peer
│ │ │ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ │ │ └── zod 3.25.17
│ │ │ └── zod 3.25.17
│ │ ├─┬ @aws-amplify/model-generator 1.2.2
│ │ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ │ └── zod 3.25.17 peer
│ │ │ ├─┬ @aws-amplify/deployed-backend-client 1.8.1
│ │ │ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ │ │ └── zod 3.25.17 peer
│ │ │ │ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ │ │ │ └── zod 3.25.17
│ │ │ │ └── zod 3.25.17
│ │ │ └─┬ @aws-amplify/platform-core 1.10.4
│ │ │   └── zod 3.25.17
│ │ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ │ └── zod 3.25.17
│ │ └── zod 3.25.17
│ ├─┬ @aws-amplify/deployed-backend-client 1.8.1
│ │ ├─┬ @aws-amplify/backend-output-schemas 1.8.0
│ │ │ └── zod 3.25.17 peer
│ │ ├─┬ @aws-amplify/platform-core 1.10.4
│ │ │ └── zod 3.25.17
│ │ └── zod 3.25.17
│ └─┬ @aws-amplify/platform-core 1.10.4
│   └── zod 3.25.17
├─┬ @aws-amplify/schema-generator 1.4.1
│ └─┬ @aws-amplify/platform-core 1.10.4
│   └── zod 3.25.17
└── zod 3.25.17

updating to v4 and using zod/v3 on packages it's not a breaking change afaik.

let me know if this is something desirable, i could submit a pr if needed.

Use case

Zod v3 is almost 5 years old, and Zod v4 is a nice improvement over it. This changes will allow users to use zod v4 in their apps while keeping v3 for core packages.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions