# Code Steps

Every channel step in a Novu Workflow can now be managed as TypeScript in your codebase - email, SMS, push, chat, and in-app.

## Contributors

-   Adam Chmara

## Details

Apr 8, 2026

Each step now has two modes: Editor (visual) and [Custom Code](https://docs.novu.co/platform/workflow/add-and-configure-steps/code-steps) (developer-managed via code). Switch any step to Custom Code mode, and the dashboard shows a pre-filled CLI command.

Switch any step to Custom Code mode and the dashboard shows the publish command, pre-filled and ready to run.

Run it to scaffold a placeholder handler and deploy it:

```
npx novu step publish \
  --workflow your-workflow-id \
  --step your-step-id \
  --secret-key nv-sk-...
```

### [**React Email for Email Steps**](/content/changelog/code-steps/#react-email-for-email-steps/index.html)

For email steps, pass `--template` to wire a [React Email component](https://docs.novu.co/platform/workflow/add-and-configure-steps/code-steps#react-email-for-email-steps) directly:

```
npx novu step publish \
  --workflow onboarding \
  --step welcome-email \
  --template ./emails/welcome.tsx \
  --secret-key nv-sk-...
```

Your React Email components stay in your repo, go through PR review, and are versioned alongside your application code.

### [**Controls: Dashboard Editing Without Code Changes**](/content/changelog/code-steps/#controls-dashboard-editing-without-code-changes/index.html)

Define a `controlSchema` in your code steps to expose editable fields in the Novu dashboard. Developers set the structure and defaults - non-technical teammates override copy without touching code.

Once published, controls defined in your handler appear as editable fields in the dashboard - no code change needed to update copy.

Mix Custom Code steps and Editor steps freely within the same Workflow.

Switch any step to Custom Code mode and copy the pre-filled command from the step editor to get started.
