Windmill Labs
Windmill

Windmill vs Make

Eight questions teams ask when a visual automation builder starts carrying production work, with an honest answer on each one for where Windmill or Make is the better pick.

WindmillWindmill in one sentence

An open-source workflow engine and developer platform to build and orchestrate all your internal software: scripts, workflows, data pipelines, AI agents and internal apps. Made for engineers who want full code flexibility and local dev experience, both to build internal software and to manage the underlying infrastructure.

MakeMake in one sentence

A visual, no-code automation builder (formerly Integromat): scenarios you assemble on a canvas from modules, routers and filters across 3,500+ apps, billed in credits. Best for business teams who want a working automation this afternoon without involving an engineer.

01 · What you can build

Which internal software can you build and orchestrate?

Windmill is built to centralize and orchestrate all your internal software in one place. Scripts, workflows, data pipelines, full-code apps, AI agents and operator UIs run on a single runtime, with shared resources, auth and observability. Make is built around one primitive, the scenario: a visual canvas of modules drawn from a large app catalog, where most actions consume one credit, which is what makes high-row-count jobs an awkward fit.

PrimitiveWindmillWindmillMakeMake
Chain steps with branching, retries and approval steps
Cron jobs with retries, error handling and alerting
Standalone functions exposed as APIs, webhooks or cron jobs without a wrapping workflow
ETL, syncs and scheduled data jobs over large row counts
1 credit per action
Agents that call tools, branch on outputs and run as workflow steps
Open beta
Isolated environments with persistent volumes for running coding agents
Dashboards and admin UIs, low-code or written in React or Svelte
Not listed
Run the whole platform on your own infrastructure

On Internal apps we have written "not listed" rather than a cross. Make's pricing page sells the no-code visual workflow builder, routers and filters, data stores and the app catalog, and its enterprise page adds Make Grid, scenario tagging and real-time analytics. Neither describes a builder for dashboards or admin UIs the way the Windmill app builder does, so we are reporting what their pages say rather than asserting a gap.

AI agent workflows exist on both sides. Make's own help center says the Make AI Agent (New) app "is available in open beta, so product functionality and pricing may change", which is why the cell is labelled rather than ticked.

02 · Target

Who is each platform built for?

Make is built so that a non-developer can ship an automation without asking anyone, and it is very good at that. Windmill is built for developer-led teams who want automations to live in the same place as the rest of their code, with review, versioning and ownership attached.

Primary audience

WindmillWindmill

Developer-led teams. Engineers own the platform end-to-end: code, Git, local dev, workspace forks, code review, CI/CD, AI coding tools, infrastructure as code. Non-developers consume the result through auto-generated UIs, apps and run-only workspace roles.

MakeMake

Anyone in the business. The Free plan already includes the no-code visual workflow builder, routers and filters and the app catalog, so dragging modules onto a canvas and mapping fields between them needs no engineer, no infrastructure and no deploy. For connecting two SaaS tools this is genuinely the faster path of the two.

Working as a team

WindmillWindmill

Everything the platform manages can be a file in Git, so the usual team mechanics apply: branches, pull requests, review, rollback. Permissions run through RBAC, groups and folders. Self-hosted Community Edition allows up to 50 users and a maximum of 4 groups; unlimited groups and granular permissions are Enterprise only.

MakeMake

Sharing is a plan boundary. Per the pricing page, teams and team roles, plus creating and sharing scenario templates, start on the Teams plan. Role-based access that controls who can build and change what is listed on the enterprise page.

Who ends up maintaining it

WindmillWindmill

The same people who maintain the rest of your code. An automation is a script with tests, a diff and an owner, which is why it survives the author leaving.

MakeMake

Whoever built it, usually in the canvas itself. A scenario can be exported as a blueprint JSON file for backup or reuse, but that file carries modules, settings and mapped values rather than reviewable logic, and an imported blueprint has to be under 2 MB.

03 · Build experience

