What is Windmill?

Windmill is a script-driven, open-source workflow engine, and app development platform that allows developers to leverage almost any coding language to build scripts and apps faster.
Windmill logo.

A brief introduction to Windmill

Windmill is a script-driven, open-source workflow engine and app development platform designed to help companies build internal tools faster by focusing on the “code that matters”. A true polyglot of a platform, Windmill offers support for popular languages like Python and Typescript, while also allowing scripts to be written in various other languages, such as: Go, Rust, and Bash. 

Windmill advertises itself as a comprehensive solution that offers a combination of the best features of its competitors (such as Retool, Pipedream, and the now defunct Airplane) while, crucially, remaining fully open-source. Companies can still build production-grade apps faster without the usual fear of vendor lock-in. 

A quick peek at their Y-combinator will tell you that if there’s one thing Windmill wants to be defined by, it’s their promise to be script-centric and open source.

A Windmill workspace showing results from testing a flow.

Windmill offers three fundamental features: a runtime for scalable task execution, an orchestrator that organizes these tasks into smooth, fast workflows, and an app builder that facilitates developers to build simple GUIs to help execute these scripts. 

These functions are useful for applications needing fast responses and the ability to handle large-scale workloads, such as real-time data processing or APIs. It’s also great for automating business processes, creating data pipelines, or managing complex operations like order processing, customer notifications, or ETL (Extract, Transform, Load) jobs.

Example of a Windmill flow and details on the "For loop" step of the flow.

Founded in 2022, Windmill is still on the up-and-coming. As of yet, it only has a small developer community and most builders rely largely on the community Discord for support, rather than a dedicated website or forum. When first using the platform, many users, even the most passionate script-writing engineers, might experience an initial learning curve, so the lack of extensive support and documentation can be frustrating.

Windmill sits in a pretty unique position in comparison to its competitors. As a developer tool focused on technical teams, it sets itself apart from low-code platforms like Make and Zapier which typically target business users. At the same time, it’s distinct from web-app building platforms Retool and Appsmith, due to its focus on scripts.

A list of OAuth APIs and Non OAuth APIs & Resources that are available under "Add a Resource" in Windmill.

Though it’s a newer offering in the market, its code-first approach to building paired with its philosophy of supporting many coding languages on an open-source platform, means it’s one to keep an eye on. 

Let’s dive into more specifics.

Who is Windmill for?

In terms of internal tool platforms, Windmill is most certainly on the developer tool side of the spectrum, helping developers to build with code faster. Nevertheless, much like other similar platforms, Windmill plays something of a balancing act: claiming to offer the power and customizability of traditional code, but with the improved development speed you can expect of low-code solutions. 

Section from the Windmill homepage showing an illustration of a Windmill workflow engine.

The principal goal of Windmill is to provide a building platform for the types of developers that are constantly running scripts on their own computers, and are looking to share this functionality with their teams. 

💡
Quick recap: what is a script? 
Are you still with us? A script is written in a programming language supported by Windmill (e.g., Python or JavaScript). It can take predefined inputs, process them, and return outputs. Scripts can be combined in workflows to perform more complex operations. 

In essence, a script is a programmable unit of functionality that forms the foundation for creating automated processes and workflows in Windmill.

While a developer who is used to working with scripts can most likely jump into Windmill and deploy those scripts right there on the platform, building a beautiful app interface isn’t nearly as intuitive and requires somewhat of a learning curve, even for experienced programmers. For that reason, it’s going to be most suitable for developers with good script programming experience, but also those with the time to learn the nuances of the platform, if they’re looking to build UIs.

A Windmill workspace showing Outputs in the left panel and Components in the right panel.

Key features and limitations

Let’s dig a little deeper into the specifics of the platform and some of its key limitations.

Building ‘Scripts’ and ‘Flows’

🛠️
TL;DR: In Windmill, scripts are the building blocks of everything. You can run a script on its own, connect multiple scripts as a set with an order and rules to make a Flow (workflow) - even apps should be thought of as a customized UI that are used to execute scripts. Considering all of this, it’s no surprise that Windmill’s most redeeming attribute lies in its script-building capabilities.

The details: Windmill consists of three main products: Scripts, Flows, and Apps. This separation helps to keep the lower-order products free from unnecessary complexity, while the connection between the three means that a script written in one can be seamlessly used in the next. 

The Script builder is the simplest product of the three, with scripts serving as the foundations of Windmill. Here, you can:

  • set the metadata for the script: summary, description, language, etc; 
  • set information on the runtime environment: worker tags, run visibility, caching info;
  • define how the script is triggered;
  • tweak the UI that the script auto-generated.

Windmill supports writing scripts in a variety of languages, with the greatest amount of support for Python and Typescript, but still allowing for less common languages like Rust, Go, and Bash.

