Skip to main content
Mastra v1 is coming in January 2026. Get ahead by starting new projects with the beta or upgrade your existing project today.

Step Class

The Step class defines individual units of work within a workflow, encapsulating execution logic, data validation, and input/output handling. It can take either a tool or an agent as a parameter to automatically create a step from them.

Usage exampleDirect link to Usage example

src/mastra/workflows/test-workflow.ts
import { createWorkflow, createStep } from "@mastra/core/workflows";
import { z } from "zod";

const step1 = createStep({
id: "step-1",
description: "passes value from input to output",
inputSchema: z.object({
value: z.number(),
}),
outputSchema: z.object({
value: z.number(),
}),
execute: async ({ inputData }) => {
const { value } = inputData;
return {
value,
};
},
});

Constructor ParametersDirect link to Constructor Parameters

id:

string
Unique identifier for the step

description:

string
Optional description of what the step does

inputSchema:

z.ZodType<any>
Zod schema defining the input structure

outputSchema:

z.ZodType<any>
Zod schema defining the output structure

resumeSchema:

z.ZodType<any>
Optional Zod schema for resuming the step

suspendSchema:

z.ZodType<any>
Optional Zod schema for suspending the step

stateSchema:

z.ZodObject<any>
Optional Zod schema for the step state. Automatically injected when using Mastra's state system. The stateSchema must be a subset of the workflow's stateSchema. If not specified, type is 'any'.

execute:

(params: ExecuteParams) => Promise<any>
Async function containing step logic

ExecuteParamsDirect link to ExecuteParams

inputData:

z.infer<TStepInput>
The input data matching the inputSchema

resumeData:

z.infer<TResumeSchema>
The resume data matching the resumeSchema, when resuming the step from a suspended state. Only exists if the step is being resumed.

mastra:

Mastra
Access to Mastra services (agents, tools, etc.)

getStepResult:

(step: Step | string) => any
Function to access results from other steps

getInitData:

() => any
Function to access the initial input data of the workflow in any step

suspend:

(suspendPayload: any, suspendOptions?: { resumeLabel?: string }) => Promise<void>
Function to pause workflow execution

state:

z.infer<TState>
The current workflow state. Contains shared values that persist across all steps and suspend/resume cycles. The structure is defined by the step's stateSchema.

setState:

(state: z.infer<TState>) => void
Function to set the state of the workflow. Inject via reducer-like pattern, such as 'setState({ ...state, ...newState })'

runId:

string
Current run id

runtimeContext?:

RuntimeContext
Runtime Context for dependency injection and contextual information.

runCount?:

number
The run count for this specific step, it automatically increases each time the step runs

On this page