Skip to main content
Novu Framework allows you to use Zod to define the Control and Payload schemas for your workflows. (Supports Zod v3)

Add Zod to your project

1

Install Zod Packages

npm install zod
Novu Framework supports Zod v3. Make sure you’re using this version for optimal performance and feature support.
2

Use Zod in your workflow


export const testWorkflow = workflow('test-workflow', async ({ step, payload }) => {
    await step.email('send-email', async (controls) => {
        return {
            subject: controls.subject,
            body: 'Hello World',
        };
    },
    {
        controlSchema: z.object({
            subject: z.string().default('A Successful Test on Novu from {{userName}}'),
        }),
    });
}, {
    payloadSchema: z.object({
        userName: z.string().default('John Doe'),
    }),
});

Controls and Payload UI

When you define a controlSchema for a step, Novu will automatically generate a UI for the controls in the workflow editor.
  • Form Input Title - Will be derived from the key of the Zod schema. Unfortunately Zod does not support custom titles at this point.
  • Form Input Type - Will be derived from the Zod schema type, with support for string, number, boolean, and enum and array types.
  • Default Value - Will be derived from the Zod schema default value.
  • Validation - Will be derived from the Zod schema validation rules, including min, max, email, url, regex and etc…