How do you build on each platform?

Make is canvas-first: you configure a scenario, and code is a narrow escape hatch, capped at 300 milliseconds and 5,000 characters with no libraries and no HTTP. Windmill is code-first: the step is the code, in a real runtime you size, with a local dev loop, package imports and whole-workspace Git sync. As AI writes more of the automation, that difference turns practical: a diff in a Python file is reviewable, testable and revertible in a way a changed field mapping is not.

Building on Windmill

On Windmill, every step of a flow is a script. Compose them visually as a DAG with branches, loops and approval steps, in any of the 20+ supported languages.

Authoring

WindmillWindmill

Write scripts in 20+ languages in a dedicated script editor. Windmill parses the function signature to generate the input UI, the JSON schema and the argument types. Each script is a standalone primitive with its own UI, API endpoint and scheduler, no wrapper required. Flows compose scripts either visually in the flow editor or in full code with workflows as code in Python or TypeScript.

MakeMake

Build a scenario on a canvas: add modules from the app catalog, map fields between them, and branch with routers and filters. Make's own definition is that a scenario "defines how different apps communicate and work together in ways they wouldn't normally be able to". Every module run is metered, with two documented exceptions: the Router module and the error-handler modules (Rollback, Break, Resume, Commit, Ignore) consume no credits.

Code steps and their limits

WindmillWindmill

There is no distinction between a code step and a normal step: every step is code, running in a real runtime on a worker you size. Timeouts are configurable at the instance level and per flow step, and memory and concurrency are configuration rather than a plan tier. Long-running jobs, heavy dependencies and native extensions are ordinary cases.

MakeMake

The in-product code surface is custom functions, and they are deliberately small: JavaScript ES6 only, Enterprise only, no third-party libraries, no HTTP requests, no recursion and no calling another custom function, synchronous only, at most 5,000 characters, and "a single custom function can't run for more than 300 milliseconds". They extend data transformation, they do not host business logic.

Local dev & IDE

WindmillWindmill

Run and test scripts locally with the Windmill CLI. VS Code extension, native language tooling (LSP, type-checking, linting) and AI coding tools such as Claude Code and Codex work against real source files.

MakeMake

Scenario authoring happens in the browser. Access to the Make API, which the pricing page puts at 300+ REST endpoints and which can read a scenario's blueprint as JSON, starts on the Core plan. There is no local runtime to test a scenario against: a run happens on Make, and the Visual Studio Code route for building custom apps is marked deprecated in Make's developer docs.

Dependencies

WindmillWindmill

Any npm, PyPI, Go, Maven or Cargo package is a first-class import. Windmill detects the import, resolves the version and pins it in a per-script lockfile, with no install step and no restart. Private PyPI and npm registries are Enterprise only.

MakeMake

There is no package layer. Custom functions state plainly that "no 3rd party libraries are supported", so anything the catalog does not already cover is reached through an HTTP module or a custom app you declare in JSON against a public API.

Resources & secrets

WindmillWindmill

Resources (typed JSON for credentials, connection info, configs) and Variables are first-class and reusable across scripts, flows and apps, encrypted at rest and scoped by folders and groups. External secret backends (Vault, Azure Key Vault, AWS Secrets Manager) are Enterprise only.

MakeMake

Connections are held by Make and authorized once through the app, which is a real convenience: you never handle the token. Exported blueprints deliberately leave them out, so anyone importing one sets up their own connections afterwards. Custom variables start on the Pro plan.

Git & CI

WindmillWindmill

Scripts, flows, apps, resources, variables, schedules, folders, groups and permissions are all files in Git, deployed through the CLI and Git sync. Internal tooling runs like application code: pull requests, reviews, rollbacks, CI/CD. Git sync is free for up to 2 users; beyond that is Enterprise only.

MakeMake

