Skip to content
Back to skills

Windmill

ASecurity

Windmill is an open-source platform for building internal tools, workflows, and scripts. Think Retool + Temporal — visual workflows with real code (TypeScript, Python, Go, Bash, SQL). Scripts run in isolated containers with auto-generated UIs.

  • 43 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added May 30, 2026
developmenttypescriptpythongobashsqldockergitapidatabasefrontend

Works with

  • cli
  • api

Security analysis

A100/100

Scanned May 30, 2026

npx -y skills add ComeOnOliver/skillshub --skill windmill --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Windmill?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Windmill
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/comeonoliver-windmill/badge)](https://www.skillsdirectory.com/skills/comeonoliver-windmill)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# Windmill

## Overview

Windmill is an open-source platform for building internal tools, workflows, and scripts. Think Retool + Temporal — visual workflows with real code (TypeScript, Python, Go, Bash, SQL). Scripts run in isolated containers with auto-generated UIs.

## Instructions

### Step 1: Self-Host

```bash
# Quick start with Docker
docker run -d -p 8000:8000 --name windmill ghcr.io/windmill-labs/windmill:main

# Or with docker-compose (recommended for production)
curl -o docker-compose.yml https://raw.githubusercontent.com/windmill-labs/windmill/main/docker-compose.yml
docker compose up -d
```

### Step 2: Write Scripts

```typescript
// TypeScript script — auto-generates UI from type signature
export async function main(
  db_url: string,       // renders as text input
  table_name: string,   // renders as text input
  limit: number = 100,  // renders as number input with default
) {
  const client = new Client(db_url)
  const result = await client.query(`SELECT * FROM ${table_name} LIMIT $1`, [limit])
  return result.rows    // displayed as a table in the UI
}
```

```python
# Python script — same auto-UI behavior
def main(
    api_key: str,
    start_date: str,    # renders as date picker with "date" in name
    end_date: str,
) -> list[dict]:
    response = requests.get(
        "https://api.example.com/data",
        headers={"Authorization": f"Bearer {api_key}"},
        params={"start": start_date, "end": end_date},
    )
    return response.json()["results"]
```

### Step 3: Build Workflows

```yaml
# Workflows chain scripts together with branching and loops
# Visual editor or YAML definition:
# 1. Fetch data from API (TypeScript)
# 2. Transform data (Python)
# 3. Branch: if errors > threshold → alert Slack
# 4. Insert into database (SQL)
# 5. Send summary email
```

### Step 4: Build Apps (UI)

Windmill includes a drag-and-drop app builder for internal tools. Connect to scripts, display tables, forms, charts — all backed by your scripts.

## Guidelines

- Self-hosted: free community edition. Enterprise: starts at $10/user/month.
- Scripts get auto-generated UIs from function signatures — no frontend code needed.
- Supports approval steps (human-in-the-loop) for sensitive workflows.
- Better than Retool for code-first teams; better than Temporal for simpler workflows.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…