@windmill-labs/hub-cli
v1.1.0
Published
Windmill hub CLI
Readme
Hub CLI
Setup
You can run it directly with bunx @windmill-labs/hub-cli or install it globally with npm install -g @windmill-labs/hub-cli in which case you can run it with wmill-hub.
Create a .env file in the root of the project with the following content:
# url of your private hub
HUB_URL=https://hub.my.url
# to get a token, create a token for a superadmin user on your **Windmill instance**.
TOKEN=your_token
# (optional) enterprise license key — alternative to HUB_URL + TOKEN for pull commands
LICENSE_KEY=your_license_keyNote:
HUB_URLandTOKENare not required when usingwm-pullwith a license key.
Commands
pull
Pull scripts from your private hub and save them in the hub folder.
wmill-hub pull| Option | Alias | Description |
|---|---|---|
| --url | -u | Hub URL (defaults to HUB_URL env variable) |
| --license-key | -l | License key to validate enterprise edition (defaults to LICENSE_KEY env variable, alternative to HUB_URL + TOKEN) |
pull-resource-types
Pull resource types from your private hub.
wmill-hub pull-resource-typesTo pull resource types from the official Windmill hub:
wmill-hub pull-resource-types --url https://hub.windmill.dev| Option | Alias | Description |
|---|---|---|
| --url | -u | Hub URL (defaults to HUB_URL env variable) |
pull-flows
Pull flows from your private hub.
wmill-hub pull-flows| Option | Alias | Description |
|---|---|---|
| --url | -u | Hub URL (defaults to HUB_URL env variable) |
| --license-key | -l | License key to validate enterprise edition (defaults to LICENSE_KEY env variable, alternative to HUB_URL + TOKEN) |
wm-pull
Pull scripts from the official Windmill hub. Equivalent to pull --url https://hub.windmill.dev.
wmill-hub wm-pull| Option | Alias | Description |
|---|---|---|
| --license-key | -l | License key to validate enterprise edition (defaults to LICENSE_KEY env variable, alternative to HUB_URL + TOKEN) |
You can then run wmill-hub push to push the scripts to your private hub.
If you don't want all of them, delete the integrations you don't want before the first push.
If you want to modify them, do it directly on the hub, not in the hub folder.
To get the latest version of the official hub, run wmill-hub wm-pull again. It will not overwrite the imported scripts you modified on the hub.
push
Push scripts to your private hub.
wmill-hub push| Option | Alias | Description |
|---|---|---|
| --url | -u | Hub URL (defaults to HUB_URL env variable) |
| --dry-run | -d | Run without actually pushing (default: false) |
| --ci | -c | Run in CI mode, non-interactive (default: false) |
| --integration | -i | Push only a specific integration |
| --prune | | Disapprove hub scripts that are approved but missing locally (curated away), scoped to the pushed apps. Reversible (hidden from list/search, kept resolvable by id). With --dry-run, report only. (default: false) |
| --force-ids | | Force the local ask_id/version_id onto the target hub verbatim. Private hubs only — for CI-managed regional mirror hubs where CI is the sole writer, so every hub ends up with identical ids. (default: false) |
push-resource-types
Push resource types to your private hub.
wmill-hub push-resource-types| Option | Alias | Description |
|---|---|---|
| --url | -u | Hub URL (defaults to HUB_URL env variable) |
| --dry-run | -d | Run without actually pushing (default: false) |
| --ci | -c | Run in CI mode, non-interactive (default: false) |
push-flows
Push flows to your private hub.
wmill-hub push-flows| Option | Alias | Description |
|---|---|---|
| --url | -u | Hub URL (defaults to HUB_URL env variable) |
| --dry-run | -d | Run without actually pushing (default: false) |
| --ci | -c | Run in CI mode, non-interactive (default: false) |
list-pending
List unapproved asks on the hub that aren't yet tracked locally, writing them to pending.json. Part of the PR-gated approval flow: a scheduled job lists pending asks (e.g. scripts created through the hub UI) and opens a review PR for each, so that merging the PR is what approves the script.
wmill-hub list-pending| Option | Alias | Description |
|---|---|---|
| --url | -u | Hub URL (defaults to HUB_URL env variable) |
| --license-key | -l | License key to validate enterprise edition (defaults to LICENSE_KEY env variable) |
materialize-ask
Write the files (script.<ext> + script.json) for a single pending ask into the hub folder, in the same on-disk format as pull, so a review PR can be opened from them. Once that PR is merged and pushed, the script is approved on the hub.
wmill-hub materialize-ask --ask-id 12345| Option | Alias | Required | Description |
|---|---|---|---|
| --ask-id | | yes | The hub ask id to materialize |
| --version-id | | no | Version id to fetch (from the dispatch payload); falls back to the ask's latest version on the hub |
| --url | -u | no | Hub URL (defaults to HUB_URL env variable) |
| --license-key | -l | no | License key to validate enterprise edition |
create
Create an integration script template in the hub folder.
wmill-hub create --summary "My script summary" --language bun --kind action --app my_integrationor simply:
wmill-hub create -s "My script summary" -a my_integration| Option | Alias | Required | Description |
|---|---|---|---|
| --summary | -s | yes | Script summary |
| --app | -a | yes | Integration app name |
| --kind | -k | no | Script kind: action, trigger, approval, failure (default: action) |
| --language | -l | no | Script language (default: bun) |
Supported languages: python3, deno, bun, nativets, go, bash, powershell, postgresql, mysql, bigquery, snowflake, mssql, graphql, php.
create-flow
Create a flow template in the hub folder.
wmill-hub create-flow --summary "My flow summary" --app my_integration| Option | Alias | Required | Description |
|---|---|---|---|
| --summary | -s | yes | Flow summary |
| --app | -a | yes | Integration app name |
generate-metadata
Generate metadata (schema and dependencies) for an integration script. Requires either --integration or --path.
# Generate metadata for all scripts in an integration
wmill-hub generate-metadata --integration my_integration
# Generate metadata for a specific script
wmill-hub generate-metadata --path hub/my_integration/scripts/action/123_my_script/script.json| Option | Alias | Description |
|---|---|---|
| --integration | -i | Integration name (generates metadata for all action scripts in the integration) |
| --path | -p | Path to a specific script.json file |