No Git sync for scenarios. The closest equivalent is the blueprint: export it from the three-dot menu or read it through the API, then import it elsewhere. That gives you a file to keep, but the diff is of Make module references, mappers and designer coordinates rather than of the logic, and re-exporting is a manual step after every change.

AI while authoring

WindmillWindmill

Because every script and flow is a real file, coding agents operate on them directly, and what they produce lands in a pull request like any other change. Windmill also has an in-product AI builder for generating and editing scripts and flows.

MakeMake

Make now points AI at the parts of the product that are text. Its custom apps documentation lists three ways to build an app and recommends an AI coding agent ahead of the Make web interface, with the Visual Studio Code route marked deprecated.

WindmillWindmill

The logic is an ordinary Python function in a file. Windmill reads the signature to generate the input form, the JSON schema and the webhook contract, resolves requests into a per-script lockfile, and runs the same file locally through the CLI. The flow definition only wires steps together: the step code stands on its own and can also run as an API endpoint or a scheduled job with no flow around it.

import requests
import wmill

def main(email: str, company_domain: str, plan: str = "free"):
api = wmill.get_resource("f/crm/internal_api")

company = requests.get(
f"{api['base_url']}/companies/{company_domain}",
headers={"Authorization": f"Bearer {api['token']}"},
timeout=30,
).json()

if company.get("employees", 0) < 50:
return {"routed": False, "email": email}

return {
"routed": True,
"email": email,
"company": company["name"],
"employees": company["employees"],
"plan": plan,
}
MakeMake

A scenario is built on a canvas, so there is no source file to show for it. Where Make does have a text format is the custom app: a module is declared as JSON, with a communication block that templates the HTTP request and a mappable-parameters block that defines the fields a builder fills in. These two snippets are taken from Make's own custom apps documentation.

{
"url": "/api/users/create",
"body": {
"name": "{{parameters.name}}",
"email": "{{lower(parameters.email)}}"
},
"method": "POST",
"response": {
"output": {
"id": "{{body.id}}"
}
}
}
04 · Integrations

How does the platform integrate with your existing stack?

Make has the catalog: 3,500+ apps with maintained modules and credentials it holds for you, which no code-first platform can match on breadth. Windmill trades the catalog for the package ecosystems: any npm, PyPI, Go or Maven library is an import away, so the integration you need is whatever the vendor publishes an SDK for.

Adding an integration on Windmill

Type import stripe in the script editor and run. Windmill detects the import, resolves the version and pins it in a per-script lockfile. No venv, no install step, no restart: a new integration is a new import.

Connecting out

WindmillWindmill

Any npm, PyPI, Go or Maven package is a first-class import with automatic dependency resolution and no plugin layer in between: you call the vendor's real SDK with full type inference in the editor. 50+ pre-built resource types cover common databases (Postgres, Snowflake, BigQuery), SaaS (Slack, Stripe, GitHub, Notion, OpenAI) and infrastructure (S3, Redis, Kafka). A community Hub holds reusable scripts and flows.

MakeMake

This is where Make wins outright. The pricing page puts the catalog at 3,500+ apps, and Make's app documentation splits them into verified apps that Make builds and supports, custom apps built by users, community apps and built-in apps. Enterprise adds complex applications that Make names as Workday finance modules, Coupa, ServiceNow, Greenhouse and Infor M3. Nothing in a code-first platform matches the time-to-first-working-automation on a long-tail SaaS tool Make already supports.

Receiving events

WindmillWindmill

Native triggers for HTTP, cron, Kafka, NATS, Postgres CDC, SQS, MQTT, SMTP, WebSocket, GCP Pub/Sub and Azure Event Grid. Every script and flow also gets an HTTP endpoint and a webhook URL for free. Postgres, WebSocket and MQTT triggers are self-hosted; Kafka, NATS, SQS, GCP and Azure triggers are Enterprise only.

MakeMake

