windmill-labs/windmill · critical
Invalid dedicated_worker format. Got {x}, expects <workspace
Error message
Invalid dedicated_worker format. Got {x}, expects <workspace_id>:<path> What it means
The dedicated_worker configuration option must be exactly '<workspace_id>:<path>' — a single colon separating workspace and script path. The worker parses it by splitting on ':' and requires exactly 2 parts; anything else is fatal and the worker sends a kill signal via killpill_tx.
Source
Thrown at backend/windmill-common/src/worker.rs:2150
tracing::info!(
"DEDICATED_WORKER set from env variable: {}",
dw.as_ref().unwrap()
);
config.dedicated_worker = dw;
}
} else {
tracing::info!(
"DEDICATED_WORKER set from config: {}",
config.dedicated_worker.as_ref().unwrap()
);
}
let dedicated_worker = config
.dedicated_worker
.map(|x| {
let splitted = x.split(':').to_owned().collect_vec();
if splitted.len() != 2 {
killpill_tx.send();
return Err(anyhow::anyhow!(
"Invalid dedicated_worker format. Got {x}, expects <workspace_id>:<path>"
));
} else {
let workspace = splitted[0];
let script_path = splitted[1];
Ok(WorkspacedPath {
workspace_id: workspace.to_string(),
path: script_path.to_string(),
})
}
})
.transpose()?;
// Parse dedicated_workers (multiple dedicated workers)
let dedicated_workers = config
.dedicated_workers
.map(|workers| {
workersView on GitHub (pinned to e474e8803c)
Solutions
- Fix the config value to exactly '<workspace_id>:<path>' with a single colon and no extra ':' characters
- Remove any URL scheme, port, or trailing segments from the value
- Restart the worker after fixing the config (the worker kills itself on this error)
Example fix
// before dedicated_worker = "https://app.windmill.dev:scripts/etl:daily" // after dedicated_worker = "workspace_u:scripts/etl/daily"
Defensive patterns
Strategy: validation
Validate before calling
let parts: Vec<&str> = value.split(':').collect();
if parts.len() != 2 {
panic!("dedicated_worker must be <workspace_id>:<path>, got: {}", value);
} Prevention
- Keep script paths free of ':' characters
- Validate config in CI before deploying workers
- Copy examples verbatim from docs rather than adapting URLs
When it happens
Trigger: Setting the dedicated_worker env/config value to a path containing an extra colon (e.g. 'workspace_u:script/foo:v2'), forgetting the colon entirely, or passing a full URL like 'https://...:workspace:path'.
Common situations: Typos in the deployment config; copy-pasting a path that includes a scheme or port; Kubernetes/Helm values where the string got mangled by templating.
Related errors
- Invalid dedicated_workers format. Got {x}, expects <workspac
- preprocessor function is missing
- ${main_name} function is missing
- Found ${wrongFormatPaths.length} directory(ies) using ${foun
- Could not find a workspace mapped to branch \`${opts.fromBra
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/c93a2e4219c8e1c2.
Report an issue: GitHub.