Skip to content

How Windmill’s scores are calculated

The full audit trail, recomputed from the verdict data at build time through the same code that produced the leaderboard: verdict × quality × story weight per cell, cells sum to dimension scores, dimensions blend into the PA Score. Every number on the product page is reproducible from this page alone; for why the formula looks like this, see the methodology.

verdict factors: full ×1.0 · partial ×0.6 · disputed ×0.3 · none ×0.0 · n/a excluded from both sides · cell points = weight × quality × factor · cell max = weight × 10

PA Score42/100

Agent-ready 45.8 × 0.30 = 13.74

API quality 0.0 × 0.20 = 0.00

Openness 59.0 × 0.20 = 11.80

Built-in AI 43.1 × 0.15 = 6.46

Automation 64.5 × 0.15 = 9.67

(13.74 + 0.00 + 11.80 + 6.46 + 9.67) ÷ (0.30 + 0.20 + 0.20 + 0.15 + 0.15) = 41.68 ÷ 1.00 = 41.7

Scores are stored to 1 decimal; the product page’s pills round to whole numbers for display. Each dimension below shows the stories, verdicts, and cited evidence behind its number.

Agent-ready45.8/100×0.30 of the PA blend

Outside-in: can YOUR agent reach and drive this product — API, MCP, CLI, headless runs, agent docs.

Point an agent at llms.txt or agent-oriented docsweight 2

2 (weight) × 9 (quality) × 1.0 (full) = 18.0 of 20 max

  • [probe] https://www.windmill.dev/llms.txtPROBE llms.txt: HTTP 200 at https://www.windmill.dev/llms.txt # Windmill > Windmill is an open-source and self-hostable workflow engine and developer platform to build, orchestrate,
  • [probe] https://www.windmill.dev/docs/intro.mdPROBE docs-md: HTTP 200 at https://www.windmill.dev/docs/intro.md # What is Windmill? > What is Windmill? An open-source workflow engine and developer platform to build endpoints, workf

Run the product headlessly / in CI for automationweight 2

2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max

  • [claimed-docs] https://www.windmill.dev/docs/advanced/cli.mdThe Windmill CLI, `wmill` allows you to interact with Windmill instances right from your terminal.
  • [claimed-docs] https://www.windmill.dev/docs/advanced/git_sync.mdEach time an item is deployed, Windmill will create and push a commit to the specified repository. ... Windmill can automatically deploy new commits from the repository into the workspace
  • [claimed-docs] https://www.windmill.dev/docs/triggers.mdHow do I trigger scripts and flows in Windmill? Use schedules, webhooks, emails, HTTP routes, websockets, Kafka, Postgres, NATS, SQS, MQTT, GCP, Azure Event Grid and more.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/webhooks.mdFlows additionally expose version-pinned webhook endpoints that target a specific flow version by its numeric version ID instead of the latest deployment.
  • [claimed-docs] https://www.windmill.dev/docs/advanced/self_host.mdFor small setups, use Docker and Docker Compose on a single instance. For larger and production use-cases, use our Helm chart to deploy on Kubernetes.
  • [probe] https://www.windmill.dev/docs/advanced/cliofficial CLI documented at https://www.windmill.dev/docs/advanced/cli

Plug MCP servers into this product so it can use their toolsweight 3

3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max

  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/mcp.mdWith MCP, you can connect your favorite LLMs (like Claude, Cursor, or any MCP compatible client) to Windmill, allowing you to trigger your scripts and flows from your client chat.
  • [probe] https://www.windmill.dev/docs/core_concepts/mcpofficial MCP server documented at https://www.windmill.dev/docs/core_concepts/mcp
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/ai_agents.mdAI Agents steps allow you to integrate AI agents directly into your Windmill flows. They provide an interface to connect with various AI providers and models

Connect an agent via an official MCP serverweight 3

3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max

  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/mcp.mdWith MCP, you can connect your favorite LLMs (like Claude, Cursor, or any MCP compatible client) to Windmill, allowing you to trigger your scripts and flows from your client chat.
  • [probe] https://www.windmill.dev/docs/core_concepts/mcpofficial MCP server documented at https://www.windmill.dev/docs/core_concepts/mcp

Use an official CLIweight 2