Scenarios run on a schedule (interval, once, daily, weekdays, weekly, monthly, specific dates or on demand), and an "Immediately" option exists for some triggers only. The minimum interval is a plan boundary: 15 minutes on Free, with "more control with scheduled scenarios, down to the minute" starting on Core. Webhooks are supported, with a maximum payload of 5 MB regardless of tier.

Extending

WindmillWindmill

A new integration is a script with a new import: save and run, no restart and no image rebuild, in the web editor, the CLI or Git sync. Custom logic can be exposed as a typed script, packaged as a resource type for shared use, or published to a private workspace Hub (Enterprise only).

MakeMake

Build a custom app to reach anything with a public API. A module is declared as JSON: a communication block that templates the request and response, and a mappable-parameters block that defines the fields a builder fills in. For one-off calls inside a scenario there is the HTTP module, and for transformations, Enterprise custom functions.

AI clients and MCP

WindmillWindmill

Windmill works in both directions. It acts as an MCP server so Claude, Cursor or any MCP client can trigger your scripts and flows and inspect jobs, resources, variables, schedules and workers. It is also an MCP client: an AI session or an agent step can use external MCP servers, or Windmill scripts, as tools, with the tool schema generated from each script's typed signature.

MakeMake

Make also works in both directions. Its hosted MCP server at mcp.make.com/v2 runs over stateless Streamable HTTP: scenario-run tools are available on all plans, management tools require a paid plan, and a run call that exceeds 25 seconds over OAuth or 40 seconds with an API key returns an execution id while the scenario keeps running for up to 40 minutes. In the other direction, a Make AI agent can take module tools, whole scenarios or external MCP servers as its tools.

05 · Migration & lock-in

How hard to get in, and how hard to get out?

Make is far faster to get into, and that matters more than it sounds: a working automation this afternoon beats a better one next sprint. Windmill is far cheaper to get out of. Step logic is standard code that runs anywhere, the CLI exports the workspace as files, and the runtime itself is open source and self-hostable.

Getting in

WindmillWindmill

Paste a function body into the script editor: Windmill infers the arguments, generates a UI and handles the dependencies. There is no DSL to learn, but there is code to write, so the first automation takes longer than it would on Make. Triggers, schedules, variables and apps migrate one at a time.

MakeMake

Minutes, and no infrastructure. Pick the trigger, add modules, map the fields, turn the scenario on. Starting from someone else's work is easy too: blueprints import from a JSON file or the clipboard, and creating and sharing scenario templates is a Teams plan feature. If your automation is two SaaS apps and a filter, Make will get you there first.

Getting out

WindmillWindmill

Step logic is already standard code (TypeScript, Python, Go, Bash, SQL) that runs anywhere, and the CLI exports the whole workspace as plain files. What you lose by leaving Windmill is the runtime, not the step code. You can also keep the runtime and just move it: the core is AGPLv3 and self-hostable.

MakeMake

Better than nothing, and still not portable. A blueprint export gives you a JSON file, but its contents are Make's own structures: a flow array where each entry names a module type by URI, with its mapper, parameters and designer coordinates in metadata. Nothing in it runs outside Make, and connections are excluded, so a move means rebuilding each module, mapping and filter on the new platform.

The usual reason teams move

WindmillWindmill

Volume, control or review. Credit billing is predictable until an automation starts touching thousands of rows, since most module actions consume one credit each; a code-first platform on workers you own prices that differently. Teams also move when the automation becomes load-bearing enough to need tests, code review and an owner.

MakeMake

Make is often the right place to stay. Low-volume, broad-catalog, non-developer automation is what it is built for, and replacing it with code you have to maintain is a real cost. The migration case is specific: high volume, logic that outgrew what a 300-millisecond custom function can hold, or a requirement that the automation run on your own infrastructure.

06 · Enterprise requirements

Audit logs, observability, security, performance

