windmill-labs/windmill · error · Error

.wmillignore is not supported anymore, switch to wmill.yaml

Error message

.wmillignore is not supported anymore, switch to wmill.yaml

What it means

The legacy .wmillignore file is no longer honored by wmill sync. To prevent silently ignoring different files than the user expects, sync throws immediately when a .wmillignore file exists, telling you to migrate to wmill.yaml.

Source

Thrown at cli/src/commands/sync/sync.ts:3105

  ) {
    whitelist = {
      approve(file: string): boolean {
        return (
          (!wmillconf.includes ||
            wmillconf.includes?.some((i) => minimatch(file, i))) &&
          (!wmillconf?.excludes ||
            wmillconf.excludes!.every((i) => !minimatch(file, i))) &&
          (!wmillconf.extraIncludes ||
            wmillconf.extraIncludes.length === 0 ||
            wmillconf.extraIncludes.some((i) => minimatch(file, i)))
        );
      },
    };
  }

  try {
    await stat(".wmillignore");
    throw Error(".wmillignore is not supported anymore, switch to wmill.yaml");
  } catch {
    //expected
  }

  // new Gitignore.default({ initialRules: ignoreContent.split("\n")}).ignoreContent).compile();

  return (p: string, isDirectory: boolean) => {
    // Without the option, `locks/` is not Windmill's: a repo that keeps its own
    // lockfiles there would otherwise see them pulled into the diff and deleted
    // as absent from a remote that never serializes shared locks.
    if (
      !wmillconf.dedupeLockfiles &&
      (p === SHARED_LOCK_DIR || p.startsWith(SHARED_LOCK_DIR + SEP))
    ) {
      return true;
    }
    const ext = wmillconf.json ? ".json" : ".yaml";
    if (!isDirectory && p.endsWith(".resource-type" + ext)) {

View on GitHub (pinned to e474e8803c)

Solutions

  1. Delete .wmillignore from the sync folder
  2. Re-express the ignore rules in wmill.yaml (the current configuration file)
  3. Re-run the sync command after migrating

Example fix

// before
.wmillignore:
  node_modules/
// after (wmill.yaml)
include:
  - "**"
exclude:
  - node_modules/**
Defensive patterns

Strategy: validation

Validate before calling

try { await Deno.stat('.wmillignore'); throw new Error('Migrate .wmillignore to wmill.yaml before running sync'); } catch (e) { if (!(e instanceof Error) || !e.message.startsWith('Migrate')) { /* file absent — ok */ } }

Type guard

async function hasLegacyIgnore(dir = '.'): Promise<boolean> { try { await Deno.stat(`${dir}/.wmillignore`); return true; } catch { return false; } }

Try / catch

try { await syncPush(); } catch (e) { if (String(e.message).includes('.wmillignore')) { console.error('Delete .wmillignore and move its rules into wmill.yaml, then retry.'); } else throw e; }

Prevention

When it happens

Trigger: Running any wmill sync command (push/pull) from a folder containing a .wmillignore file; the stat('.wmillignore') check succeeds and the error is thrown.

Common situations: Upgrading the CLI from an older version where .wmillignore worked; a repo cloned from an old template containing .wmillignore.

Related errors


AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03). Data as JSON: /api/errors/72f05742dc439f12. Report an issue: GitHub.