2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max

  • [claimed-docs] https://www.windmill.dev/docs/advanced/cli.mdThe Windmill CLI, `wmill` allows you to interact with Windmill instances right from your terminal.
  • [claimed-docs] https://www.windmill.dev/docs/advanced/git_sync.mdEach time an item is deployed, Windmill will create and push a commit to the specified repository. ... Windmill can automatically deploy new commits from the repository into the workspace
  • [probe] https://www.windmill.dev/docs/advanced/cliofficial CLI documented at https://www.windmill.dev/docs/advanced/cli

Drive the product through a documented public APIweight 3

3 (weight) × 5 (quality) × 0.6 (partial) = 9.0 of 30 max

  • [claimed-docs] https://www.windmill.dev/docs/advanced/cli.mdThe Windmill CLI, `wmill` allows you to interact with Windmill instances right from your terminal.
  • [claimed-docs] https://www.windmill.dev/docs/triggers.mdHow do I trigger scripts and flows in Windmill? Use schedules, webhooks, emails, HTTP routes, websockets, Kafka, Postgres, NATS, SQS, MQTT, GCP, Azure Event Grid and more.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/webhooks.mdFlows additionally expose version-pinned webhook endpoints that target a specific flow version by its numeric version ID instead of the latest deployment.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/mcp.mdWith MCP, you can connect your favorite LLMs (like Claude, Cursor, or any MCP compatible client) to Windmill, allowing you to trigger your scripts and flows from your client chat.
  • [probe] https://www.windmill.dev/openapi.jsonPROBE openapi: all candidate paths 404 (https://www.windmill.dev/openapi.json, https://www.windmill.dev/swagger.json, https://www.windmill.dev/api/openapi.json, https://www.windmill.dev/.well-known/openapi.json)
  • [probe] https://www.windmill.dev/docs/core_concepts/mcpofficial MCP server documented at https://www.windmill.dev/docs/core_concepts/mcp
  • [probe] https://www.windmill.dev/docs/advanced/cliofficial CLI documented at https://www.windmill.dev/docs/advanced/cli

Issue scoped/least-privilege API credentials for an agentweight 2

2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max

  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/user_tokens.mdTokens can be scoped to restrict access to specific resources and actions, following the principle of least privilege.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/roles_and_permissions.mdWindmill provides a roles and permissions system that allows you to control access and manage permissions within your instance and workspaces.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/mcp.mdWith MCP, you can connect your favorite LLMs (like Claude, Cursor, or any MCP compatible client) to Windmill, allowing you to trigger your scripts and flows from your client chat.
  • [probe] https://www.windmill.dev/docs/core_concepts/mcpofficial MCP server documented at https://www.windmill.dev/docs/core_concepts/mcp

Build against official SDKsweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [claimed-docs] https://www.windmill.dev/docs/advanced/cli.mdThe Windmill CLI, `wmill` allows you to interact with Windmill instances right from your terminal.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/mcp.mdWith MCP, you can connect your favorite LLMs (like Claude, Cursor, or any MCP compatible client) to Windmill, allowing you to trigger your scripts and flows from your client chat.
  • [probe] https://www.windmill.dev/openapi.jsonPROBE openapi: all candidate paths 404 (https://www.windmill.dev/openapi.json, https://www.windmill.dev/swagger.json, https://www.windmill.dev/api/openapi.json, https://www.windmill.dev/.well-known/openapi.json)
  • [probe] https://www.windmill.dev/docs/advanced/cliofficial CLI documented at https://www.windmill.dev/docs/advanced/cli

Subscribe to events via webhooksweight 2

2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max

  • [claimed-docs] https://www.windmill.dev/docs/triggers.mdHow do I trigger scripts and flows in Windmill? Use schedules, webhooks, emails, HTTP routes, websockets, Kafka, Postgres, NATS, SQS, MQTT, GCP, Azure Event Grid and more.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/webhooks.mdFlows additionally expose version-pinned webhook endpoints that target a specific flow version by its numeric version ID instead of the latest deployment.

Agent-ready = 96.2 ÷ 210 × 100 = 45.8

API quality0.0/100×0.20 of the PA blend

The programmable surface once an agent is there — machine-readable spec, interactive docs, sandbox, versioning discipline.

Explore an interactive API reference with runnable examplesweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [probe] https://www.windmill.dev/openapi.jsonPROBE openapi: all candidate paths 404 (https://www.windmill.dev/openapi.json, https://www.windmill.dev/swagger.json, https://www.windmill.dev/api/openapi.json, https://www.windmill.dev/.well-known/openapi.json)

