windmill-labs/windmill · critical

unreachable, language is not supported: {language:#?}

Error message

unreachable, language is not supported: {language:#?}

What it means

This panic is the terminal catch-all arm of the language dispatch in the Windmill worker's script executor. When the job's language enum carries a variant that the match does not handle (the match arms are kept in sync via the ADD_NEW_LANG comment convention), the worker aborts the job immediately because executing an unsupported language would produce wrong results silently.

Source

Thrown at backend/windmill-worker/src/worker.rs:6880

                lock.as_ref(),
                job_dir,
                worker_name,
                job,
                mem_peak,
                canceled_by,
                conn,
                client,
                &code,
                envs,
                occupancy_metrics,
                // The project's identity is derived from these, so the dbt
                // executor needs them even though they are already on disk.
                modules.as_ref(),
            ))
            .await
        }
        // for related places search: ADD_NEW_LANG
        _ => panic!("unreachable, language is not supported: {language:#?}"),
    };
    // Volume sync-back and lease release
    #[cfg(feature = "parquet")]
    if !volume_setup.states.is_empty() {
        // Stop lease renewal before sync-back
        volume_setup.lease_renewal.0.take().map(|h| h.abort());

        if let Some(ref vol_client) = volume_setup.client {
            if let Connection::Sql(db) = conn {
                crate::volume_oss::sync_volumes_sql_worker(
                    &volume_setup.states,
                    &volume_setup.writable,
                    vol_client,
                    db,
                    &job.workspace_id,
                    job.id,
                    worker_name,
                    conn,

View on GitHub (pinned to e474e8803c)

Solutions

  1. Check the job's `language` column value and confirm the worker binary version matches the server version (upgrade the worker to the same release).
  2. Search the codebase for ADD_NEW_LANG and add a match arm implementing the missing language in backend/windmill-worker/src/worker.rs.
  3. If the language is only supported in EE, route those jobs to workers built with the required cargo features or change the script's language to a supported one.
  4. Report the exact `{language:#?}` payload from the panic message if it comes from a stock build — it indicates an unhandled enum variant.

Example fix

// before (worker.rs dispatch)
_ => panic!("unreachable, language is not supported: {language:#?}"),
// after (add the missing arm near other ADD_NEW_LANG sites)
Language::MyNewLang => { /* execute my-new-lang payload */ }
Defensive patterns

Strategy: validation

Validate before calling

// before creating/scheduling a job, check the worker build supports the language
const SUPPORTED = ["python3", "deno", "bun", "go", "bash", "powershell", "nu", "php", "rust", "ansible"];
if (!SUPPORTED.includes(job.language)) {
  throw new Error(`language ${job.language} not supported by this worker build`);
}

Type guard

function isSupportedLanguage(lang: string): lang is typeof SUPPORTED[number] {
  return (SUPPORTED as readonly string[]).includes(lang);
}

Prevention

When it happens

Trigger: A job row reaches the worker with a `language` value not covered by the match arms — typically a newly added Language enum variant in windmill-common that the worker executor was not updated for, or a script/flow step persisted with a language only supported by EE builds or other executors (e.g. bun/ deno variants) running on a worker built without that support.

Common situations: Running a worker binary older than the server that accepted a newer language kind; mixed-version clusters during rolling upgrades; custom forks adding a language and forgetting the `// for related places search: ADD_NEW_LANG` update sites; hub scripts using niche languages dispatched to a worker that cannot handle them.

Related errors


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