Skip to main content

cli-commands

MUST use when using the CLI, including debugging job failures and inspecting run history via `wmill job`.

Source facts

Repository
windmill-labs/windmill
Last source activity
October 2, 2026 at 17:02
Detected SKILL.md language
English
Stars
18,107
Forks
1,111

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
cli-commands
description
MUST use when using the CLI, including debugging job failures and inspecting run history via `wmill job`.
# Windmill CLI Commands The Windmill CLI (`wmill`) provides commands for managing scripts, flows, apps, and other resources. ## Global Options - `--workspace <workspace:string>` - Specify the target workspace. This overrides the default workspace. - `--debug --verbose` - Show debug/verbose logs - `--show-diffs` - Show diff informations when syncing (may show sensitive informations) - `--token <token:string>` - Specify an API token. This will override any stored token. - `--base-url <baseUrl:string>` - Specify the base URL of the API. If used, --token and --workspace are required and no local remote/workspace already set will be used. - `--config-dir <configDir:string>` - Specify a custom config directory. Overrides WMILL_CONFIG_DIR environment variable and default ~/.config location. ## Commands ### app app related commands **Options:** - `--json` - Output as JSON (for piping to jq) **Subcommands:** - `app list` - list all apps - `--json` - Output as JSON (for piping to jq) - `app get <path:string>` - get an app's details - `--json` - Output as JSON (for piping to jq) - `app push [file_path:string] [remote_path:string]` - push a local app. With no args, infers the app from the current directory and the remote path from its location relative to wmill.yaml. - `app dev [app_folder:string]` - Start a development server for building apps with live reload and hot module replacement - `--port <port:number>` - Port to run the dev server on (will find next available port if occupied) - `--host <host:string>` - Host to bind the dev server to - `--entry <entry:string>` - Entry point file (default: index.ts for Svelte/Vue, index.tsx otherwise) - `--no-open` - Don't automatically open the browser - `--recording` - Frame the app in a shell with a Record button, to capture a replayable session recording of the app under development - `app lint [app_folder:string]` - Lint a raw app folder to validate structure and buildability - `--fix` - Attempt to fix common issues (not implemented yet) - `app bundle [app_folder:string]` - Bundle a raw app folder to js/css without deploying it - `--out <dir:string>` - Directory to write bundle.js and bundle.css into (default: <app_folder>/dist) - `--no-minify` - Skip minification - `app new` - create a new raw app from a template - `--summary <summary:string>` - App summary (short description). Skips the prompt when provided. Triggers non-interactive mode. - `--path <path:string>` - App path (e.g., f/folder/my_app or u/username/my_app). Skips the prompt when provided. Triggers non-interactive mode. - `--framework <framework:string>` - Framework template: react19 | react18 | svelte5 | vue. Skips the prompt when provided. Triggers non-interactive mode. - `--datatable <datatable:string>` - Datatable to wire up. Without this flag in non-interactive mode, no datatable is configured. - `--schema <schema:string>` - Schema to use with --datatable. Created (CREATE SCHEMA IF NOT EXISTS) if it doesn't already exist. - `--overwrite` - Overwrite the target directory if it already exists, without prompting. - `--no-open-in-desktop` - Do not prompt to open the new app in Claude Desktop. - `app generate-agents [app_folder:string]` - regenerate AGENTS.md and DATATABLES.md from remote workspace - `app set-permissioned-as <path:string> <email:string>` - Set the on_behalf_of_email for an app (requires admin or wm_deployers group) ### audit View audit logs (requires admin) **Subcommands:** - `audit list` - List audit log entries - `audit get <id:string>` - Get a specific audit log entry - `--json` - Output as JSON (for piping to jq) ### config Show all available wmill.yaml configuration options **Options:** - `--json` - Output as JSON for programmatic consumption **Subcommands:** - `config migrate` - Migrate wmill.yaml from gitBranches/environments to workspaces format ### datatable datatable related commands **Subcommands:** - `datatable list` - list all datatables in the workspace - `--json` - Output as JSON (for piping to jq) - `datatable run <sql:string>` - run a SQL query on a datatable - `-n --name <name:string>` - Datatable name (default: main) - `-s --silent` - Output only the final result as JSON. Useful for scripting. - `datatable migrate` - manage datatable migrations - `datatable migrate new <name:string>` - scaffold a new migration (.up.sql / .down.sql files) - `-d --datatable <datatable:string>` - Target datatable (default: main) - `datatable migrate up` - apply all pending migrations to the main datatable (or one via --datatable) - `-d --datatable <datatable:string>` - Target datatable (default: main) - `datatable migrate down` - roll back the most recent migration on the main datatable (or one via --datatable) - `-d --datatable <datatable:string>` - Target datatable (default: main) - `datatable migrate status` - show applied and pending migrations on the main datatable (or one via --datatable) - `-d --datatable <datatable:string>` - Target datatable (default: main) - `--json` - Output as JSON (for piping to jq) - `datatable create [name:string]` - register a datatable database in the workspace (default: instance-backed 'main') so scripts can use datatable://<name> - `--resource <resource:string>` - Back the datatable with an existing postgresql resource path instead of the instance database - `--force` - Allow adding to a workspace that already has datatables (fork metadata on existing ones is not preserved) - `datatable serve` - Serve all datatables as a Postgres-wire endpoint (psql, DBeaver, pgAdmin); the client picks the datatable via the database name in its connection string - `--port <port:number>` - Port to listen on (default: first free port in 5433-5500) - `--host <host:string>` - Bind address (default: 127.0.0.1) - `--password <password:string>` - Password for Postgres clients (default: generate a random password at startup) - `datatable psql` - Start a serve listener and launch psql connected to it - `-n --name <name:string>` - Datatable to connect psql to (default: main) - `--port <port:number>` - Port the proxy listens on (default: first free port in 5433-5500) - `--host <host:string>` - Bind address for the proxy (default: 127.0.0.1) - `--password <password:string>` - Password for the temporary Postgres proxy (default: generate a random password at startup) ### dependencies workspace dependencies related commands **Alias:** `deps` **Subcommands:** - `dependencies push <file_path:string>` - Push workspace dependencies from a local file ### dev Watch local file changes and live-reload the dev page for preview. Does NOT deploy to the remote workspace — use wmill sync push for that. **Options:** - `--includes <pattern...:string>` - Filter paths given a glob pattern or path - `--proxy-port <port:number>` - Port for a localhost reverse proxy to the remote Windmill server - `--path <path:string>` - Watch a specific windmill path (e.g., u/admin/my_script or f/my_flow) - `--no-open` - Do not open the browser automatically ### digest Compute the content digest of local scripts and flows, as the `digest` and `root_digest` claims of job OIDC tokens carry it. Run from the root of a sync checkout, pulled after the deployment's dependency jobs completed: they write the lockfiles the digest covers. A flow also lists the digest of each inline step, as `<flow path>/<step id>`. **Arguments:** `<paths...:string>` **Options:** - `--json` - Output the digests as JSON ### docs Search Windmill documentation. **Arguments:** `<query:string>` **Options:** - `--json` - Output results as JSON. ### ducklake ducklake related commands **Subcommands:** - `ducklake list` - list all ducklakes in the workspace - `--json` - Output as JSON (for piping to jq) - `ducklake run <sql:string>` - run a SQL query on a ducklake - `-n --name <name:string>` - Ducklake name (default: main) - `-s --silent` - Output only the final result as JSON. Useful for scripting. ### flow flow related commands **Options:** - `--show-archived` - Enable archived flows in output - `--json` - Output as JSON (for piping to jq) **Subcommands:** - `flow list` - list all flows - `--show-archived` - Enable archived flows in output - `--json` - Output as JSON (for piping to jq) - `flow get <path:string>` - get a flow's details - `--json` - Output as JSON (for piping to jq) - `flow push <file_path:string> <remote_path:string>` - push a local flow spec. This overrides any remote versions. - `--message <message:string>` - Deployment message - `flow run <path:string>` - run a flow by path. - `-d --data <data:string>` - Inputs specified as a JSON string or a file using @<filename> or stdin using @-. A resource argument is the bare string $res:<path> as its whole value, and a variable argument is the bare string $var:<path> — not an object wrapper keyed on $res/$var, and not a plain path. - `-s --silent` - Do not ouput anything other then the final output. Useful for scripting. - `--tag <tag:string>` - Override the worker tag the run is dispatched to (e.g. to route it to dev workers instead of the flow's default tag). - `flow preview <flow_path:string>` - preview a local flow without deploying it. Runs the flow definition from local files and uses local PathScripts by default. Pass --step <id> to run only one module in isolation (resolves nested steps inside branchone/branchall/forloopflow/whileloopflow plus the special preprocessor/failure modules; supported step types: rawscript, script, flow). - `-d --data <data:string>` - Inputs specified as a JSON string or a file using @<filename> or stdin using @-. A resource argument is the bare string $res:<path> as its whole value, and a variable argument is the bare string $var:<path> — not an object wrapper keyed on $res/$var, and not a plain path. - `-s --silent` - Do not output anything other then the final output. Useful for scripting. - `--remote` - Use deployed workspace scripts for PathScript steps instead of local files. - `--step <step_id:string>` - Run only the named step instead of the whole flow. Honors --data as the step's args and --remote / local-PathScript resolution the same way the full-flow preview does. - `--tag <tag:string>` - Override the worker tag the preview is dispatched to (e.g. to route it to dev workers instead of the flow's default tag). - `flow new <flow_path:string>` - create a new empty flow - `--summary <summary:string>` - flow summary - `--description <description:string>` - flow description - `flow bootstrap <flow_path:string>` - create a new empty flow (alias for new) - `--summary <summary:string>` - flow summary - `--description <description:string>` - flow description - `flow history <path:string>` - Show version history for a flow - `--json` - Output as JSON (for piping to jq) - `flow show-version <path:string> <version:string>` - Show a specific version of a flow - `--json` - Output as JSON (for piping to jq) - `flow set-permissioned-as <path:string> <email:string>` - Set the on_behalf_of_email for a flow (requires admin or wm_deployers group) ### folder folder related commands **Options:** - `--json` - Output as JSON (for piping to jq) **Subcommands:** - `folder list` - list all folders - `--json` - Output as JSON (for piping to jq) - `folder get <name:string>` - get a folder's details - `--json` - Output as JSON (for piping to jq) - `folder new <name:string>` - create a new folder locally - `--summary <summary:string>` - folder summary - `folder push <name:string>` - push a local folder to the remote by name. This overrides any remote versions. - `folder add-missing` - create default folder.meta.yaml for all subdirectories of f/ that are missing one - `-y, --yes` - skip confirmation prompt - `folder show-rules <name:string>` - Show default_permissioned_as rules for a folder. Use --test-path to see which rule matches a given item path. - `--test-path <path:string>` - Test which rule matches this item path (e.g. f/prod/jobs/my_script) - `--json` - Output as JSON ### generate-metadata Regenerate stale local locks and script schemas and refresh wmill-lock.yaml content hashes (scripts, flows, apps). Writes local files only, not a deploy. Run it after edits that add or remove imports or change a script's arguments, so the lock, the auto-generated UI schema, and wmill-lock.yaml stay in sync. **Arguments:** `[folder:string]` **Options:** - `--yes` - Skip confirmation prompt - `--dry-run` - Show what would be updated without making changes - `--lock-only` - Re-generate only the lock files - `--schema-only` - Re-generate only script schemas (skips flows and apps) - `--skip-scripts` - Skip processing scripts - `--skip-flows` - Skip processing flows - `--skip-apps` - Skip processing apps - `--strict-folder-boundaries` - Only update items inside the specified folder (requires folder argument) - `--parallel <n:number>` - Number of items to process in parallel - `-i --includes <patterns:file[]>` - Comma separated patterns to specify which files to include - `-e --excludes <patterns:file[]>` - Comma separated patterns to specify which files to exclude **Subcommands:** - `generate-metadata rehash [folder:string]` - Refresh wmill-lock.yaml content hashes from the on-disk .lock and .script.yaml without re-resolving dependencies or hitting the backend. Use when those files are already correct and only the hashes need updating: bootstrapping missing entries or recovering from hash drift. - `--skip-scripts` - Skip processing scripts - `--skip-flows` - Skip processing flows - `--skip-apps` - Skip processing apps - `--parallel <n:number>` - Number of items to process in parallel - `-i --includes <patterns:file[]>` - Comma separated patterns to specify which files to include - `-e --excludes <patterns:file[]>` - Comma separated patterns to specify which files to exclude ### gitsync-settings Manage git-sync settings between local wmill.yaml and Windmill backend **Subcommands:** - `gitsync-settings pull` - Pull git-sync settings from Windmill backend to local wmill.yaml - `--repository <repo:string>` - Specify repository path (e.g., u/user/repo) - `--default` - Write settings to top-level defaults instead of overrides - `--replace` - Replace existing settings (non-interactive mode) - `--override` - Add branch-specific override (non-interactive mode) - `--diff` - Show differences without applying changes - `--json-output` - Output in JSON format - `--with-backend-settings <json:string>` - Use provided JSON settings instead of querying backend (for testing) - `--yes` - Skip interactive prompts and use default behavior
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub