windmill-labs/windmill · error

Runnable not found: ${runnableId}

Error message

Runnable not found: ${runnableId}

What it means

Lookup miss inside the app dev server's WebSocket backend handler: a client message requested execution of a runnable by id, but runnables[runnableId] (from loadRunnables) has no entry for it. This is the sync-path handler (runAndWaitForResult); the id in the message is the faulting input. It usually means the dev server's runnable registry is stale relative to the browser app — a runnable was renamed/deleted locally, or the app preview was built against an older snapshot than the one the dev server currently serves.

Source

Thrown at cli/src/commands/app/dev.ts:1161

        );

        const { type, reqId, runnable_id, v, jobId } = message;

        // Helper to send response
        const respond = (responseType: string, result: any, error: boolean) => {
          ws.send(JSON.stringify({ type: responseType, reqId, result, error }));
        };

        // Helper to execute and wait for result
        const runAndWaitForResult = async (
          runnableId: string,
          args: any,
        ): Promise<{ uuid: string; result: any }> => {
          const runnables = await loadRunnables();
          const runnable = runnables[runnableId];

          if (!runnable) {
            throw new Error(`Runnable not found: ${runnableId}`);
          }

          const uuid = await executeRunnable(
            runnable,
            workspaceId,
            appPath,
            runnableId,
            args,
            appTempRefs,
          );
          log.info(colors.gray(`[backend] Job started: ${uuid}`));

          const result = await waitForJob(workspaceId, uuid);
          return { uuid, result };
        };

        switch (type) {
          case "backend": {

View on GitHub (pinned to e474e8803c)

Solutions

  1. Restart the wmill app dev session so loadRunnables re-scans and the preview uses the current runnable set
  2. Check the app definition for references to a runnable id that no longer exists (renamed or removed component) and fix or delete the stale reference
  3. Save/re-sync the app in the editor so the dev server's registry and the served bundle agree
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at cli/src/commands/app/dev.ts:1161 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/ae267ac9d44b035e. Report an issue: GitHub.