Download a machine-readable API spec (OpenAPI or equivalent)weight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [probe] https://www.windmill.dev/openapi.jsonPROBE openapi: all candidate paths 404 (https://www.windmill.dev/openapi.json, https://www.windmill.dev/swagger.json, https://www.windmill.dev/api/openapi.json, https://www.windmill.dev/.well-known/openapi.json)

Test against a sandbox environment without touching production dataweight 1

1 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 10 max

  • [community] https://news.ycombinator.com/item?id=35920082My first questions with any new tool of this kind: Can I run/validate branch versions non-destructively as part of pre-merge checks? Can I run my scripts locally without a lot of drama? If the answer to either is no, then the tool is the moral equivalent of directly editing PHP files on the prod machine.

Rely on versioned APIs with a documented deprecation policyweight 2

2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max

  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/webhooks.mdFlows additionally expose version-pinned webhook endpoints that target a specific flow version by its numeric version ID instead of the latest deployment.
  • [probe] https://www.windmill.dev/openapi.jsonPROBE openapi: all candidate paths 404 (https://www.windmill.dev/openapi.json, https://www.windmill.dev/swagger.json, https://www.windmill.dev/api/openapi.json, https://www.windmill.dev/.well-known/openapi.json)

API quality = 0.0 ÷ 70 × 100 = 0.0

Openness59.0/100×0.20 of the PA blend

Can you leave, inspect, or self-host — data export, open source, portability.

Do everything through the API that I can do in the UIweight 2

2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max

  • [claimed-docs] https://www.windmill.dev/docs/advanced/cli.mdThe Windmill CLI, `wmill` allows you to interact with Windmill instances right from your terminal.
  • [claimed-docs] https://www.windmill.dev/docs/advanced/git_sync.mdEach time an item is deployed, Windmill will create and push a commit to the specified repository. ... Windmill can automatically deploy new commits from the repository into the workspace
  • [claimed-docs] https://www.windmill.dev/docs/triggers.mdHow do I trigger scripts and flows in Windmill? Use schedules, webhooks, emails, HTTP routes, websockets, Kafka, Postgres, NATS, SQS, MQTT, GCP, Azure Event Grid and more.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/webhooks.mdFlows additionally expose version-pinned webhook endpoints that target a specific flow version by its numeric version ID instead of the latest deployment.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/mcp.mdWith MCP, you can connect your favorite LLMs (like Claude, Cursor, or any MCP compatible client) to Windmill, allowing you to trigger your scripts and flows from your client chat.
  • [probe] https://www.windmill.dev/docs/core_concepts/mcpofficial MCP server documented at https://www.windmill.dev/docs/core_concepts/mcp
  • [probe] https://www.windmill.dev/docs/advanced/cliofficial CLI documented at https://www.windmill.dev/docs/advanced/cli
  • [probe] https://www.windmill.dev/openapi.jsonPROBE openapi: all candidate paths 404 (https://www.windmill.dev/openapi.json, https://www.windmill.dev/swagger.json, https://www.windmill.dev/api/openapi.json, https://www.windmill.dev/.well-known/openapi.json)

Export all of my data in open formats and leaveweight 3

3 (weight) × 6 (quality) × 0.6 (partial) = 10.8 of 30 max

  • [claimed-docs] https://www.windmill.dev/docs/advanced/cli.mdThe Windmill CLI, `wmill` allows you to interact with Windmill instances right from your terminal.
  • [claimed-docs] https://www.windmill.dev/docs/advanced/git_sync.mdEach time an item is deployed, Windmill will create and push a commit to the specified repository. ... Windmill can automatically deploy new commits from the repository into the workspace
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/workflows_as_code.mdWorkflows as code let you define orchestration logic directly in TypeScript or Python, using familiar language constructs like functions, conditionals, and loops, while Windmill handles checkpointing, parallelism, and fault tolerance.
  • [probe] https://www.windmill.dev/docs/advanced/cliofficial CLI documented at https://www.windmill.dev/docs/advanced/cli
  • [claimed-docs] https://www.windmill.dev/docs/advanced/self_host.mdFor small setups, use Docker and Docker Compose on a single instance. For larger and production use-cases, use our Helm chart to deploy on Kubernetes.

Read the product's source under an open licenseweight 2

