windmill-labs/windmill · warning
Inline script at ${context.path.join(".")} is still an !inli
Error message
Inline script at ${context.path.join(".")} is still an !inline reference, skipping What it means
traverseAndProcessInlineScripts visits inline script definitions in a raw app and its processor decides whether content needs lock-generation. If the content is still the literal `!inline <path>` string (the earlier replacement pass did not resolve it), the processor warns with the dotted path of the script, leaves the inlineScript untouched, and skips processing for that node.
Source
Thrown at cli/src/commands/app/app_metadata.ts:649
rawDeps?: Record<string, string>,
defaultTs: "bun" | "deno" = "bun",
noStaleMessage?: boolean,
tempScriptRefs?: Record<string, string>
): Promise<{ value: any; updatedScripts: string[] }> {
const pathAssigner = newPathAssigner(defaultTs, { skipInlineScriptSuffix: getNonDottedPaths() });
const updatedScripts: string[] = [];
const processor: InlineScriptProcessor = async (inlineScript, context) => {
const language = inlineScript.language as SupportedLanguage;
const content = inlineScript.content;
if (!content || !language) {
return inlineScript;
}
// Skip if content is still an !inline reference (should have been replaced by replaceInlineScripts)
if (typeof content === "string" && content.startsWith("!inline ")) {
log.warn(
colors.yellow(
`Inline script at ${context.path.join(
"."
)} is still an !inline reference, skipping`
)
);
return inlineScript;
}
// Get the name from the parent object (following extractInlineScriptsForApps pattern)
// For normal apps, the name is stored in the component's "name" property
const scriptName = context.parentObject?.["name"] || "unnamed";
const scriptPath = `${remotePath}/${context.path.join("/")}`;
try {
let lock: string | undefined;
if (language !== "frontend") {
if (!noStaleMessage) {View on GitHub (pinned to e474e8803c)
Solutions
- Fix the !inline paths so files exist at the stated locations relative to the app root.
- Look for earlier 'Error reading inline path' warnings identifying exactly which files failed to load.
- Re-run generate-metadata from the correct directory once paths are valid.
- Manually paste the script content into the raw app definition if the inline workflow is not wanted.
Example fix
// before inlineScript.content: '!inline ./flow/Scritp.py' # path typo // after inlineScript.content: '!inline ./flow/Script.py' # then re-run generate-metadata
Defensive patterns
Strategy: validation
Validate before calling
// scan raw app definitions for leftover !inline refs before traversing
import { walk } from 'std/fs';
for await (const f of walk('./apps', { exts: ['.yaml', '.json'] })) {
if ((await Deno.readTextFile(f.path)).includes('!inline ')) {
console.error(`unresolved !inline in ${f.path}`);
}
} Type guard
null
Try / catch
if (typeof content === 'string' && content.startsWith('!inline ')) {
log.warn(`Inline script at ${context.path.join('.')} still !inline, skipping`);
return inlineScript;
} Prevention
- Ensure replaceInlineScripts ran successfully (no prior 'Error reading inline path' warnings).
- Keep !inline target paths correct and files committed to the repo.
- Run from the app root so relative paths resolve identically in replacement and traversal passes.
- Use CI file-existence checks for every `!inline` path in raw apps.
When it happens
Trigger: `wmill app generate-metadata` on a raw app whose inline scripts still contain `!inline` references after replaceInlineScripts ran: file missing/unreadable (readInlinePathSync warned), path outside traversal, or the reference was added between replacement and processing.
Common situations: Repo cloned without the referenced script files; case-mismatched paths failing on Linux CI; scripts nested in fields not traversed by the replacement pass; running generate-metadata from the wrong working directory.
Related errors
- Runnable ${runnableId} content is still an !inline reference
- Cannot push flow ${remotePath}: missing inline script file(s
- Error reading inline path: ${path}, ${error}
- 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/13f35468869524aa.
Report an issue: GitHub.