windmill-labs/windmill · error
Unknown service, currently supported services are: [{}]
Error message
Unknown service, currently supported services are: [{}] What it means
TryFrom<String> for ServiceName only accepts the known native-trigger service identifiers ('nextcloud', 'google', 'github'). Any other string fails conversion with this error listing all supported services via ServiceName::iter().
Source
Thrown at backend/windmill-native-triggers/src/lib.rs:95
/// When adding a new service, add a variant here (e.g., `NewService`).
#[derive(EnumIter, sqlx::Type, Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[sqlx(type_name = "native_trigger_service", rename_all = "lowercase")]
#[serde(rename_all = "lowercase")]
pub enum ServiceName {
Nextcloud,
Google,
Github,
}
impl TryFrom<String> for ServiceName {
type Error = Error;
fn try_from(value: String) -> std::result::Result<Self, Self::Error> {
let service = match value.as_str() {
"nextcloud" => ServiceName::Nextcloud,
"google" => ServiceName::Google,
"github" => ServiceName::Github,
_ => {
return Err(anyhow::anyhow!(
"Unknown service, currently supported services are: [{}]",
ServiceName::iter().join(",")
)
.into())
}
};
Ok(service)
}
}
impl ServiceName {
/// Returns the lowercase string identifier for this service.
pub fn as_str(&self) -> &'static str {
match self {
ServiceName::Nextcloud => "nextcloud",
ServiceName::Google => "google",
ServiceName::Github => "github",View on GitHub (pinned to e474e8803c)
Solutions
- Use one of the listed supported service strings exactly (lowercase): nextcloud, google, github
- Check ServiceName::iter() output in the error message for the current supported list
- Upgrade the version if a newly supported service is missing from your build
Example fix
// before service = "Github" // case mismatch // after service = "github"
Defensive patterns
Strategy: validation
Validate before calling
const SUPPORTED = ['nextcloud', 'google', 'github'];
if (!SUPPORTED.includes(service)) throw new Error(`Unknown service "${service}"; supported: ${SUPPORTED.join(', ')}`); Type guard
const isServiceName = (s) => ['nextcloud','google','github'].includes(s);
Try / catch
match ServiceName::try_from(value) {
Ok(s) => {},
Err(e) => eprintln!("{} — use one of: nextcloud, google, github", e),
} Prevention
- Use exact lowercase service strings from the error's supported list
- Normalize/trim user input before conversion
- Keep a frontend dropdown fed by the same source of truth instead of free text
When it happens
Trigger: Configuring a native trigger with a service name that is misspelled, differently cased (e.g. 'GitHub', 'Google-Sheets'), or not yet supported; webhook/trigger setup where the service field comes from user input.
Common situations: Typos in trigger configuration; older configs referencing a service that was renamed; assuming more services exist than are compiled in.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- {webhook_key}: {e}
- {webhook_key} must be a URL string, got {kind}
- result.substring(__RESULT_ERR_PREFIX.length)
- Invalid migration name '${name}': use only letters, digits,
- Unknown workspace dependencies file format: ${path}. Valid f
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/c13cc731b7a4f2ab.
Report an issue: GitHub.