2 (weight) × 7 (quality) × 1.0 (full) = 14.0 of 20 max

  • [probe] https://www.windmill.dev/llms.txtPROBE llms.txt: HTTP 200 at https://www.windmill.dev/llms.txt # Windmill > Windmill is an open-source and self-hostable workflow engine and developer platform to build, orchestrate,
  • [probe] https://www.windmill.dev/docs/intro.mdPROBE docs-md: HTTP 200 at https://www.windmill.dev/docs/intro.md # What is Windmill? > What is Windmill? An open-source workflow engine and developer platform to build endpoints, workf
  • [github] https://github.com/windmill-labs/windmillScripts are turned into sharable UIs automatically, and can be composed together into flows or used into richer apps built with low-code.
  • [community] https://news.ycombinator.com/item?id=31272793This looks pretty neat! Once the FOSS self-hostable version is out I might try it out for my local hackerspace, it seems like it might be useful for those little things that are too small to warrant standing up infrastructure at our small scale.

Self-host the core productweight 3

3 (weight) × 9 (quality) × 1.0 (full) = 27.0 of 30 max

  • [claimed-docs] https://www.windmill.dev/docs/advanced/self_host.mdFor small setups, use Docker and Docker Compose on a single instance. For larger and production use-cases, use our Helm chart to deploy on Kubernetes.
  • [community] https://news.ycombinator.com/item?id=35920082Yesterday I submitted a one-click install to Caprover, never been so easy to self host. It's really fast on Oracle's free 4vCPU, 24GB RAM machine.
  • [community] https://news.ycombinator.com/item?id=35920082Pretty easy to selfhost as I deployed it on a Alpine Linux server using Podman + Docker Compose binary. Really nice piece of software.
  • [probe] https://www.windmill.dev/llms.txtPROBE llms.txt: HTTP 200 at https://www.windmill.dev/llms.txt # Windmill > Windmill is an open-source and self-hostable workflow engine and developer platform to build, orchestrate,

Openness = 59.0 ÷ 100 × 100 = 59.0

Built-in AI43.1/100×0.15 of the PA blend

Inside-out: how agentic the product itself is for its users — built-in assistants, autonomous features.

Get AI-generated insights and suggestions from my data inside the productweight 2

2 (weight) × 4 (quality) × 0.6 (partial) = 4.8 of 20 max

  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/ai_agents.mdAI Agents steps allow you to integrate AI agents directly into your Windmill flows. They provide an interface to connect with various AI providers and models
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/ai_generation.mdReview and deploy changes: Once the AI has edited items, ask it to review the changes and it opens the Compare & Deploy page with exactly those items preselected, ready to deploy.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/mcp.mdWith MCP, you can connect your favorite LLMs (like Claude, Cursor, or any MCP compatible client) to Windmill, allowing you to trigger your scripts and flows from your client chat.

Set up automations that run autonomously in the backgroundweight 2

2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max

  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/scheduling.mdA Schedule consists of a Script or Flow, its arguments, a CRON expression that controls the execution frequency and optional Error and Recovery Handlers to deal with failed scheduled executions.
  • [claimed-docs] https://www.windmill.dev/docs/triggers.mdHow do I trigger scripts and flows in Windmill? Use schedules, webhooks, emails, HTTP routes, websockets, Kafka, Postgres, NATS, SQS, MQTT, GCP, Azure Event Grid and more.
  • [claimed-docs] https://www.windmill.dev/docs/flows/retries.mdIf defined, upon error this step will be retried with a delay and a maximum number of attempts as defined below.
  • [claimed-docs] https://www.windmill.dev/docs/flows/flow_branches.mdBranches allow to split the execution of the flow based on a condition. ... Branch all: all the branches will be executed.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/error_handling.mdA script or flow can return a top-level `wm_failure` field (string) to retag the run as a failure even though the runtime did not raise an error.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/ai_agents.mdAI Agents steps allow you to integrate AI agents directly into your Windmill flows. They provide an interface to connect with various AI providers and models
  • [community] https://news.ycombinator.com/item?id=31272793This looks really cool. Is there error handling? For example, if the email sending fails for some reason can I either select the flow to continue/log or to stop entirely? Can flows branch?

Delegate tasks to a built-in AI assistant inside the productweight 3

3 (weight) × 6 (quality) × 0.6 (partial) = 10.8 of 30 max

  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/ai_generation.mdReview and deploy changes: Once the AI has edited items, ask it to review the changes and it opens the Compare & Deploy page with exactly those items preselected, ready to deploy.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/ai_agents.mdAI Agents steps allow you to integrate AI agents directly into your Windmill flows. They provide an interface to connect with various AI providers and models

Operate the product with natural-language commandsweight 2

