-
Notifications
You must be signed in to change notification settings - Fork 41
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
12 changed files
with
170 additions
and
47 deletions.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,44 +1,155 @@ | ||
# Windmill compared to Kestra | ||
import DocCard from '@site/src/components/DocCard'; | ||
|
||
# Kestra vs Windmill | ||
|
||
![Windmill Kestra](../assets/compared_to/windmill_kestra.png 'Windmill Kestra') | ||
|
||
{/* | ||
Context of this page writting | ||
- We, are Windmill, an open-source workflow engine and developer platform. | ||
- Kestra is a competitor | ||
- We want to draw an honest comparison between the two | ||
Overall thoughts on Kestra | ||
- when developers come to Windmill, they don't have to "learn" another framework but just write their code in the language they know with the tools they already have (like vs code / code editor on the web app) and then the "settings" are in an intuitive UI and not a yaml that they have to kindof learn (Kestr | ||
Intro, context | ||
- Dates, Kestra recent uplift since fundrasing announcement in 2024 | ||
- Leave placeholder for Windmill | ||
Notes on Kestra: | ||
- Native support for Python, R, Node.js, Julia, Ruby, Shell, or PowerShell, but everything else via Docker | ||
- Similar architecture based around the queue being the central source of truth for the event driven orchestration of tasks / flows / job | ||
- Dependency caching and pre-installed dependencies seem to be also supported for Python or when using Docker but has to be done manually | ||
Bad / OK (on Kestra): | ||
- No baked-in approvals (you can use the pause, then wait for incoming webhook manually) -> In Windmill: approval steps | ||
- No app builder / automated UI generation for script input fields? -> In Windmill: we have the low-code App editor | ||
- No visual flow builder / editor -> Flow editor in Windmill | ||
- No reusable variables / secrets / resources (can use external vaults though) -> In Windmill: we have reusable variables, secrets, resources | ||
- No auto dependency installing / caching (you have to do it manually for scripts on the workers) -> In Windmill: we auto-install and cache dependencies for you, you focus on writing code | ||
- YAML only | ||
- You have to always go through IO and read write files between steps | ||
- Simple arguments to functions are passed as env variables, which is inconvenient | ||
- No worker logs or metrics? (couldn’t find them in the dashboard) | ||
- Performance (see benckmark, leave placeholder) | ||
- No AI assistant autocomplete code | ||
Good | ||
- Workflow as code editor | ||
- Huge amount of triggers (through plugins) | ||
- Backfill | ||
- Simple: only a flow editor, a script is a one step flow (in Windmill, flows are orchestrated scripts, architecture choice) | ||
- Super easy install as well (download Docker compose file) that comes with pre-populated tutorial flows | ||
- A *lot* of plugins | ||
*/} | ||
[Kestra](https://kestra.io) 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](../misc/6_getting_help/index.mdx) for any requests or modifications. | ||
|
||
## Open source | ||
|
||
Both Windmill and [Kestra](https://github.com/kestra-io/kestra) are fully open source and can be self-hosted. They both offer an easy installation process through Docker Compose, with pre-populated tutorial flows to help users get started. | ||
|
||
Windmill provides and integrates into its platform a [public community Hub](https://hub.windmill.dev/) where users share useful and proven scripts, flows, and applications. | ||
|
||
![Windmill GitHub](../assets/compared_to/windmill_gh.png 'Windmill GitHub') | ||
|
||
<div className="grid grid-cols-2 gap-6 mb-4"> | ||
<DocCard | ||
title="Self-host Windmill" | ||
description="Self host Windmill in 2 minutes." | ||
href="/docs/advanced/self_host/" | ||
/> | ||
</div> | ||
|
||
## Language support and dependencies | ||
|
||
Kestra provides [native support](https://kestra.io/docs/workflow-components/tasks/scripts/languages) 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](../advanced/6_imports/index.mdx) installation and caching, allowing developers to focus on writing code | ||
- Windmill supports [TypeScript](../getting_started/0_scripts_quickstart/1_typescript_quickstart/index.mdx), [Python](../getting_started/0_scripts_quickstart/2_python_quickstart/index.mdx), [Go](../getting_started/0_scripts_quickstart/3_go_quickstart/index.mdx), [Bash](../getting_started/0_scripts_quickstart/4_bash_quickstart/index.mdx), [SQL](../getting_started/0_scripts_quickstart/5_sql_quickstart/index.mdx) and more [languages](../getting_started/0_scripts_quickstart/index.mdx) natively | ||
|
||
![Script languages](../../static/images/script_languages.png 'Script languages') | ||
|
||
<div className="grid grid-cols-2 gap-6 mb-4"> | ||
<DocCard | ||
title="Languages" | ||
description="Windmill supports TypeScript, Python, Go, PHP, Bash, SQL and Rust or launch docker containers." | ||
href="/docs/getting_started/scripts_quickstart" | ||
/> | ||
<DocCard | ||
title="Dependencies in Windmill" | ||
description="Learn how Windmill handles dependencies automatically." | ||
href="/docs/advanced/imports" | ||
/> | ||
</div> | ||
|
||
## 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-only configuration for workflows where scripts are referenced as files | ||
- Requires passing arguments between steps through file I/O | ||
- Passes simple arguments as environment variables | ||
- No visual flow builder/editor | ||
|
||
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`). | ||
|
||
![Kestra flow example](../assets/compared_to/flow_kestra.png 'Kestra flow example') | ||
|
||
Windmill: | ||
- Provides a UI for workflow configuration and step advanced settings | ||
- Offers a visual [Flow Editor](../flows/1_flow_editor.mdx) | ||
- 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. | ||
|
||
![Windmill flow example](../assets/compared_to/flow_windmill_kestra.png 'Windmill flow example') | ||
|
||
{/* TODO: ADD VIDEO OF THE SAME FLOW CREATION, WHEN MONACO IS FIXED? */} | ||
|
||
### Developer tools | ||
|
||
Windmill is designed to integrate seamlessly with your existing tool stack and workflows, specifically: | ||
- [Local development support](../advanced/4_local_development/index.mdx) | ||
- [Windmill CLI](../advanced/3_cli/index.mdx) | ||
- [Git sync](../advanced/11_git_sync/index.mdx) for version control | ||
- [VS Code extension](../cli_local_dev/1_vscode-extension/index.mdx) | ||
- Built-in code editor with [AI assistance](../core_concepts/22_ai_generation/index.mdx) for autocomplete and code generation | ||
|
||
Although Kestra offers an alternative for some of these features ([Version control with Git](https://kestra.io/docs/version-control-cicd/git), [Server CLI](https://kestra.io/docs/server-cli)), it does not allow for as seamless an integration with your existing tools. | ||
|
||
<div className="grid grid-cols-2 gap-6 mb-4"> | ||
<DocCard | ||
title="Local development" | ||
description="Develop from various environments such as your terminal, VS Code, and JetBrains IDEs." | ||
href="/docs/advanced/local_development" | ||
/> | ||
</div> | ||
|
||
## Features comparison | ||
|
||
Kestra and Windmill have a very similar set of features (they address the same needs); however, there are a few features where they stand out from each other. | ||
|
||
### What Kestra does differently (and well) | ||
|
||
{/* Say they are good with data pipelines? */} | ||
|
||
- Large number of trigger types through [plugins](https://kestra.io/plugins) | ||
- [Backfill](https://kestra.io/docs/concepts/backfill) capabilities | ||
- Simple architecture where a script is treated as a one-step flow, only one editor | ||
|
||
### What Windmill offers additionally | ||
|
||
- [Automated UI generation](../core_concepts/6_auto_generated_uis/index.mdx) for script and flows input fields | ||
- Custom platform (and pricing) for [operators](../core_concepts/16_roles_and_permissions/index.mdx#operator) to only trigger flows | ||
- [Approval steps](../flows/11_flow_approval.mdx) to pause a flow execution until approval | ||
- [Low-code App Editor](../apps/0_app_editor/index.mdx) for building UIs | ||
- Reusable [variables, secrets](../core_concepts/2_variables_and_secrets/index.mdx), and [resources](../core_concepts/3_resources_and_types/index.mdx) | ||
- Built-in worker [logs and metrics](../core_concepts/9_worker_groups/index.mdx#queue-metrics) (EE only) | ||
|
||
### Everything else | ||
|
||
For everything else, both platforms offer core workflow engine features like [scheduling](../core_concepts/1_scheduling/), [webhooks](../core_concepts/4_webhooks/index.mdx), and [error handling](../core_concepts/10_error_handling/index.mdx). | ||
|
||
## Performance | ||
|
||
[Performance benchmark placeholder - reference to comparative benchmarks with other workflow engines] | ||
|
||
## Pricing | ||
|
||
Windmill has a transparent pricing policy, with clear steps for implementation. Every feature mentioned above is free with Windmill, unless mentioned otherwise (EE). See all Enterprise Edition features on our [Pricing page](/pricing). | ||
|
||
Windmill is cheaper at scale and can be used for free at any scale thanks to its open source nature. | ||
|
||
As of November 18, 2024, Kestra does not disclose its Enterprise pricing (see below). | ||
|
||
Kestra's pricing: | ||
|
||
![Kestra pricing](../assets/compared_to/kestra_pricing.png 'Kestra pricing') | ||
|
||
<div className="grid grid-cols-2 gap-6 mb-4"> | ||
<DocCard | ||
title="Pricing" | ||
description="Windmill's subscription plans and simulations." | ||
href="/pricing" | ||
/> | ||
<DocCard | ||
title="Plans & How to Upgrade" | ||
description="Windmill transparently provides the content and pricing of its upgraded plans." | ||
href="/docs/misc/plans_details" | ||
/> | ||
</div> | ||
|
||
## Conclusion | ||
|
||
Kestra offers a solid foundation for workflow orchestration with its extensive plugin system. We believe that Windmill is a more intuitive solution for developers: the user doesn't need to "learn" a new framework but simply write code in the language they already know, using the [tools](#developer-tools) they are already familiar with (VS Code, GitHub, etc.). Dependencies are automatically handled and all settings are in an intuitive UI, not in a YAML file that only a few developers in your organization are familiar with. | ||
|
||
The choice between the two may come down to specific needs: if you're looking for a pure workflow orchestration tool with extensive plugins, Kestra might be sufficient. However, if you need a more complete platform that includes UI building, automated dependency management, and intuitive development experience, Windmill would be the better choice. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters