Migrate from Windmill to Heym
Move Windmill flows to Heym. Paste an exported flow, watch AI Convert rebuild each step on a live canvas, then run it on infrastructure you already control.
Windmill presents an open-source developer platform for turning scripts into workflows and internal apps, with steps written in languages such as TypeScript, Python, Go, and Bash.
When it is worth moving a workflow
Script-first platforms handle deterministic work well, and the move usually happens at the point where the work stops being deterministic. An agent that picks its own tools needs a trace of what it saw, a cost figure, an approval gate, and evaluation before a prompt change ships, and building that around scripts is a project of its own.
If you are still deciding rather than moving, the Heym and Windmill comparison covers the evaluation side with links to first-party documentation.
How the move works
- 1
Export from Windmill
Open the flow in Windmill and export or copy its definition, then paste it. A description of what the flow does works too.
- 2
Paste it into AI Convert
A safety check runs, then each construct is mapped to the closest native Heym node and streamed onto a live canvas while you watch.
- 3
Review, download, and import
Read the rebuilt workflow, download or copy it, import it into your own instance, and attach your credentials.
What each Windmill concept becomes
A reviewer's guide to the rebuilt workflow. Constructs without an exact equivalent are mapped to the closest Heym primitive, which is why the result is worth reading before it handles real traffic.
| In Windmill | In Heym | What changes |
|---|---|---|
| Flow | Workflow | One flow becomes one workflow, with the step graph preserved as canvas edges. |
| Python script step | Code node | The cleanest part of the move, since the Heym Code node is Python; it runs in a Docker sandbox here. |
| TypeScript, Go, or Bash script step | Code node or the matching integration node | Rewritten into Python, or replaced by a native node when the script was mostly calling one service. |
| Branch one and branch all | Condition and Switch nodes | First-match branching becomes a Switch; run-every-branch becomes parallel edges, which execute concurrently by default. |
| For loop step | Loop node | Per-item iteration carries over, with independent items free to run at the same time. |
| Approval step | Human review checkpoint | The run pauses on a full execution snapshot and issues a one-time review link where a reviewer accepts, edits and continues, or refuses. |
| Resource | Credential | Connection details become encrypted credentials scoped by team in your own instance. |
| Variable, including secret variables | Variable node and the Credentials tab | Plain values become variables; anything that grants access belongs in Credentials instead. |
| Schedule | Cron node | Cron expressions and timezone handling move across directly. |
| Webhook endpoint | Workflow webhook trigger | The entry point becomes a property of the workflow, so the URL is new and callers need updating. |
| Error handler | Error Handler node | A handler becomes a branch you wire, with a workflow-level error workflow catching anything without one. |
| App builder | Portal and the Dashboard tab | A chat-shaped surface becomes a Portal; a reporting surface becomes dashboard widgets, where each widget is itself a workflow. |
Check these before it goes live
- Read every rewritten script. Anything that was not already Python needs a line-by-line pass.
- Recreate resources as credentials, and move any secret variable into the Credentials tab rather than a Variable node.
- Confirm approval steps behave as expected: the run now pauses on a snapshot and resumes as the same execution.
- Update the webhook URL anywhere an external system calls the flow.
- Run one test execution and compare the output against a recent run on the source side.
Windmill migration FAQ
Do my Python scripts carry over?
Largely yes, into the sandboxed Code node, which is also Python. Imports and any Windmill-specific client calls need adjusting, and the node runs inside a Docker sandbox with resource limits.
What happens to approval steps?
They become human review checkpoints. The execution freezes its full state, including variables and tool results, and issues a one-time review link. When the reviewer answers, the same run resumes from that point rather than starting again.
Do my credentials come across?
No, and that is deliberate. Exported workflow files hold no API keys or secrets, so AI Convert rebuilds the structure only and you attach your own credentials in the Heym Credentials tab afterwards. Nothing copies a secret between two systems on your behalf.
Is the converted workflow ready to run?
Treat it as a reviewed starting point rather than a finished port. Open it on the canvas, attach credentials, run one test execution, and adjust any node that was mapped to the closest Heym primitive rather than an exact equivalent.
Can I run the result on my own infrastructure?
Yes. Heym is source-available under an MIT license with a Commons Clause and runs on your own servers with Docker or Kubernetes, so migrated workflows, their credentials, and their model calls stay inside your environment.
Moving from something else
AI Convert reads exports from 12 tools, and it also accepts a plain description of the automation when there is no file to export.