windmill-labs/windmill · warning
No ${instanceSettingsPath} found
Error message
No ${instanceSettingsPath} found What it means
readInstanceSettings in the Windmill CLI reads instance settings from the local YAML file at instanceSettingsPath (e.g. instance_settings.yaml, optionally folder-scoped via InstanceSyncOptions). If yamlParseFile cannot read or parse the file (missing file, unreadable, invalid YAML), the catch block logs this warning instead of throwing and returns an empty array. It is a non-fatal warning so commands like `wmill settings pull --preview` still work on a fresh checkout with no local settings yet.
Source
Thrown at cli/src/core/settings.ts:515
skip_reencrypt: !reencrypt,
},
});
} else {
log.debug(`Workspace encryption key is up to date`);
}
}
export async function readInstanceSettings(opts: InstanceSyncOptions) {
let localSettings: GlobalSetting[] = [];
await checkInstanceSettingsPath(opts);
try {
localSettings = (await yamlParseFile(
instanceSettingsPath
)) as GlobalSetting[];
} catch {
log.warn(`No ${instanceSettingsPath} found`);
}
return localSettings;
}
const SENSITIVE_FIELD: string[] = ["license_key", "jwt_secret"];
async function processInstanceSettings(
settings: GlobalSetting[],
mode: "encode" | "decode"
): Promise<GlobalSetting[]> {
const encKey = process.env.WMILL_INSTANCE_LOCAL_ENCRYPTION_KEY;
if (encKey) {
const res: GlobalSetting[] = [];
for (const s of settings) {
if (SENSITIVE_FIELD.includes(s.name) && typeof s.value === "string") {
res.push(
(await processField(s, "value", encKey, mode)) as GlobalSettingView on GitHub (pinned to e474e8803c)
Solutions
- Run `wmill settings pull` once to generate instance_settings.yaml from the remote instance.
- Check the file exists at the expected path (ls instance_settings.yaml) and that the --instance-settings-folder option (if used) points to the right folder.
- Validate the YAML syntax (e.g. paste into a YAML linter) and fix parse errors.
- Fix filesystem permissions (chmod/chown) if the file exists but is unreadable.
- Ignore the warning if intentionally starting from an empty local settings set.
Example fix
// before: push without a local file wmill settings push // Warning: No instance_settings.yaml found // after: pull first, then push wmill settings pull wmill settings push
Defensive patterns
Strategy: validation
Validate before calling
import { existsSync } from "node:fs";
if (!existsSync("instance_settings.yaml")) {
console.log("no local instance settings; run `wmill settings pull` first");
} Type guard
function isGlobalSettings(v: unknown): v is GlobalSetting[] {
return Array.isArray(v) && v.every((s) => typeof s === "object" && s !== null && typeof (s as any).name === "string");
} Try / catch
try {
const settings = await readInstanceSettings(opts);
if (settings.length === 0) log.warn("local settings empty — did you forget `wmill settings pull`?");
} catch (e) {
// readInstanceSettings itself swallows the parse error; handle empty-result case instead
} Prevention
- Always run `wmill settings pull` before push/preview in a new checkout
- Commit instance_settings.yaml (with the encryption key set) to the repo
- Lint YAML files in CI before running wmill sync commands
- Double-check --instance-settings-folder values in scripts
When it happens
Trigger: Calling readInstanceSettings (directly or via localSettings / pullInstanceSettings --preview / pushInstanceSettings) when instanceSettingsPath does not exist on disk, has no read permission, or contains YAML that fails to parse.
Common situations: Running `wmill settings pull --preview` or `settings push` before ever running `wmill settings pull` (the file was never created); a typo in the --instance-settings-folder option; a teammate's .gitignore excludes the settings file; the YAML was hand-edited and broken.
Related errors
- No ${instanceConfigsPath} found
- File not found: ${filePath}
- Cannot push flow ${remotePath}: missing inline script file(s
- wmill-lock.yaml is malformed (expected an object). Refusing
- Error parsing yaml ${path}
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/e6e20ae985e71c43.
Report an issue: GitHub.