An example script written in the Windmill script builder.

If Scripts offer the building blocks, the Flows are the cement of the operation. While single scripts can do a lot, Flows allow you to connect multiple scripts in a Directed Acyclic Graph to accomplish more. You can build complex data pipelines, workflows that pause for user interaction, or those that run on a loop forever. 

If you’re looking for automations, Windmill is again an excellent choice. Flows can be triggered in a variety of ways, including: email, CRON jobs, or Webhooks, among others. Adding these automations feels intuitive and is accomplished easily. Since Scripts integrate with Flows so well, you can create a flow with a single step and now you have an automated script. 

An example of a Windmill flow and it's settings.

One of the major downsides of building Scripts and Flows in Windmill is quite an unusual one: Windmill does not auto-save by default. This means that if you get into a zone where you make a lot of progress but you lose power or forget to save, you could suddenly be out of a lot of work. In a world where everything from your Google Docs to your Pokémon game autosaves regularly, this is an unusual miss for the platform. Hopefully, it’s one to be solved soon.

Building apps: UI builder

🛠️
TL;DR: Windmill offers an app builder for creating UIs on top of your Scripts and Flows with highly customizable components. Nevertheless, the building process is not super intuitive compared to competitors and event handlers could also offer better support. 

The details: The final product is the Apps. The Script and Flow builders are the foundations of Windmill, and so the app builder is a bit like the rest of the house that makes it all liveable. As you add Scripts and Flows to your app, Windmill automatically generates simple forms based on their inputs, essentially making them into custom drag-and-drop components. If you need something more specific, you can edit the CSS or Tailwind to customize the components to better fit your needs. 

An example Windmill app created automatically from a flow.

The components in the app builder are also highly customizable with code, and this often means that a single Windmill component can be used to achieve the same as 3 or 4 similar components on competitor platforms. Nevertheless, this is a blessing and a curse, as the components don’t seem to offer much out-of-the-box and need lots of configuration to set up even their most basic functionality. 

Next up in the limitations menu: the event handlers in the App Builder are still sparse. Writing custom handlers isn’t intuitive, which means that creating complex relationships between components can be difficult to achieve. This is a reasonable sacrifice, given that building apps isn’t necessarily the primary focus of Windmill, but it’s still a bit disappointing, particularly in comparison to platforms like Retool which offer much more advanced UI-building capabilities.

Finally, it’s important to note: the much-advertised AI co-builder requires a secondary payment to OpenAI, which is frustrating at best and a surprise fee at worst. While this is relatively commonplace for most dev tools, the extent to which the AI builder is integrated into Windmill’s tutorials and marketing suggests that it would be built in. 

Infrastructure and deployment

🛠️
TL;DR: Windmill’s open-source offering is an immediate tick for many companies, for both cost and security reasons. Self-hosting can be achieved through Docker. Windmill truly shines in its high-performance workflows, some of the fastest out there.

Windmill is open-source, which makes it an excellent option for small teams who need an inexpensive (or free) platform for development, if they are willing to self-host. They also offer cloud hosting for a small fee - relative to their non-open-source competitors - and Enterprise cloud plans for more support. 

Self-hosting Windmill is facilitated through Docker. When testing, we had some difficulty getting it up and running on our computers, but we’d largely attribute these issues to Docker. Nevertheless, we would like to see a more comprehensive section in Windmill’s documentation for local deployment, including a troubleshooting section for common issues, since the ease of self-hosting is something they push in their marketing. That being said, we understand the lack of enthusiasm to openly share ways through which to undercut their pricing model. 

As well as being open-source, one of the areas in which Windmill truly shines is performance, claiming to be the fastest self-hostable workflow engine. They achieve this largely through their overall design that is optimized at each of the steps of a workflow engine: computing transitions, passing data between steps, and executing the step, as well as relying on PostgreSQL and Rust. 

Section from the Windmill blog post entitled "Fastest Self-Hostable Workflow Engine" with a graphical comparison to competitors.

For executing Python scripts and flows -  normally a notoriously slow process - Windmill spawns dedicated workers to remove the overhead of cold-starting and allows those tasks to be accomplished more efficiently.

An example Windmill flow containing Python scripts (left panel) and the Timeline for running it (right panel).

Security: permissions and enterprise needs

🛠️
TL;DR: Windmill offers a robust set of features for enterprise companies and high-security deployments, including granular permissions, SSO, SAML, audit logs and support channels. 

The details: For a newer platform, Windmill’s permission stack is relatively robust. Windmill allows you to define highly granular permissions by default, leveraging Access Control Lists (ACLs) to group users into three categories: Admins, Writers, and Viewers

