windmill-labs/windmill · error
Could not extract flow name from path: ${p}
Error message
Could not extract flow name from path: ${p} What it means
Thrown by pushObj when the sync path is recognized as an app (typeEnding app) but extractResourceName cannot recover the app's name from the file path. Generic guard against malformed paths: the input at fault is the local path `p`, which ends in .app but lacks a parseable name segment, so pushApp cannot determine the remote app to update.
Source
Thrown at cli/src/types.ts:245
const appName = extractResourceName(p, "app");
if (!appName) {
throw new Error(`Could not extract app name from path: ${p}`);
}
await pushApp(workspace, appName, buildFolderPath(appName, "app"), message, permissionedAsContext);
} else if (typeEnding === "raw_app") {
const rawAppName = extractResourceName(p, "raw_app");
if (!rawAppName) {
throw new Error(`Could not extract raw app name from path: ${p}`);
}
await pushRawApp(workspace, rawAppName, buildFolderPath(rawAppName, "raw_app"), message, defaultTs);
} else if (typeEnding === "folder") {
await pushFolder(workspace, p, befObj, newObj);
} else if (typeEnding === "variable") {
await pushVariable(workspace, p, befObj, newObj, plainSecrets, wsSpecific);
} else if (typeEnding === "flow") {
const flowName = extractResourceName(p, "flow");
if (!flowName) {
throw new Error(`Could not extract flow name from path: ${p}`);
}
await pushFlow(workspace, flowName, buildFolderPath(flowName, "flow"), message, permissionedAsContext);
} else if (typeEnding === "resource") {
if (!alreadySynced.includes(p)) {
alreadySynced.push(p);
await pushResource(workspace, p, befObj, newObj, originalLocalPath || p, wsSpecific, true);
}
} else if (typeEnding === "resource-type") {
await pushResourceType(workspace, p, befObj, newObj);
} else if (typeEnding === "schedule") {
await pushSchedule(workspace, p, befObj, newObj, permissionedAsContext, enabledOwnedByParent);
} else if (typeEnding === "http_trigger") {
await pushTrigger("http", workspace, p, befObj, newObj, permissionedAsContext);
} else if (typeEnding === "websocket_trigger") {
await pushTrigger("websocket", workspace, p, befObj, newObj, permissionedAsContext);
} else if (typeEnding === "kafka_trigger") {
await pushTrigger("kafka", workspace, p, befObj, newObj, permissionedAsContext);
} else if (typeEnding === "nats_trigger") {View on GitHub (pinned to e474e8803c)
Solutions
- Name the file <flowname>.flow.yaml (or use the <flowname>/flow folder layout).
- Check the path suffix for typos.
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at cli/src/types.ts:245 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/5f439f5f43d46c50.
Report an issue: GitHub.