Deploy Windmill | Open-Source Retool Alternative
Self-host Windmill. Run & automate workflows, scripts, and internal tools
Windmill-Worker
Just deployed
Windmill-Server
Just deployed
Just deployed
/var/lib/postgresql/data

Deploy and Host Windmill on Railway
Deploy Windmill on Railway to get a fully self-hosted developer platform for building internal tools, workflows, and scripts. Windmill is the open-source alternative to Retool and Temporal — a code-first automation engine that turns Python, TypeScript, Go, Bash, and SQL scripts into production-ready webhooks, workflows, and UIs.
This Railway template pre-configures three services: Windmill-Server (API + web UI), Windmill-Worker (job execution engine), and PostgreSQL (state + job queue). Railway handles SSL, networking, and scaling — you focus on building scripts and flows.

Getting Started with Windmill on Railway
After deployment completes, open the public URL assigned to Windmill-Server. Log in with the default credentials [email protected] / changeme — change the password immediately from the user settings page. Create a new workspace or use the default admins workspace. Navigate to the Home tab and click + Script to write your first Python or TypeScript script. Windmill auto-generates a UI form from your script's parameters, so you can run it immediately without building a frontend.
To create a workflow, click + Flow and chain multiple scripts together with branching, error handlers, and approval steps. Schedule any script or flow as a cron job from the Schedules tab.

