Customizing Flows
Make your Workbench flows look exactly how you want
By default, Workbench shows your Steps with their code. Great for developers. But what if you're sharing with:
- Frontend developers who just need to know the API
- Product managers who want to see the big picture
- Designers who care about the flow, not the code
You can override how Steps look in Workbench with custom React components.
Custom UI for Steps
Want to change how a Step looks? Create a .tsx or .jsx file next to it.
File structure:
👉 Same name, different extension. Motia connects them automatically.
Simple Example
Let's use the built-in EventNode but add an icon:
That's it! The Step now shows with your custom content inside, plus an icon.
Built-in Components
Motia gives you ready-made components for different Step types:
| Component | For which Steps | What you get |
|---|---|---|
EventNode | Event triggers | Styled box with connection points |
ApiNode | API triggers | Box with request/response info |
CronNode | Cron triggers | Box with schedule info |
NoopNode | NOOP steps | Different color for visual distinction |
Fully Custom UI
Want complete control? Build from scratch. Here's a real example:
The Step:
Custom UI:
What this does:
- Shows a clean card instead of code
- Has connection points (the
BaseHandleparts) - Prevents code viewer from popping up
- Uses your brand colors (blue border here)
Important parts:
- ✅
BaseHandlecomponents - These are the connection dots - ✅
onClick={handleClick}- Stops the code viewer from opening - ✅
Position.TopandPosition.Bottom- Where connections attach - ✅ Export as
default function- Required for Motia to find it
NOOP Steps
NOOP = "No Operation". These Steps don't actually run code. They just sit in your flow diagram to represent:
- External stuff → Webhooks, third-party APIs, manual processes
- Human actions → Approval gates, manual reviews
- Testing → Placeholder nodes while building flows
- Documentation → Show the complete picture visually
Creating NOOP Steps
NOOP Steps are config-only. No handler needed.
Add custom UI (optional):
Common NOOP Examples
1. Waiting for Stripe Payment
2. Human Approval
3. GitHub Webhook
Tips
For Custom UIs:
- ✅ Start with built-in components (
EventNode,ApiNode) - ✅ Keep it simple - focus on clarity
- ✅ Use Tailwind for styling
- ✅ Add
BaseHandlefor connections - ❌ Don't overthink it - simple cards work great
For NOOP Steps:
- ✅ Always include
virtualSubscribes(even if empty[]) - ✅ Use clear, descriptive names
- ✅ Explain what happens externally in the description
- ✅ Connect them to your flow with virtual emits/subscribes
Quick Reference
What to Import
Where Handles Go
- Top (
Position.Top) → For inputs (things coming in) - Bottom (
Position.Bottom) → For outputs (things going out) - Flows go top to bottom
Export Format
or