windmill-labs/windmill · error
Feature not supported in cloud hosted windmill
Error message
Feature not supported in cloud hosted windmill
What it means
When the instance runs in cloud-hosted mode (CLOUD_HOSTED flag), configuring workspace trigger failure email notifications is disabled; the endpoint logs a warning and returns 'Feature not supported in cloud hosted windmill'. Additionally the code path guards that only the error-handler users or superadmins may configure it.
Source
Thrown at backend/windmill-api/src/jobs.rs:2618
email_recipients: Option<Vec<String>>,
error: Value,
}
#[cfg(all(feature = "enterprise", feature = "instance_smtp"))]
async fn send_email_with_instance_smtp(
authed: ApiAuthed,
Extension(db): Extension<DB>,
Path(w_id): Path<String>,
Json(send_email): Json<SendEmail>,
) -> error::Result<Json<String>> {
use windmill_common::jobs::EMAIL_ERROR_HANDLER_USER_EMAIL;
use windmill_queue::SCHEDULE_ERROR_HANDLER_USER_EMAIL;
if *CLOUD_HOSTED {
tracing::warn!(
"Workspace trigger failure email notification is not available for cloud hosted Windmill",
);
return Err(anyhow::anyhow!("Feature not supported in cloud hosted windmill").into());
}
let is_handler_job = authed.email == EMAIL_ERROR_HANDLER_USER_EMAIL
|| authed.email == SCHEDULE_ERROR_HANDLER_USER_EMAIL;
if !is_handler_job && !windmill_api_auth::is_super_admin_authed(&db, &authed).await? {
return Err(Error::NotAuthorized(
"Only super admin or whitelisted token can access email workspace error handler feature"
.to_string(),
));
}
// Missing/empty `email_recipients` is a schedule-level misconfiguration (e.g. the
// user picked the email handler in the UI but never entered an address). Log a warning
// and return a client error — do NOT escalate to `report_critical_error`, which would
// fan this out to the instance critical-error channels on every failed run.
let Some(recipients) = send_email.email_recipients.as_ref() else {
tracing::warn!(View on GitHub (pinned to e474e8803c)
Solutions
- Use Windmill's web UI notification integrations available on cloud (e.g. Slack/webhook based error handlers) instead of direct email
- Self-host Windmill (CLOUD_HOSTED=false) to enable trigger failure email notifications
- Set up error handling inside the flow/script itself (error handler steps) rather than relying on email notification settings
Defensive patterns
Strategy: validation
Validate before calling
// before enabling trigger error email notifications
if is_cloud_hosted() {
disableEmailToggle(); // show "available on self-hosted only"
} Try / catch
match set_trigger_error_email(authed, db, payload).await {
Ok(cfg) => cfg,
Err(e) if e.to_string().contains("not supported in cloud hosted") => {
notify_user("Email notifications require self-hosted Windmill; use webhooks instead");
fallback_to_webhook_error_handler()
}
Err(e) => return Err(e.into()),
} Prevention
- Hide/disable the email-notification toggle in the UI when instance is cloud-hosted
- Use Slack/webhook error notifications on cloud
- Handle failure alerts inside flow error-handler steps
When it happens
Trigger: A user (or the scheduler error-handler route) on app.windmill.com (or any CLOUD_HOSTED=true instance) attempts to enable/modify email notifications for trigger failures.
Common situations: Setting up error email alerts on the hosted Windmill cloud; migrating self-hosted flows that used email notifications to the cloud edition; scripts calling the trigger settings API against the cloud.
Related errors
- error (from getWorkspaceMutationTargetError)
- Failed to create ${triggerConfig.label} "${requestBody.path}
- Unknown CaptureTriggerKind: ${kind}
- Unknown TriggerKind: ${kind}
- trigger kind '${trigger.kind}' not supported yet
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/3959a49d5321d247.
Report an issue: GitHub.