Both cover the enterprise basics, and both paywall them: role-based access and audit logs are Enterprise on Make, while uncapped SSO, SAML, SCIM and the SOC 2 Type II report are Enterprise on Windmill. The structural difference is where the work runs. Make executes on Make's infrastructure, with plan-tier ceilings on run duration, scheduling frequency and data transfer. Windmill executes on workers you own and size, so latency and throughput are an infrastructure decision rather than a pricing one.

Observability

WindmillWindmill

Real-time streaming logs, per-run inputs, outputs and duration, and a trace ID on every job. Job run details are retained up to 30 days on self-hosted Community Edition and 60 days on cloud, unlimited on Enterprise. Queue metrics, Prometheus metrics, OpenTelemetry tracing and service logs on S3 are Enterprise only.

MakeMake

Every run is visible in the scenario's execution history. Full-text execution log search starts on the Pro plan. Make's security page puts default log retention at 30 days, with longer storage for Enterprise customers, and the enterprise page adds real-time analytics and Make Grid, "a live view of every automation and agent across the company".

Audit logs

WindmillWindmill

A full trail of who ran, edited and deployed what, with the actor, timestamp and payload. Cloud Team retains 7 days. Self-hosted Community Edition does not include audit logs, and unlimited retention is Enterprise only.

MakeMake

Audit logs that record changes are listed under governance on Make's enterprise page, alongside role-based access and scenario tagging: Enterprise only.

Security & compliance

WindmillWindmill

RBAC with groups and folders, SSO for up to 10 users, encrypted secrets at rest and sandboxed script execution in open source. Uncapped SSO, SAML and SCIM with group sync, custom OAuth, instance-level roles, service accounts and the SOC 2 Type II report are Enterprise only.

MakeMake

Make's security page lists GDPR, SOC 2 Type II and SOC 3, an ISO 27001 certified information security program, AES-256 full-disk encryption at rest with AWS KMS, and TLS 1.2 and 1.3 in transit. Sign-in is supported with Google, Facebook and GitHub; using your own SSO implementation is Enterprise only.

Isolation & tenancy

WindmillWindmill

Multiple isolated workspaces on the same instance, each with their own users, resources, secrets and access controls, plus worker groups to pin sensitive jobs to specific machines. Self-hosted Community Edition is capped at 3 workspaces; unlimited is Enterprise only.

MakeMake

Scenarios are organized under an organization, with teams and team roles from the Teams plan up. Execution always happens on Make's infrastructure: AWS EC2 private instances across two zones, with the Enterprise platform running in a separately managed AWS environment isolated from self-service customers.

Performance & limits

WindmillWindmill

Roughly 10ms cold starts on a queue-based worker pool you scale yourself. Dedicated-worker mode keeps runtimes and dependencies pre-warmed, and concurrency limits cap how many jobs a script runs at once. Both ship on the cloud plans; on self-hosted they are Enterprise only, as are autoscaling and step priority. Otherwise throughput is a function of the hardware you give the workers.

MakeMake

Limits are plan-shaped. A run that goes past 45 minutes ends with an ExecutionInterruptedError and leaves the remaining bundles unprocessed, and that ceiling is 10 minutes on the Free subscription. Data transfer is proportional to credits, at 5 GB per 10,000 credits licensed per month, and running out of it raises a DataSizeLimitExceededError that immediately disables scenario scheduling. Maximum file size also varies by subscription. Priority scenario execution starts on the Pro plan.

No benchmark chart on this page. Our reproducible engine benchmarks cover Airflow, Prefect, Temporal, Kestra, Hatchet and Windmill, all of which you can self-host and run under identical hardware. Make cannot be self-hosted, so there is no way to put it on the same machine and we would rather publish nothing than a number we cannot reproduce.

07 · Licensing & pricing

Open source, pricing, and self-hosting?

Windmill is open source at the core and free to self-host with unlimited executions, with published per-seat and per-compute pricing above that. Make is a hosted service billed per module action, which is the simpler proposition at low volume and the expensive one at high volume. Neither is fully open source: Windmill's Enterprise features live in a separate proprietary codebase.