2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max

  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/mcp.mdWith MCP, you can connect your favorite LLMs (like Claude, Cursor, or any MCP compatible client) to Windmill, allowing you to trigger your scripts and flows from your client chat.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/ai_generation.mdReview and deploy changes: Once the AI has edited items, ask it to review the changes and it opens the Compare & Deploy page with exactly those items preselected, ready to deploy.
  • [probe] https://www.windmill.dev/docs/core_concepts/mcpofficial MCP server documented at https://www.windmill.dev/docs/core_concepts/mcp

Built-in AI = 38.8 ÷ 90 × 100 = 43.1

Automation64.5/100×0.15 of the PA blend

Depth of automation primitives — rules, scheduling, bulk operations, webhooks.

Perform bulk operations across many items at onceweight 2

2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max

  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/workflows_as_code.mdWorkflows as code let you define orchestration logic directly in TypeScript or Python, using familiar language constructs like functions, conditionals, and loops, while Windmill handles checkpointing, parallelism, and fault tolerance.
  • [claimed-docs] https://www.windmill.dev/docs/flows/flow_branches.mdBranches allow to split the execution of the flow based on a condition. ... Branch all: all the branches will be executed.
  • [claimed-docs] https://www.windmill.dev/docs/flows/retries.mdIf defined, upon error this step will be retried with a delay and a maximum number of attempts as defined below.

Define rules that trigger actions automatically on eventsweight 3

3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max

  • [claimed-docs] https://www.windmill.dev/docs/triggers.mdHow do I trigger scripts and flows in Windmill? Use schedules, webhooks, emails, HTTP routes, websockets, Kafka, Postgres, NATS, SQS, MQTT, GCP, Azure Event Grid and more.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/scheduling.mdA Schedule consists of a Script or Flow, its arguments, a CRON expression that controls the execution frequency and optional Error and Recovery Handlers to deal with failed scheduled executions.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/webhooks.mdFlows additionally expose version-pinned webhook endpoints that target a specific flow version by its numeric version ID instead of the latest deployment.
  • [claimed-docs] https://www.windmill.dev/docs/flows/retries.mdIf defined, upon error this step will be retried with a delay and a maximum number of attempts as defined below.
  • [claimed-docs] https://www.windmill.dev/docs/flows/flow_branches.mdBranches allow to split the execution of the flow based on a condition. ... Branch all: all the branches will be executed.
  • [community] https://news.ycombinator.com/item?id=31272793This looks really cool. Is there error handling? For example, if the email sending fails for some reason can I either select the flow to continue/log or to stop entirely? Can flows branch?

Schedule recurring jobs or workflowsweight 2

2 (weight) × 9 (quality) × 1.0 (full) = 18.0 of 20 max

  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/scheduling.mdA Schedule consists of a Script or Flow, its arguments, a CRON expression that controls the execution frequency and optional Error and Recovery Handlers to deal with failed scheduled executions.
  • [claimed-docs] https://www.windmill.dev/docs/triggers.mdHow do I trigger scripts and flows in Windmill? Use schedules, webhooks, emails, HTTP routes, websockets, Kafka, Postgres, NATS, SQS, MQTT, GCP, Azure Event Grid and more.
  • [claimed-docs] https://www.windmill.dev/docs/flows/retries.mdIf defined, upon error this step will be retried with a delay and a maximum number of attempts as defined below.
  • [claimed-docs] https://www.windmill.dev/docs/flows/flow_branches.mdBranches allow to split the execution of the flow based on a condition. ... Branch all: all the branches will be executed.

Version, review, and roll back my automationsweight 1

1 (weight) × 6 (quality) × 0.6 (partial) = 3.6 of 10 max

  • [claimed-docs] https://www.windmill.dev/docs/advanced/git_sync.mdEach time an item is deployed, Windmill will create and push a commit to the specified repository. ... Windmill can automatically deploy new commits from the repository into the workspace
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/webhooks.mdFlows additionally expose version-pinned webhook endpoints that target a specific flow version by its numeric version ID instead of the latest deployment.
  • [claimed-docs] https://www.windmill.dev/docs/core_concepts/ai_generation.mdReview and deploy changes: Once the AI has edited items, ask it to review the changes and it opens the Compare & Deploy page with exactly those items preselected, ready to deploy.
  • [claimed-docs] https://www.windmill.dev/docs/advanced/cli.mdThe Windmill CLI, `wmill` allows you to interact with Windmill instances right from your terminal.

Automation = 51.6 ÷ 80 × 100 = 64.5