{"record":{"id":"3726de4799c93003","repo":"windmill-labs/windmill","slug":"unreachable-language-is-not-supported-language","errorCode":null,"errorMessage":"unreachable, language is not supported: {language:#?}","messagePattern":"unreachable, language is not supported: (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"backend/windmill-worker/src/worker.rs","lineNumber":6880,"sourceCode":"                lock.as_ref(),\n                job_dir,\n                worker_name,\n                job,\n                mem_peak,\n                canceled_by,\n                conn,\n                client,\n                &code,\n                envs,\n                occupancy_metrics,\n                // The project's identity is derived from these, so the dbt\n                // executor needs them even though they are already on disk.\n                modules.as_ref(),\n            ))\n            .await\n        }\n        // for related places search: ADD_NEW_LANG\n        _ => panic!(\"unreachable, language is not supported: {language:#?}\"),\n    };\n    // Volume sync-back and lease release\n    #[cfg(feature = \"parquet\")]\n    if !volume_setup.states.is_empty() {\n        // Stop lease renewal before sync-back\n        volume_setup.lease_renewal.0.take().map(|h| h.abort());\n\n        if let Some(ref vol_client) = volume_setup.client {\n            if let Connection::Sql(db) = conn {\n                crate::volume_oss::sync_volumes_sql_worker(\n                    &volume_setup.states,\n                    &volume_setup.writable,\n                    vol_client,\n                    db,\n                    &job.workspace_id,\n                    job.id,\n                    worker_name,\n                    conn,","sourceCodeStart":6862,"sourceCodeEnd":6898,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/backend/windmill-worker/src/worker.rs#L6862-L6898","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Check the job's `language` column value and confirm the worker binary version matches the server version (upgrade the worker to the same release).","Search the codebase for ADD_NEW_LANG and add a match arm implementing the missing language in backend/windmill-worker/src/worker.rs.","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.","Report the exact `{language:#?}` payload from the panic message if it comes from a stock build — it indicates an unhandled enum variant."],"exampleFix":"// before (worker.rs dispatch)\n_ => panic!(\"unreachable, language is not supported: {language:#?}\"),\n// after (add the missing arm near other ADD_NEW_LANG sites)\nLanguage::MyNewLang => { /* execute my-new-lang payload */ }","handlingStrategy":"validation","validationCode":"// before creating/scheduling a job, check the worker build supports the language\nconst SUPPORTED = [\"python3\", \"deno\", \"bun\", \"go\", \"bash\", \"powershell\", \"nu\", \"php\", \"rust\", \"ansible\"];\nif (!SUPPORTED.includes(job.language)) {\n  throw new Error(`language ${job.language} not supported by this worker build`);\n}","typeGuard":"function isSupportedLanguage(lang: string): lang is typeof SUPPORTED[number] {\n  return (SUPPORTED as readonly string[]).includes(lang);\n}","tryCatchPattern":null,"preventionTips":["Keep worker and server versions identical in every deployment; upgrade workers before dispatching jobs with new languages.","When adding a Language variant, grep for ADD_NEW_LANG and update every dispatch site including worker.rs.","Pin workers that only support a language subset to queues that never receive unsupported jobs."],"tags":["rust","worker","panic","language-support","version-mismatch"],"backgroundTag":"unsupported-language-runtime","analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}