DEV Community

Alex Spinov
Alex Spinov

Posted on

Windmill Has a Free API: Open-Source Retool Alternative for Internal Tools and Workflows

Windmill is an open-source platform for building internal tools, workflows, and scripts. Write in TypeScript, Python, Go, or SQL — get auto-generated UIs, scheduling, webhooks, and a full REST API.

Why Windmill?

  • Scripts → instant APIs — any script becomes a webhook endpoint
  • Auto-generated UIs — build internal tools without frontend code
  • Workflows — visual DAG builder or code-defined flows
  • Multi-language — TypeScript, Python, Go, Bash, SQL, GraphQL
  • Free self-host — unlimited users on community edition

Quick Start

# Docker Compose
curl -O https://raw.githubusercontent.com/windmill-labs/windmill/main/docker-compose.yml
docker compose up -d

# Available at http://localhost:8000
# Default: admin@windmill.dev / changeme
Enter fullscreen mode Exit fullscreen mode

Script → Instant API

# Any script with type annotations = auto-generated API + UI

def main(
    name: str,
    count: int = 5,
    uppercase: bool = False,
) -> dict:
    """Generate greetings"""
    greeting = f"Hello, {name}!"
    if uppercase:
        greeting = greeting.upper()
    return {
        "greeting": greeting,
        "repeated": [greeting] * count,
    }
Enter fullscreen mode Exit fullscreen mode

This automatically creates:

  • REST API endpoint: POST /api/w/workspace/jobs/run_wait_result/p/path
  • Web form UI with typed inputs
  • Scheduled execution
  • Webhook trigger

REST API

BASE="http://localhost:8000/api"
TOKEN="your-token"

# Run a script and get result
curl -X POST "$BASE/w/demo/jobs/run_wait_result/p/u/admin/my_script" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "World", "count": 3}'

# Run async (get job ID)
curl -X POST "$BASE/w/demo/jobs/run/p/u/admin/my_script" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "World"}'

# Get job result
curl "$BASE/w/demo/jobs_u/completed/get_result/JOB_ID" \
  -H "Authorization: Bearer $TOKEN"

# List scripts
curl "$BASE/w/demo/scripts/list" \
  -H "Authorization: Bearer $TOKEN"

# List flows
curl "$BASE/w/demo/flows/list" \
  -H "Authorization: Bearer $TOKEN"
Enter fullscreen mode Exit fullscreen mode

Workflows (Flows)

// TypeScript flow step
export async function main(
  data: { users: Array<{email: string, name: string}> }
) {
  const results = [];
  for (const user of data.users) {
    // Each step can be a different language!
    const result = await Windmill.runScript(
      'u/admin/send_welcome_email',
      { email: user.email, name: user.name }
    );
    results.push(result);
  }
  return { processed: results.length };
}
Enter fullscreen mode Exit fullscreen mode

App Builder (Internal Tools)

Windmill provides a drag-and-drop app builder:
- Tables connected to scripts/APIs
- Forms that trigger workflows
- Charts and dashboards
- Custom CSS and components
Enter fullscreen mode Exit fullscreen mode

Key Features

Feature Details
Languages TypeScript, Python, Go, Bash, SQL
API Every script = REST endpoint
Scheduling Cron-based, with UI
Secrets Built-in vault
Resources Database connections, API keys
Apps Drag-and-drop internal tools
Approval Human-in-the-loop flows

Windmill vs Alternatives

Windmill n8n Retool
Open source Yes Yes No
Code-first Yes Visual Visual
Self-host Free Free Paid
Languages TS, Python, Go, SQL JS JS
Auto UI Yes No Manual

Resources


Need workflow automation or data tools? Check my Apify actors or email spinov001@gmail.com.

Top comments (0)