About Hosting Windmill
Windmill is a code-first orchestration platform built in Rust (backend) and Svelte (frontend) with 16k+ GitHub stars. It solves the problem of scattered internal scripts by providing a centralized platform where teams can write, run, schedule, and share scripts with auto-generated UIs.
Key features:
- Multi-language support — Python, TypeScript/JavaScript, Go, Bash, SQL, PHP, C#, Rust
- Auto-generated UIs — every script gets a form UI from its type signature
- Flow builder — visual editor for multi-step workflows with parallel branches and retries
- 13x faster than Airflow — Rust-based job queue with sub-second scheduling
- 58+ integrations — Google Workspace, Slack, GitHub, PostgreSQL, AWS, OpenAI, and more
- Webhook endpoints — turn any script into an HTTP API endpoint
- Approval steps — human-in-the-loop flows for sensitive operations
- Built-in IDE — browser-based code editor with LSP intellisense
Why Deploy Windmill on Railway
- One-click deploy with PostgreSQL pre-configured
- Automatic SSL and public domain — no reverse proxy setup needed
- Server and worker scale independently via Railway's container management
- Zero-maintenance database with Railway-managed PostgreSQL
- Private networking between services out of the box
Common Use Cases for Self-Hosted Windmill
- Internal tools and admin panels — auto-generate CRUD interfaces from database queries with approval workflows
- ETL and data pipelines — schedule Python/SQL scripts to transform and sync data across databases and APIs
- Webhook-driven automation — receive events from Stripe, GitHub, or Slack and trigger multi-step processing flows
- AI/LLM pipelines — chain OpenAI calls with data retrieval, processing, and notification steps
Dependencies for Windmill on Railway
- Windmill-Server —
ghcr.io/windmill-labs/windmill:latest— API server and web frontend - Windmill-Worker —
ghcr.io/windmill-labs/windmill:latest— job execution engine (same image, different MODE) - PostgreSQL — Railway-managed — stores all state, scripts, flows, schedules, and job queue
Environment Variables Reference for Windmill
| Variable | Service | Description |
|---|---|---|
DATABASE_URL | Server, Worker | PostgreSQL connection string |
MODE | Server, Worker | server or worker — determines binary behavior |
BASE_URL | Server | Public URL for the instance (used in OAuth, resume URLs) |
PORT | Server | HTTP listening port (8000) |
WORKER_GROUP | Worker | Worker group name (default for standard jobs) |
Deployment Dependencies
- Runtime: Rust binary (pre-compiled in Docker image)
- Docker image: ghcr.io/windmill-labs/windmill
- GitHub: windmill-labs/windmill
- Docs: windmill.dev/docs
Hardware Requirements for Self-Hosting Windmill
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 4 vCPU (1 server + 3 workers) |
| RAM | 2 GB | 8 GB (server 2 GB + workers 2 GB each) |
| Storage | 1 GB (app) + 1 GB (PostgreSQL) | 5 GB+ PostgreSQL for production workloads |
| Runtime | Docker | Docker Compose or Kubernetes |
Native workers (lightweight jobs) need only 0.1 CPU and 128 MB RAM. Standard workers need 1 vCPU and 2 GB RAM each.
Self-Hosting Windmill with Docker Compose
Clone the official configuration and start all services:
curl https://raw.githubusercontent.com/windmill-labs/windmill/main/docker-compose.yml -o docker-compose.yml
curl https://raw.githubusercontent.com/windmill-labs/windmill/main/Caddyfile -o Caddyfile
curl https://raw.githubusercontent.com/windmill-labs/windmill/main/.env -o .env
docker compose up -d
For production, point to an external PostgreSQL instance by editing .env:
DATABASE_URL=postgres://user:password@your-postgres-host:5432/windmill?sslmode=require
Access the UI at http://localhost and log in with [email protected] / changeme.
How Much Does Windmill Cost to Self-Host?
Windmill Community Edition is free and open-source (AGPLv3) with unlimited executions and up to 50 users. The Enterprise Edition starts at $120/month ($20/developer, $10/operator) and adds SAML/SCIM, audit logs, Kafka/NATS triggers, and priority 24/7 support. On Railway, your only cost is infrastructure — typically $5–15/month for a small deployment with server, worker, and PostgreSQL.
Windmill vs n8n: Which Automation Platform to Self-Host?
| Feature | Windmill | n8n |
|---|---|---|
| Approach | Code-first (scripts → UIs) | Visual-first (node graph) |
| Languages | Python, TS, Go, Bash, SQL, PHP, C# | JavaScript/TypeScript only |
| Auto-generated UIs | Yes (from type signatures) | No |
| Flow builder | Visual + code | Visual only |
| Integrations | 58+ OAuth + any HTTP API | 400+ pre-built nodes |
| Performance | 13x faster than Airflow (Rust) | Node.js runtime |
| License | AGPLv3 | Sustainable Use License |
Windmill suits teams that prefer writing code and need multi-language support. n8n is better for non-developers who want drag-and-drop integration building.
FAQ
What is Windmill and why should you self-host it? Windmill is an open-source developer platform that turns scripts into workflows, webhooks, and UIs. Self-hosting gives you full control over data, unlimited executions, and zero per-seat costs for the Community Edition.
What does this Railway template deploy for Windmill? Three services: Windmill-Server (API + web UI on port 8000), Windmill-Worker (job execution engine), and Railway-managed PostgreSQL. The server handles the frontend and API, while the worker executes scripts and flows.
Why does Windmill need PostgreSQL on Railway? PostgreSQL stores everything — scripts, flows, schedules, job queue, execution logs, user accounts, and workspace configuration. It's the single source of truth. Without it, Windmill has no persistent state.
How do I add more workers to Windmill on Railway?
Create a new service with the same ghcr.io/windmill-labs/windmill:latest image, set MODE=worker, WORKER_GROUP=default, and DATABASE_URL=${{Postgres.DATABASE_URL}}. Each additional worker adds parallel job execution capacity.
How do I enable OAuth/SSO login in self-hosted Windmill? Navigate to the instance settings as a superadmin and configure OAuth providers (Google, GitHub, Azure AD, GitLab). You'll need to create an OAuth app on each provider and enter the client ID and secret in Windmill's settings UI.
Can Windmill run Docker containers as workflow steps? Yes, but it requires Docker-in-Docker (DinD) which is not available on Railway. For Railway deployments, use Windmill's native script execution (Python, TypeScript, Go, Bash, SQL) instead.
Template Content
Windmill-Worker
ghcr.io/windmill-labs/windmill:latestWindmill-Server
ghcr.io/windmill-labs/windmill:latest