Refresh readme (#7779)

* Refresh readme

* Video demo product

Updated asset links in README.md.

* Local dev video

Updated the image link for the CLI Screencast in the README.
This commit is contained in:
Henri Courdent
2026-02-03 18:50:56 +01:00
committed by GitHub
parent 2e470816ed
commit 9ea7094f76
7 changed files with 75 additions and 168 deletions

243
README.md
View File

@@ -1,12 +1,14 @@
https://github.com/user-attachments/assets/aac14391-f1e4-47c3-83ab-839d347bacd8
<p align="center"> <p align="center">
<a href="https://www.windmill.dev/"><img src="./imgs/windmill-banner.png" alt="windmill.dev"></a> <a href="https://www.windmill.dev/"><img src="./imgs/windmill-banner.png" alt="windmill.dev"></a>
</p> </p>
<p align=center> <p align=center>
Open-source developer infrastructure for internal tools (APIs, background jobs, workflows and UIs). Self-hostable alternative to Retool, Pipedream, Superblocks and a simplified Temporal with autogenerated UIs and custom UIs to trigger workflows and scripts as internal apps. Open-source developer platform for internal code: APIs, background jobs, workflows and UIs. Self-hostable alternative to Retool, Pipedream, Superblocks and a simplified Temporal with autogenerated UIs and custom UIs to trigger workflows and scripts as internal apps.
<p align=center> <p align=center>
Scripts are turned into sharable UIs automatically, and can be composed together into flows or used into richer apps built with low-code. Supported script languages supported are: Python, TypeScript, Go, Bash, SQL, and GraphQL. Scripts are turned into sharable UIs automatically, and can be composed together into flows or used into richer apps built with low-code. Supported languages: Python, TypeScript, Go, Bash, SQL, GraphQL, PowerShell, Rust, and more.
</p> </p>
<p align="center"> <p align="center">
@@ -36,75 +38,58 @@ Scripts are turned into sharable UIs automatically, and can be composed together
# Windmill - Developer platform for APIs, background jobs, workflows and UIs # Windmill - Developer platform for APIs, background jobs, workflows and UIs
Windmill is <b>fully open-sourced (AGPLv3)</b> and Windmill Labs offers Windmill is fully open-sourced (AGPLv3) and Windmill Labs offers dedicated instances and commercial support and licenses.
dedicated instance and commercial support and licenses.
![Windmill Diagram](./imgs/stacks.svg) ![Windmill Diagram](./imgs/stacks.svg)
https://github.com/windmill-labs/windmill/assets/122811744/0b132cd1-ee67-4505-822f-0c7ee7104252 https://github.com/user-attachments/assets/d80de1d9-64de-4d89-aacd-6df23fa81fc4
- [Windmill - Developer platform for APIs, background jobs, workflows and UIs](#windmill---developer-platform-for-apis-background-jobs-workflows-and-uis) - [Windmill - Developer platform for APIs, background jobs, workflows and UIs](#windmill---developer-platform-for-apis-background-jobs-workflows-and-uis)
- [Main Concepts](#main-concepts) - [Main Concepts](#main-concepts)
- [Show me some actual script code](#show-me-some-actual-script-code) - [Show me some actual script code](#show-me-some-actual-script-code)
- [CLI](#cli) - [Local Development](#local-development)
- [Running scripts locally](#running-scripts-locally)
- [Stack](#stack) - [Stack](#stack)
- [Fastest Self-Hostable Workflow Engine](#fastest-self-hostable-workflow-engine) - [Fastest Self-Hostable Workflow Engine](#fastest-self-hostable-workflow-engine)
- [Security](#security) - [Security](#security)
- [Sandboxing](#sandboxing)
- [Secrets, credentials and sensitive values](#secrets-credentials-and-sensitive-values)
- [Performance](#performance) - [Performance](#performance)
- [Architecture](#architecture) - [Architecture](#architecture)
- [How to self-host](#how-to-self-host) - [How to self-host](#how-to-self-host)
- [Docker compose](#docker-compose) - [Docker compose](#docker-compose)
- [Kubernetes (k8s) and Helm charts](#kubernetes-k8s-and-helm-charts) - [Kubernetes (Helm charts)](#kubernetes-helm-charts)
- [Run from binaries](#run-from-binaries) - [Cloud providers](#cloud-providers)
- [OAuth, SSO \& SMTP](#oauth-sso--smtp) - [OAuth, SSO \& SMTP](#oauth-sso--smtp)
- [Commercial license](#commercial-license) - [License](#license)
- [Integrations](#integrations) - [Integrations](#integrations)
- [Environment Variables](#environment-variables) - [Environment Variables](#environment-variables)
- [Run a local dev setup](#run-a-local-dev-setup) - [Run a local dev setup](#run-a-local-dev-setup)
- [only Frontend](#only-frontend) - [Frontend only](#frontend-only)
- [Backend + Frontend](#backend--frontend) - [Backend + Frontend](#backend--frontend)
- [Contributors](#contributors) - [Contributors](#contributors)
- [Copyright](#copyright) - [Copyright](#copyright)
## Main Concepts ## Main Concepts
1. Define a minimal and generic script in Python, TypeScript, Go or Bash that 1. Define a minimal and generic script in Python, TypeScript, Go or Bash that solves a specific task. The code can be defined in the provided Web IDE or synchronized with your own GitHub repo (e.g. through VS Code extension): [provided Web IDE](https://www.windmill.dev/docs/code_editor) or [synchronized with your own GitHub repo](https://www.windmill.dev/docs/advanced/cli/sync) (e.g. through [VS Code](https://www.windmill.dev/docs/cli_local_dev/vscode-extension) extension):
solves a specific task. The code can be defined in the
[provided Web IDE](https://www.windmill.dev/docs/code_editor) or
[synchronized with your own GitHub repo](https://www.windmill.dev/docs/advanced/cli/sync)
(e.g. through
[VS Code](https://www.windmill.dev/docs/cli_local_dev/vscode-extension)
extension):
![Step 1](./imgs/windmill-editor.png) ![Step 1](./imgs/windmill-editor.png)
2. Your scripts parameters are automatically parsed and 2. Your scripts parameters are automatically parsed and [generate a frontend](https://www.windmill.dev/docs/core_concepts/auto_generated_uis).
[generate a frontend](https://www.windmill.dev/docs/core_concepts/auto_generated_uis).
![Step 2](./imgs/windmill-run.png) ![Step 2](./imgs/windmill-run.png)
![Step 3](./imgs/windmill-result.png) ![Step 3](./imgs/windmill-result.png)
3. Make it [flow](https://www.windmill.dev/docs/flows/flow_editor)! You can 3. Make it [flow](https://www.windmill.dev/docs/flows/flow_editor)! You can chain your scripts or scripts made by the community shared on [WindmillHub](https://hub.windmill.dev).
chain your scripts or scripts made by the community shared on
[WindmillHub](https://hub.windmill.dev).
![Step 3](./imgs/windmill-flow.png) ![Step 3](./imgs/windmill-flow.png)
4. Build [complex UIs](https://www.windmill.dev/docs/apps/app_editor) on top of 4. Build [complex UIs](https://www.windmill.dev/docs/apps/app_editor) on top of your scripts and flows.
your scripts and flows.
![Step 4](./imgs/windmill-builder.png) ![Step 4](./imgs/windmill-builder.png)
Scripts and flows can also be triggered by a Scripts and flows can be triggered by [schedules](https://www.windmill.dev/docs/core_concepts/scheduling), [webhooks](https://www.windmill.dev/docs/core_concepts/webhooks), [HTTP routes](https://www.windmill.dev/docs/core_concepts/http_routing), [Kafka](https://www.windmill.dev/docs/core_concepts/kafka_triggers), [WebSockets](https://www.windmill.dev/docs/core_concepts/websocket_triggers), [emails](https://www.windmill.dev/docs/core_concepts/email_triggers), and more.
[cron schedule](https://www.windmill.dev/docs/core_concepts/scheduling) (e.g.
'_/5 _ \* \* \*') or through
[webhooks](https://www.windmill.dev/docs/core_concepts/webhooks).
You can build your entire infra on top of Windmill! Build your entire infra on top of Windmill!
## Show me some actual script code ## Show me some actual script code
@@ -144,43 +129,31 @@ export async function main(
} }
``` ```
## CLI ## Local Development
We have a powerful CLI to interact with the windmill platform and sync your Windmill supports multiple ways to develop locally and sync with your instance:
scripts from local files, GitHub repos and to run scripts and flows on the
instance from local commands. See
[more details](https://www.windmill.dev/docs/advanced/cli).
![CLI Screencast](./cli/vhs/output/setup.gif) | Tool | Description |
|------|-------------|
| **[CLI](https://www.windmill.dev/docs/advanced/cli)** | Sync scripts from local files or GitHub, run scripts/flows from the command line |
| **[VS Code Extension](https://www.windmill.dev/docs/cli_local_dev/vscode-extension)** | Edit and test scripts & flows directly from VS Code / Cursor with full IDE support |
| **[Git Sync](https://www.windmill.dev/docs/advanced/git_sync)** | Two-way sync between Windmill and your Git repository |
| **[Claude Code](https://www.windmill.dev/docs/core_concepts/ai_generation)** | AI-assisted development with Claude for scripts, flows, and apps |
### Running scripts locally https://github.com/user-attachments/assets/c541c326-e9ae-4602-a09a-1989aaded1e9
You can run your script locally easily, you simply need to pass the right You can run scripts locally by passing the right environment variables for the `wmill` client library to fetch resources and variables from your instance. See [local development docs](https://www.windmill.dev/docs/advanced/local_development).
environment variables for the `wmill` client library to fetch resources and
variables from your instance if necessary. See more:
<https://www.windmill.dev/docs/advanced/local_development>.
To develop & test locally scripts & flows, we recommend using the Windmill VS
Code extension: <https://www.windmill.dev/docs/cli_local_dev/vscode-extension>.
## Stack ## Stack
- Postgres as the database. - **Database**: Postgres (compatible with Aurora, Cloud SQL, Neon, Azure PostgreSQL)
- Backend in Rust with the following highly-available and horizontally scalable. - **Backend**: Rust - stateless API servers and workers pulling jobs from a Postgres queue
Architecture: - **Frontend**: Svelte 5
- Stateless API backend. - **Sandboxing**: [nsjail](https://github.com/google/nsjail) and PID namespace isolation
- Workers that pull jobs from a queue in Postgres (and later, Kafka or Redis. - **Runtimes**:
Upvote [#173](#https://github.com/windmill-labs/windmill/issues/173) if - TypeScript/JavaScript: Bun (default) and Deno
interested). - Python: python3 with uv for dependency management
- Frontend in Svelte. - Go, Bash, PowerShell, PHP, Rust, C#, Java, Ansible
- Scripts executions are sandboxed using Google's
[nsjail](https://github.com/google/nsjail).
- Javascript runtime is the
[deno_core rust library](https://denolib.gitbook.io/guide/) (which itself uses
the [rusty_v8](https://github.com/denoland/rusty_v8) and hence V8 underneath).
- TypeScript runtime is Bun and deno.
- Python runtime is python3.
- Golang runtime is 1.19.1.
## Fastest Self-Hostable Workflow Engine ## Fastest Self-Hostable Workflow Engine
@@ -197,19 +170,10 @@ page.
## Security ## Security
### Sandboxing - **Sandboxing**: [nsjail](https://github.com/google/nsjail) for filesystem/resource isolation, and PID namespace isolation (enabled by default) to prevent jobs from accessing worker process memory
- **Secrets**: One encryption key per workspace for credentials stored in Windmill's K/V store. We recommend encrypting the Postgres database as well.
Windmill can use [nsjail](https://github.com/google/nsjail). It is production See [Security documentation](https://www.windmill.dev/docs/advanced/security_isolation) for details.
multi-tenant grade secure. Do not take our word for it, take
[fly.io's one](https://fly.io/blog/sandboxing-and-workload-isolation/).
### Secrets, credentials and sensitive values
There is one encryption key per workspace to encrypt the credentials and secrets
stored in Windmill's K/V store.
In addition, we strongly recommend that you encrypt the whole Postgres database.
That is what we do at <https://app.windmill.dev>.
## Performance ## Performance
@@ -229,19 +193,13 @@ back to the database is ~50ms. A typical lightweight deno job will take around
## How to self-host ## How to self-host
We only provide docker-compose setup here. For more advanced setups, like For detailed setup options, see [Self-Host documentation](https://www.windmill.dev/docs/advanced/self_host).
compiling from source or using without a postgres super user, see
[Self-Host documentation](https://www.windmill.dev/docs/advanced/self_host).
### Docker compose ### Docker compose
Windmill can be deployed using 3 files: Deploy Windmill with 3 files ([docker-compose.yml](./docker-compose.yml), [Caddyfile](./Caddyfile), [.env](./.env)):
([docker-compose.yml](./docker-compose.yml), [Caddyfile](./Caddyfile) and a
[.env](./.env)) in a single command.
Make sure Docker is started, and run: ```bash
```
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/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/Caddyfile -o Caddyfile
curl https://raw.githubusercontent.com/windmill-labs/windmill/main/.env -o .env curl https://raw.githubusercontent.com/windmill-labs/windmill/main/.env -o .env
@@ -249,86 +207,45 @@ curl https://raw.githubusercontent.com/windmill-labs/windmill/main/.env -o .env
docker compose up -d docker compose up -d
``` ```
Go to http://localhost et voilà :) Go to http://localhost - default credentials: `admin@windmill.dev` / `changeme`
The default super-admin user is: admin@windmill.dev / changeme. **Using an external database**: Set `DATABASE_URL` in `.env` to point to your managed Postgres (AWS RDS, GCP Cloud SQL, Azure, Neon, etc.) and set db replicas to 0.
From there, you can follow the setup app and create other users. ### Kubernetes (Helm charts)
More details in
[Self-Host Documention](https://www.windmill.dev/docs/advanced/self_host#docker).
### Kubernetes (k8s) and Helm charts
We publish helm charts at:
<https://github.com/windmill-labs/windmill-helm-charts>.
### Run from binaries
Each release includes the corresponding binaries for x86_64. You can simply
download the latest `windmill` binary using the following set of bash commands.
```bash ```bash
BINARY_NAME='windmill-amd64' # or windmill-ee-amd64 for the enterprise edition helm repo add windmill https://windmill-labs.github.io/windmill-helm-charts/
LATEST_RELEASE=$(curl -L -s -H 'Accept: application/json' https://github.com/windmill-labs/windmill/releases/latest) helm install windmill-chart windmill/windmill --namespace=windmill --create-namespace
LATEST_VERSION=$(echo $LATEST_RELEASE | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/')
ARTIFACT_URL="https://github.com/windmill-labs/windmill/releases/download/$LATEST_VERSION/$BINARY_NAME"
wget "$ARTIFACT_URL" -O windmill
``` ```
See [windmill-helm-charts](https://github.com/windmill-labs/windmill-helm-charts) for configuration options.
### Cloud providers
Windmill works on AWS (EKS/ECS), GCP, Azure, Ubicloud, Fly.io, Render.com, Hetzner, Digital Ocean, and others. Rule of thumb: 1 worker per 1vCPU and 1-2 GB RAM.
### OAuth, SSO & SMTP ### OAuth, SSO & SMTP
Windmill Community Edition allows to configure the OAuth, SSO (including Google Configure OAuth and SSO (Google Workspace, Microsoft/Azure, Okta) directly from the superadmin UI. [See documentation](https://www.windmill.dev/docs/misc/setup_oauth).
Workspace SSO, Microsoft/Azure and Okta) directly from the UI in the superadmin
settings. Do note that there is a limit of 10 SSO users on the community
edition.
[See documentation](https://www.windmill.dev/docs/misc/setup_oauth). ### License
### Commercial license The Community Edition is free to use internally. For commercial redistribution or managed services, contact <sales@windmill.dev>. See [LICENSE](./LICENSE) and [Pricing](https://www.windmill.dev/pricing) for details.
See the [LICENSE](https://github.com/windmill-labs/windmill/blob/main/LICENSE) The "Community Edition" of Windmill available in the docker images hosted under ghcr.io/windmill-labs/windmill and the github binary releases contains the files under the AGPLv3 and Apache 2 sources but also includes proprietary and non-public code and features which are not open source and under the following terms: Windmill Labs, Inc. grants a right to use all the features of the "Community Edition" for free without restrictions other than the limits and quotas set in the software and a right to distribute the community edition as is but not to sell, resell, serve Windmill as a managed service, modify or wrap under any form without an explicit agreement.
file for the full license text.
The "Community Edition" of Windmill available in the docker images hosted under The binary compilable from source code in this repository without the "enterprise" feature flag is open-source under the [LICENSE-AGPLv3](https://github.com/windmill-labs/windmill/blob/main/LICENSE-AGPL) License terms and conditions.
ghcr.io/windmill-labs/windmill and the github binary releases contains the files
under the AGPLv3 and Apache 2 sources but also includes proprietary and
non-public code and features which are not open source and under the following
terms: Windmill Labs, Inc. grants a right to use all the features of the
"Community Edition" for free without restrictions other than the limits and
quotas set in the software and a right to distribute the community edition as is
but not to sell, resell, serve Windmill as a managed service, modify or wrap
under any form without an explicit agreement.
The binary compilable from source code in this repository without the To [re-expose directly any Windmill parts to your users](https://www.windmill.dev/docs/misc/white_labelling) as a feature of your product, with the exception of iframed public Windmill "apps", or to build a feature on top of "Windmill Community Edition" that you sell commercially or embed in a distributable product or binary, you must get a commercial license. Contact us at <sales@windmill.dev> if you have any questions. To do the same from the binary compiled from the source code in this repository without the "enterprise" feature flag, you must comply with the AGPLv3 license terms and conditions or get a commercial license from Windmill Labs, Inc.
"enterprise" feature flag is open-source under the
[LICENSE-AGPLv3](https://github.com/windmill-labs/windmill/blob/main/LICENSE-AGPL)
License terms and conditions.
To To use Windmill "Community Edition" as is internally in your organization, or to use its APIs as is, you do NOT need a commercial license.
[re-expose directly any Windmill parts to your users](https://www.windmill.dev/docs/misc/white_labelling)
as a feature of your product, with the exception of iframed public Windmill
"apps", or to build a feature on top of "Windmill Community Edition" that you
sell commercially or embed in a distributable product or binary, you must get a
commercial license. Contact us at <sales@windmill.dev> if you have any
questions. To do the same from the binary compiled from the source code in this
repository without the "enterprise" feature flag, you must comply with the
AGPLv3 license terms and conditions or get a commercial license from Windmill
Labs, Inc.
To use Windmill "Community Edition" as is internally in your organization, or to
use its APIs as is, you do NOT need a commercial license.
### Integrations ### Integrations
In Windmill, integrations are referred to as In Windmill, integrations are referred to as [resources and resource types](https://www.windmill.dev/docs/core_concepts/resources_and_types). Each Resource has a Resource Type that defines the schema that the resource
[resources and resource types](https://www.windmill.dev/docs/core_concepts/resources_and_types).
Each Resource has a Resource Type that defines the schema that the resource
needs to implement. needs to implement.
On self-hosted instances, you might want to import all the approved resource On self-hosted instances, you might want to import all the approved resource types from [WindmillHub](https://hub.windmill.dev). A setup script will prompt you to have it being synced automatically everyday.
types from [WindmillHub](https://hub.windmill.dev). A setup script will prompt
you to have it being synced automatically everyday.
## Environment Variables ## Environment Variables
@@ -369,30 +286,20 @@ you to have it being synced automatically everyday.
## Run a local dev setup ## Run a local dev setup
Using [Nix](./frontend/README_DEV.md#nix) (Recommended). We recommend using [Nix](./frontend/README_DEV.md#nix). See [./frontend/README_DEV.md](./frontend/README_DEV.md) for all options.
See the [./frontend/README_DEV.md](./frontend/README_DEV.md) file for all ### Frontend only
running options.
### only Frontend Uses the backend of <https://app.windmill.dev> with local frontend (hot-reload):
This will use the backend of <https://app.windmill.dev> but your own frontend ```bash
with hot-code reloading. Note that you will need to use a username / password cd frontend
login due to CSRF checks using a different auth provider. npm install
npm run generate-backend-client # or generate-backend-client-mac on Mac
In the `frontend/` directory: npm run dev
1. install the dependencies with `npm install` (or `pnpm install` or `yarn`)
2. generate the windmill client:
```
npm run generate-backend-client
## on mac use
npm run generate-backend-client-mac
``` ```
3. Run your dev server with `npm run dev` Windmill available at `http://localhost/`
4. Et voilà, windmill should be available at `http://localhost/`
### Backend + Frontend ### Backend + Frontend
@@ -419,7 +326,7 @@ running options.
6. Go to `backend/`: 6. Go to `backend/`:
1. `env DATABASE_URL=<YOUR_DATABASE_URL> RUST_LOG=info cargo run` 1. `env DATABASE_URL=<YOUR_DATABASE_URL> RUST_LOG=info cargo run`
2. You can specify any feature flag you want to enable, for example `cargo run --features python` to enable the python executor. 2. You can specify any feature flag you want to enable, for example `cargo run --features python` to enable the python executor.
7. Et voilà, windmill should be available at `http://localhost:3000` 7. Windmill should be available at `http://localhost:3000`
## Contributors ## Contributors
@@ -429,4 +336,4 @@ running options.
## Copyright ## Copyright
Windmill Labs, Inc 2023 © 2023-2026 Windmill Labs, Inc.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 859 KiB

After

Width:  |  Height:  |  Size: 861 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 777 KiB

After

Width:  |  Height:  |  Size: 880 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 KiB

After

Width:  |  Height:  |  Size: 338 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 380 KiB

After

Width:  |  Height:  |  Size: 430 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 KiB

After

Width:  |  Height:  |  Size: 302 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 KiB

After

Width:  |  Height:  |  Size: 287 KiB