Alternative to Kestra for workflow orchestration

Kestra is an event-driven orchestration platform that allows developers to build and run workflows declaratively in code.
We have tested and conducted performance benchmarks on Kestra, and this page outlines our conclusions. Please note that the content is written by Windmill; feel free to contact us for any requests or modifications.
- Open source
- Language support and dependencies
- Architecture and development experience
- Features comparison
- Performance
- Pricing
- Conclusion
Open source
Both Windmill and Kestra are fully open source and can be self-hosted. They both offer an easy installation process through Docker, with pre-populated tutorial flows to help users get started.
Windmill provides and integrates into its platform a public community Hub where users share useful and proven scripts, flows, and applications.

Windmill Git repository
Language support and dependencies
Kestra provides native support for Python, R, Node.js, Julia, Ruby, Shell, and PowerShell scripts. Additional language support is available through Docker containers. While this offers flexibility, there are some key differences in how dependencies are handled:
- In Kestra, dependency caching and pre-installed dependencies need to be managed manually by the user
- Windmill automatically handles dependency installation and caching, allowing developers to focus on writing code
- Windmill supports TypeScript, Python, Go, Bash, SQL and more languages natively

Architecture and development experience
Both platforms share a similar architecture centered around a queue-based system for event-driven orchestration of tasks and flows. However, there are several key differences in the development experience.
Configuration and workflow building
Kestra:
- Uses YAML-first configuration for workflows where scripts are referenced as files (recently introduced a no-code interface for basic workflow creation)
- Requires passing arguments between steps through file I/O
- Passes simple arguments as environment variables
Kestra takes a code-only approach. Workflow creation is done through a YAML file. Each task is a value in the YAML, and most of your tasks will be separate files that need to be referenced in the flow (e.g. Python code can type io.kestra.core.tasks.scripts.Python, io.kestra.core.tasks.python.Commands, io.kestra.core.tasks.python.Script).

Windmill:
- Provides a UI for workflow configuration and step advanced settings
- Offers a visual Flow Editor
- Allows direct passing of arguments between steps
- Supports both UI-based and code-based workflow creation
In Windmill, a step is simply a script in a language—nothing more. From the flow editor, you can select an existing script from your workspace or the Hub, or just write it directly in the integrated code editor. Each step can either be forked or saved as a separate script in your workspace.

This video shows how to create the same flow in Kestra and Windmill. It does not cover advanced features but focuses on the flow creation experience. For advanced benchmarks, see Performance.