Nearly all resources in Windmill are uniquely identified using their path, and permissions can be set as finely as individual scripts or as broadly as whole workspaces. Groups and Folders provide a way to handle permissioning for users and resources that share similarities. For each item, additional permissions can also be added if necessary. The free plan even offers up to 4 groups for permissions. 

The Windmill Enterprise plan offers an impressively complete set of features tailored to enterprises. 

Some key considerations include:

Audit logs 

Windmill has a pretty robust page to view user actions within the platform. For enterprises, this should suffice for compliance requirements.

An example of a Windmill Audit log.

SAML & SSO 

With the Enterprise plan, Windmill provides flexible authentication options to ensure secure access to the platform. Users can authenticate through Single Sign-On (SSO) using their company’s identity provider like Okta. These are all key requirements for most enterprises.

Users also have a unique username per workspace meaning that identities can be easily masked even between different workspaces in the same company.

With the Enterprise plan, users can connect their identity provider groups or bundles and push them directly into the platform.

SLA & Roadmap Input

As a start-up looking to build its client base, Windmill is very proactive in incorporating enterprise feedback into its platform and product pipeline. Enterprises will also get a direct channel of communication for support.

Now that we’ve looked more closely at the principal functionality of Windmill, let’s take a broader look at the kinds of use cases we would, and wouldn’t, recommend it for.

What is Windmill good for?

MVPs 

Startups and businesses with strong scripting skills who are looking to quickly validate the logic behind an application will find Windmill ideal for developing Minimum Viable Products (MVPs). Windmill’s rapid development capabilities mean that MVPs can be built, tested, and iterated upon swiftly. This allows companies to gather user feedback and make data-driven decisions on product improvements or pivots, saving time and resources. 

The platform's ability to automatically generate a functional, if somewhat generic, UI and provide a functional prototype quickly makes it an invaluable tool for startups aiming to test and refine their concepts without the need for extensive time spent on the look and feel of their application.

Data Pipelines and ETL workflows

Data pipelines are, at their core, just taking data from one place and moving it to another, typically with a couple of data transformations somewhere in the middle. Windmill’s various integrations, including cloud storage platforms like S3, mean that getting and storing the data is fairly simple. Couple this with the fact that Windmill Flows are just a Directed Acyclic Graph (a fancy way to say a non-repeating and ordered graph) of scripts and they are almost the perfect tool for creating a data pipeline. 

Since data pipelines are often used for internal purposes rather than external ones, there is no need for aesthetically pleasing applications to interact with the pipeline. This means that Windmill’s somewhat rustic auto-generated UIs are likely to suffice for most data pipeline use cases.

Expediting development speeds and managing scripts and workflows

Windmill shines brightest when working with scripts and flows. Since the software is designed with developers in mind, these building blocks of software are intuitive to build and powerful to use in Windmill. 

An example Windmill flow on the left panel and details for the "Set array" step of that flow on the right panel.

The range of languages that are available in Windmill’s Script editor means that it integrates nearly seamlessly into nearly any team’s structure. The VSCode and CLI integrations complement the low-code editor and auto-generated UIs which means developers can build scripts and flows however they do best, while still allowing non-technical team members to view and add to their work.

The granular permissioning means that, even in large teams, individual scripts in a flow can be kept secure. 

What is Windmill not so good for?

Non-technical builders

Everything in Windmill is based on Scripts. As a result, non-technical users who aren’t comfortable working with scripts are probably going to have a tough time. This makes sense when you consider that Windmill was “designed by developers for developers”. 

While components in Windmill’s application editor are highly customizable, many of the available components look and feel unpolished before you add a layer of configuration to them. This means that the application editor needs a technical touch to achieve its full potential and apps feel incomplete without it. 

Admin Panels

While it is possible to build an admin panel in Windmill, if that is all that you are using it for, then other tools may be more effective. Windmill’s App builder really serves as a way to interact with its Scripts and Flows. An application that is more focused on UI than scripts (like Retool) would likely be quicker and easier to build on an alternative platform. 

Community and Support

The Windmill support team (including their founder who is often seen assisting with questions) is excellent, but that support is currently limited to Discord

This has a couple of shortcomings when compared to a more conventional online forum: 

  • a Discord account is necessary to join the server, meaning users must maintain an additional account beyond their Windmill account to get assistance. 
  • And while Discord does provide some search functionality, it isn’t as robust as what is provided in a conventional forum and answers are not going to be found through a simple Google. 

The Windmill Discord server uses AnswerOverflow, a Discord Bot that indexes content to the web. And yet, even when we googled exact post names, relevant matches were typically buried beyond the first page of the results. If you’re trying to search for a specific questions, try typing “site:AnswerOverflow” in the query string. 

Pairing the lack of a robust search feature with the size of the Discord community at about 2,000 at the time of this post means that there isn’t an easily accessible library of past questions that can be used to try to debug any issues you may run into. Nevertheless, it’s likely that the team does jump on board to help you while their customer base is small and they have the capacity.

