windmill-labs/windmill · warning
This command is deprecated. Use "wmill generate-metadata" in
Error message
This command is deprecated. Use "wmill generate-metadata" instead.
What it means
The `wmill app generate-locks` command is deprecated. Running it logs this warning and transparently delegates to the unified `generateLocksCommand` implementation, which is now exposed as `wmill generate-metadata`. Behavior is unchanged; only the command name moved.
Source
Thrown at cli/src/commands/app/app.ts:458
.command("bundle", bundleCommand)
.command("new", newCommand)
.command("generate-agents", generateAgentsCommand)
.command(
"generate-locks",
'DEPRECATED: re-generate app lockfiles. Use "wmill generate-metadata" instead.'
)
// Deprecated compatibility command. Keep it working for older repos, but
// exclude it from generated system prompt docs.
// @deprecated use `wmill generate-metadata`
.arguments("[app_folder:string]")
.option("--yes", "Skip confirmation prompt")
.option("--dry-run", "Perform a dry run without making changes")
.option(
"--default-ts <runtime:string>",
"Default TypeScript runtime (bun or deno)"
)
.action(async (opts: any, appFolder: string | undefined) => {
log.warn(
colors.yellow('This command is deprecated. Use "wmill generate-metadata" instead.')
);
const { generateLocksCommand } = await import("./app_metadata.ts");
await generateLocksCommand(opts, appFolder);
})
.command(
"set-permissioned-as",
"Set the on_behalf_of_email for an app (requires admin or wm_deployers group)"
)
.arguments("<path:string> <email:string>")
.action((async (opts: any, appPath: string, email: string) => {
const workspace = await resolveWorkspace(opts);
await requireLogin(opts);
const { lookupUsernameByEmail } = await import("../../core/permissioned_as.ts");
const cache = new Map<string, { username: string; email: string }>();
const username = await lookupUsernameByEmail(workspace.workspaceId, email, cache);
View on GitHub (pinned to e474e8803c)
Solutions
- Replace the command with `wmill generate-metadata` (same options).
- Update CI pipelines and docs to the new command name.
- The warning is harmless — the command still works via delegation — but switch before the deprecated alias is removed.
Example fix
// before wmill app generate-locks --default-ts bun // after wmill generate-metadata --default-ts bun
Defensive patterns
Strategy: validation
Validate before calling
#!/bin/bash
# fail CI if the deprecated alias is used
grep -RInE 'wmill +app +generate-locks' .github/ scripts/ && { echo 'use: wmill generate-metadata'; exit 1; } || true Type guard
null
Try / catch
null
Prevention
- Replace `wmill app generate-locks` with `wmill generate-metadata` in scripts and docs.
- Add a repo lint/grep check banning the deprecated command.
- Pin CLI versions and read changelogs when upgrading CI images.
- Treat the warning as a migration signal — the alias may be removed in future releases.
When it happens
Trigger: Invoking `wmill app generate-locks [folder] [--dry-run] [--default-ts bun|deno]` (or any script/CI still using the old subcommand) on a current CLI version.
Common situations: CI pipelines or docs written against older CLI versions; muscle memory from pre-unification workflow; copy-pasted scripts from older repositories.
Related errors
- This command is deprecated. Use "wmill generate-metadata" in
- This command is deprecated. Use "wmill generate-metadata" in
- ⚠️ --branch/--env is deprecated. Use --workspace instead.
- App ${appPath} not found
- Dependency generation failed: ${queueResponse.status} ${queu
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/17d6b926eb465b0d.
Report an issue: GitHub.