面向内部代码的开源开发者平台:API、后台任务、工作流和 UI。可自托管的替代方案,适用于 Retool、Pipedream、Superblocks,以及简化版 Temporal,提供自动生成的 UI 和自定义 UI,可将工作流和脚本作为内部应用触发。
脚本会自动转换为可共享的 UI,并可组合成工作流,或用于通过低代码构建的更丰富应用中。支持的语言:Python、TypeScript、Go、Bash、SQL、GraphQL、PowerShell、Rust 等。
立即体验 - 网站 - 文档 - *** - 中心 - 贡献者指南
Windmill 完全开源(AGPLv3 许可),Windmill Labs 提供专用实例以及商业支持和许可。
脚本参数会被自动解析并生成前端界面。
将其构建为工作流!您可以将自己的脚本或社区在WindmillHub上共享的脚本链接起来。
在脚本和工作流之上构建复杂 UI。
在 Windmill 之上构建您的整个基础设施!
//import any dependency from npm
import * as wmill from "windmill-client";
import * as cowsay from "cowsay@1.5.0";
// fill the type, or use the +Resource type to get a type-safe reference to a resource
type Postgresql = {
host: string;
port: number;
user: string;
dbname: string;
sslmode: string;
password: string;
};
export async function main(
a: number,
b: "my" | "enum",
c: Postgresql,
d = "inferred type string from default arg",
e = { nested: "object" }
//f: wmill.Base64
) {
const email = process.env["WM_EMAIL"];
// variables are permissioned and by path
let variable = await wmill.getVariable("f/company-folder/my_secret");
const lastTimeRun = await wmill.getState();
// logs are printed and always inspectable
console.log(cowsay.say({ text: "hello " + email + " " + lastTimeRun }));
await wmill.setState(Date.now());
// return is serialized as JSON
return { foo: d, variable };
}
Windmill 支持多种本地开发方式,并可与您的实例同步:
| 工具 | 描述 |
|---|---|
| 命令行工具(CLI) | 从本地文件或 GitHub 同步脚本,通过命令行运行脚本/工作流 |
| VS Code 扩展 | 直接在 VS Code / Cursor 中编辑和测试脚本与工作流,提供完整 IDE 支持 |
| Git 同步 | Windmill 与 Git 仓库之间的双向同步 |
| Claude Code | 借助 Claude 进行 AI 辅助开发,支持脚本、工作流和应用 |
您可以通过为 wmill 客户端库传递正确的环境变量,从您的实例获取资源和变量,从而在本地运行脚本。请参阅本地开发文档。
我们将 Windmill 与其他自托管工作流引擎(Airflow、Prefect 和 Temporal)进行了比较,Windmill 在以下两个基准测试中均是性能最佳的解决方案:一个包含 40 个轻量级任务的工作流,以及一个包含 10 个长时间运行任务的工作流。
所有方法和结果详见我们的基准测试页面。
详情请参阅安全文档。
作业启动后,与在节点上使用相应的运行器(Deno/Go/Python/Bash)运行相同脚本相比,没有额外开销。作业从队列中被拉取、启动,然后将结果发送回数据库所增加的延迟约为 50ms。一个典型的轻量级 Deno 作业总共耗时约 100ms。
有关详细的设置选项,请参阅自托管文档。
使用 3 个文件部署 Windmill(docker-compose.yml、Caddyfile、.env):
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
访问 http://localhost - 默认凭据:admin@windmill.dev / changeme
使用外部数据库:在 .env 中设置 DATABASE_URL 以指向您的托管 Postgres(AWS RDS、GCP Cloud SQL、Azure、Neon 等),并将数据库副本数设置为 0。
helm repo add windmill https://windmill-labs.github.io/windmill-helm-charts/
helm install windmill-chart windmill/windmill --namespace=windmill --create-namespace
社区版可免费在内部使用。如需商业再分发或托管服务,请联系 。详情参见LICENSE和Pricing。
Windmill“社区版”可通过托管于ghcr.io/windmill-labs/windmill的Docker镜像及GitHub二进制发行版获取,包含AGPLv3和Apache 2许可下的源代码文件,同时也包含非开源的专有及非公开代码与功能,这些内容受以下条款约束:Windmill Labs, Inc. 授予免费使用“社区版”所有功能的权利,除软件中设置的限制和配额外无其他限制;同时授予按原样分发社区版的权利,但未经明确协议,不得销售、转售、将Windmill作为托管服务提供、修改或以任何形式包装。
从本仓库源代码(未启用“enterprise”功能标志)编译的二进制文件遵循https://github.com/windmill-labs/windmill/blob/main/LICENSE-AGPL%E8%AE%B8%E5%8F%AF%E6%9D%A1%E6%AC%BE%EF%BC%8C%E4%B8%BA%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6%E3%80%82
如需将Windmill的任何部分作为产品功能直接重新暴露给您的用户(嵌入的公共Windmill“应用”除外),或在“Windmill社区版”基础上构建商业销售的功能或将其嵌入可分发产品或二进制文件中,您必须获得商业许可。如有任何问题,请联系 。如需对从本仓库源代码(未启用“enterprise”功能标志)编译的二进制文件执行上述操作,您必须遵守AGPLv3许可条款,或从Windmill Labs, Inc.获得商业许可。
在组织内部按原样使用Windmill“社区版”,或按原样使用其API,无需商业许可。
| 环境变量名称 | 默认值 | 描述 | 适用组件(API服务器/工作器/全部) |
|---|---|---|---|
| DATABASE_URL | Postgres数据库URL。 | 全部 | |
| WORKER_GROUP | default | 工作器所属的工作组,工作器将从中拉取配置 | 工作器 |
| MODE | standalone | 二进制文件的运行模式。可能的值:standalone(独立模式)、worker(工作器模式)、server(服务器模式)、agent(代理模式) | 全部 |
| METRICS_ADDR | None | (仅企业版)用于在 /metrics 路径暴露Prometheus指标的套接字地址。设置为 "true" 可在8001端口暴露指标 | 全部 |
| JSON_FMT | false | 以JSON格式输出日志,而非logfmt格式 | 全部 |
| BASE_URL | http://localhost:8000 | 公开访问您实例的基础URL。如有实例设置,将覆盖此值 | 服务器 |
| ZOMBIE_JOB_TIMEOUT | 30 | 如果工作器未发送任务处理心跳,任务被判定为僵尸任务的超时时间(服务器每30秒检查一次僵尸任务) | 服务器 |
| RESTART_ZOMBIE_JOBS | true | 若为true,僵尸任务将被重启(使用相同UUID原地重启并保留部分日志);若为false,僵尸任务将标记为失败 | 服务器 |
| NATIVE_MODE | false | 启用原生模式:设置NUM_WORKERS=8,拒绝非原生任务(nativets、postgresql、mysql等) | 工作器 |
| SLEEP_QUEUE | 50 | 数据库中最后一次检查新任务后休眠的毫秒数。该值会乘以NUM_WORKERS,因此对于单个工作器实例,平均每SLEEP_QUEUE毫秒拉取一次任务 | 工作器 |
| KEEP_JOB_DIR | false | 任务完成后保留任务目录。用于调试。 | 工作器 |
| LICENSE_KEY (EE only) | None | Windmill企业版启动时检查的许可证密钥 | 工作器 |
| SLACK_SIGNING_SECRET | None | Slack应用的签名密钥。参见Slack文档 | 服务器 |
| COOKIE_DOMAIN | None | Cookie的域名。若未设置,浏览器将根据完整源自动设置Cookie | 服务器 |
| DENO_PATH | /usr/bin/deno | deno二进制文件的路径。 | 工作器 |
| PYTHON_PATH | 若不想使用uv管理Python,可指定Python二进制文件的路径 | 工作器 | |
| GO_PATH | /usr/bin/go | Go二进制文件的路径。 | 工作器 |
| GOPRIVATE | 用于私有Go模块的GOPRIVATE环境变量 | 工作器 | |
| GOPROXY | 要使用的GOPROXY环境变量 | 工作器 | |
| NETRC | 用于私有Go仓库的netrc内容 | 工作器 | |
| PY_CONCURRENT_DOWNLOADS | 20 | 设置Windmill在任何时候执行的Python下载的最大并发数 | 工作器 |
| PATH | None | PATH环境变量,通常继承自系统 | 工作器 |
| HOME | None | 用于Go和Bash的主目录,通常继承自系统 | 工作器 |
| DATABASE_CONNECTIONS | 50(服务器)/3(工作器) | 数据库连接池中的最大连接数 | 全部 |
| SUPERADMIN_SECRET | None | 允许调用者以虚拟超级管理员(***)身份操作的令牌 | 服务器 |
| TIMEOUT_WAIT_RESULT | 20 | 'run_wait_result'端点的超时等待秒数 | 工作器 |
| QUEUE_LIMIT_WAIT_RESULT | None | 'run_wait_result'端点在立即拒绝请求前的最大队列任务数。优先级高于查询参数。若未指定,则无限制 | 工作器 |
| DENO_AUTH_TOKENS | None | 传递给工作器的自定义DENO_AUTH_TOKENS,用于允许使用私有模块 | 工作器 |
| DISABLE_RESPONSE_LOGS | false | 禁用响应日志 | 服务器 |
| CREATE_WORKSPACE_REQUIRE_SUPERADMIN | true | 若为true,仅超级管理员可创建新工作区 | 服务器 |
| MIN_FREE_DISK_SPACE_MB | *** | 工作器的最小可用磁盘空间(MB)。若工作器可用空间低于此值,将发送严重警报 | 工作器 |
| RUN_UPDATE_CA_CERTIFICATE_AT_START | false | 若为true,在启动时先运行CA证书更新命令,再进行其他初始化 | 全部 |
| RUN_UPDATE_CA_CERTIFICATE_PATH | /usr/sbin/update-ca-certificates | 当RUN_UPDATE_CA_CERTIFICATE_AT_START为true时,运行CA证书更新命令/脚本的路径 | 全部 |
我们建议使用Nix。所有选项详见./frontend/README_DEV.md。
使用本地前端(热重载)连接后端:
cd frontend
npm install
npm run generate-backend-client # 或在Mac上使用 generate-backend-client-mac
npm run dev
Windmill可通过 http://localhost/ 访问
所有运行选项详见./frontend/README_DEV.md文件。
start-dev-db.sh 脚本启动本地Postgres数据库(例如),数据库将通过 postgres://postgres:changeme@localhost:5432/windmill 可用。然后使用以下命令运行迁移:cargo install sqlx-cli
env DATABASE_URL= sqlx migrate run
这也将避免sqlx query! 宏的编译时问题。
2. (可选,仅Linux)安装https://github.com/google/nsjail%E5%B9%B6%E7%A1%AE%E4%BF%9D%E5%85%B6%E5%9C%A8PATH%E4%B8%AD%E5%8F%AF%E8%AE%BF%E9%97%AE
3. 安装bun、deno和python3(以及您想使用的任何语言),确保二进制文件位于 /usr/bin/bun、/usr/bin/deno 和 /usr/local/bin/python3,或设置相应的环境变量。
4. (可选)安装lld链接器
5. 进入 frontend/ 目录:
npm install、npm run generate-backend-client,然后执行 REMOTE=http://localhost:8000 npm run devexport NODE_OPTIONS="--max-old-space-size=4096"mkdir frontend/build 创建空的 frontend/build 文件夹backend/ 目录:
env DATABASE_URL= RUST_LOG=info cargo runcargo run --features python 启用Python执行器。http://localhost:3000 访问© 2023-2026 Windmill Labs, Inc.
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务