Open source & self-hosting

WindmillWindmill

AGPLv3 core, free to self-host with unlimited executions on Docker, Kubernetes or Fargate. Enterprise features (SSO beyond 10 users, dedicated workers, audit logs, external secret backends) ship in a separate proprietary codebase, so Windmill is not "fully" open source either. Managed cloud is available.

MakeMake

Make is a hosted service, and not open source. The pricing page lists cloud plans only, and the security page describes infrastructure on AWS EC2 private instances across two zones reachable only through a private network. The parts open to developers are the Make API, the MCP server and the custom apps format.

How you are billed

WindmillWindmill

Seats plus compute. Self-hosted Community Edition is free and unmetered. Cloud Team is 10 USD per seat per month with 10,000 executions included per seat, capped at 10 seats. Enterprise is per seat plus compute units, where one compute unit is 2 worker-gb-month. Prices are published on the pricing page with a calculator, no sales call required.

MakeMake

In credits, which replaced operations as the billing unit: 1 operation equals 1 credit by default and "most actions consume 1 credit", with some AI features consuming more. Free includes 1,000 credits a month. At the 10,000 credits a month tier with annual billing, the pricing page lists Core at 12 USD a month, Pro at 21 USD and Teams at 38 USD, with Enterprise custom. Extra credits cost 25% more than the credits included in a plan, and unused credits expire at the end of the term.

What that means for cost

WindmillWindmill

Cost tracks the infrastructure and the team, not the volume of work. An automation that fans out over 100,000 rows costs the same as one that runs once a day, provided the workers can keep up.

MakeMake

Cost tracks module actions, which is cheap and predictable at low volume and the main reason teams eventually look elsewhere. Make's own help center illustrates the upper end with a plan at 338.13 USD a month for 500,000 credits, and notes that Core now covers up to 300,000 credits a month while Pro reaches up to 8 million.

08 · Verdict

The verdict

Windmill and Make are not the same kind of product. Make models an automation as a scenario: modules drawn from a catalog of 3,500+ apps, arranged on a canvas with routers and filters, running on Make's infrastructure and billed in credits, where most actions cost one. Windmill models an automation as code: a script in TypeScript, Python, Go, Bash or SQL that is also a standalone API endpoint and scheduled job, with flows composing those scripts on workers you run.

Make is the right call if the people building the automations are not engineers, the integrations you need are in its catalog, and the volume is low enough that credit billing stays comfortable. The canvas is a genuinely good interface for seeing what a workflow does at a glance, the catalog and the managed connections remove a lot of work, and at the small end the price is hard to argue with.

Windmill fits the cases Make is not shaped for. The step is real code in a real runtime, so timeouts, memory and dependencies are your configuration rather than a plan tier, instead of logic squeezed into an Enterprise-only custom function capped at 300 milliseconds and 5,000 characters with no libraries. Everything the platform manages can live in Git, which means pull requests, review and rollback. The same runtime also carries data pipelines, AI agents and both low-code and full-code internal apps, with shared resources, auth and observability. And because nothing meters individual steps, cost tracks the infrastructure and the team rather than the number of module actions.

The AI question cuts in a specific direction. Both platforms are moving work to agents: Make has an agent app in open beta and now recommends building custom apps with an AI coding agent, and coding agents write Windmill scripts directly. The difference is what you are left holding. A generated Python file can be read in a diff, tested, and reverted by commit. A generated set of modules and field mappings is harder to review, and a blueprint JSON of module URIs and designer coordinates is a backup rather than a repository. The more of the automation an agent writes, the more that matters.

If you are deciding between the two, the honest test is your own worst automation: take the scenario that has grown to thirty modules, three routers and a custom function nobody understands, and rebuild it on each. The fastest way to judge is to spend an afternoon in each.

Frequently asked questions

Build your internal platform on Windmill

Scripts, flows, apps, and infrastructure in one place.