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 logo

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

    Review, download, and import

    Read the rebuilt workflow, download or copy it, import it into your own instance, and attach your credentials.

Convert a Windmill workflow now

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 WindmillIn HeymWhat changes
FlowWorkflowOne flow becomes one workflow, with the step graph preserved as canvas edges.
Python script stepCode nodeThe cleanest part of the move, since the Heym Code node is Python; it runs in a Docker sandbox here.
TypeScript, Go, or Bash script stepCode node or the matching integration nodeRewritten into Python, or replaced by a native node when the script was mostly calling one service.
Branch one and branch allCondition and Switch nodesFirst-match branching becomes a Switch; run-every-branch becomes parallel edges, which execute concurrently by default.
For loop stepLoop nodePer-item iteration carries over, with independent items free to run at the same time.
Approval stepHuman review checkpointThe run pauses on a full execution snapshot and issues a one-time review link where a reviewer accepts, edits and continues, or refuses.
ResourceCredentialConnection details become encrypted credentials scoped by team in your own instance.
Variable, including secret variablesVariable node and the Credentials tabPlain values become variables; anything that grants access belongs in Credentials instead.
ScheduleCron nodeCron expressions and timezone handling move across directly.
Webhook endpointWorkflow webhook triggerThe entry point becomes a property of the workflow, so the URL is new and callers need updating.
Error handlerError Handler nodeA handler becomes a branch you wire, with a workflow-level error workflow catching anything without one.
App builderPortal and the Dashboard tabA 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.