# 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.

Canonical: https://novu.co/changelog/code-steps/

Markdown: https://novu.co/changelog/code-steps.md

Last updated: 2026-04-08T09:00:00.000Z

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

Published: 2026-04-08T09:00:00.000Z

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.

Run it to scaffold a placeholder handler and deploy it:

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

### **React Email for Email Steps**

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:

```bash
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**

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.

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.

[Get started with Code Steps →](<https://dashboard.novu.co/auth/sign-up?utm_source=changelog&utm_medium=web&utm_campaign=code-steps-launch>)