Pricing

By and large, Windmill is very affordable for teams that have the engineering power to use it well. 

If self-hosted, Windmill is usable by teams of less than 10 (with SSO) completely for free (though without some key features like SAML and audit logs). 

A self-hosted Enterprise version of Windmill is available for as little as $120 per month, or less if you are a Nonprofit or SMB with fewer seats ($48 per month) and no need for audit logs.

Section from the Pricing page of the Windmill website detailing their self-hosted plans (Free & Open-source and Pro).

One thing we do really like about Windmill self-hosting pricing is that the Enterprise plan has variable pricing based on both the number of developer seats (users are uncapped) and the amount of computing power required. In addition to uncapping the number of user seats, the Enterprise plan also grants a commercial license, an SLA, and priority support. 

Outside of self-hosting, Windmill also offers white labeling or cloud-hosted options. 

Section from the Pricing page of the Windmill website detailing their Cloud plans (Free, Team and Enterprise).

Cloud hosting adds an additional tier, Team, where you can purchase up to 10 seats each allowing for 10k operations per month, up from the 1k allowed in the free tier. The cloud-hosted version of Windmill does not offer a discount for non-profits or small businesses, making self-hosted a better option for those types of customers. 

As of January 2025, All versions offer a 16% discount if billed annually and prorated cost based on signup. 

How does Windmill compare to other, similar tools?

Windmill is similar to other developer-focused platforms such as Retool and Appsmith. One of Windmill’s major differentiating points is that it is open-source, while many of its competitors are not.

Retool Workflows vs Windmill

While Retool and Windmill can accomplish similar outcomes, their focus is clearly on different builders. As we’ve discussed throughout this article, Windmill is a true powerhouse when it comes to building Flows and Scripts, and the app builder is somewhat of an additional, complementary feature. By comparison, while Retool does have Retool Workflows and the ability to write scripts, these features are secondary to its app builder and less well-developed. In Retool, developers can write only in Python or JavaScript for workflows, whereas Windmill offers many more options for language support. Windmill’s Scripts and Flows will most likely feel more intuitive to developers than Retool Workflows. 

On the other hand, the app builder on Retool is much more intuitive than Windmill’s and offers a higher level of customization without having to delve into the CSS. Windmill’s app builder, while effective at getting something out quickly, takes a bit more getting used to. In general, it's clear that Retool has been able to dedicate a lot more resources to their web app builder than Windmill has.

Importantly, Retool has been around a lot longer than Windmill and holds a much larger market share. With companies like Stripe and Amazon on the Retool roster, there’s a bit more trust by association. However, every coin has two sides, and Retool’s size means you’ll only get tailored support on the much more costly Enterprise plans, or through the large community on their forum. Windmill is a smaller company and, as such, you’re much more likely to get direct support from their CS teams, though the community is also smaller than Retool’s.

Make vs Windmill

Windmill is similar to Make (formerly Integromat) in terms of its approach to workflows but it is also generally more focused on developers and enterprise companies. Make is typically used for non-mission critical workflows built by all teams, not just engineering. Make is particularly intuitive and designed for a low-code audience creating smaller-scale business automations. 

For developers, Make might be a better option for building automations with basic integrations like Slack or SaaS platforms, as building and maintaining these is likely to be much more straightforward than Windmill scripts. Nevertheless, Make’s ‘Scenarios’ (workflows) offer less customization than Windmill’s Scripts and Flows, and don’t support code.  Generally, developers who are used to coding and want to make complex, data-driven workflows might find Make limiting. 

On the other hand, Windmill expedites scalable script creation that may well be used in mission-critical use cases. Windmill also offers Enterprise-level security options at a much lower price point, as well as offering a fully self-hosted option that Make doesn’t. For developers who want full coding control, Windmill is a much more suitable option.

Summary

Windmill’s powerful and intuitive flows, competitive pricing structure and open-source copyright make it an excellent choice for individual developers or small teams looking to quickly build script-centric internal tools, and particularly if working on open-source is a company requirement. However, since it is still a relatively new tool with a fairly small community, it might not be the best choice for anyone looking for a fully polished product with a huge amount of built-in support. 

Overall, Windmill is a useful tool for developers looking to maximize their scripting capabilities to create data pipelines and CRON jobs quickly. Their app builder means that non-technical users can use them too. Since it is open source, it is an excellent tool for anyone looking to quickly deploy locally and have a high level of control over exactly how things operate, all for an affordable price. 

About the author
Tools Team

Tools Team

The tools.dev team comprises internal tools specialists with deep expertise in the platforms used to develop and optimize these solutions.

tools.dev

Your hub for internal tools & how to build them.

Find your tool
tools.dev

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to tools.dev.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.