{"record":{"id":"3a10657a03ec0d81","repo":"windmill-labs/windmill","slug":"license-can-t-be-validated-in-windmill-ce-3a1065","errorCode":null,"errorMessage":"License can't be validated in Windmill CE","messagePattern":"License can't be validated in Windmill CE","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/windmill-api/src/ee_oss.rs","lineNumber":19,"sourceCode":"#[cfg(feature = \"private\")]\n#[allow(unused)]\npub use crate::ee::*;\n#[cfg(all(feature = \"enterprise\", not(feature = \"private\")))]\npub use windmill_api_auth::ee_oss::ExternalJwks;\n\n#[cfg(not(feature = \"private\"))]\nuse anyhow::anyhow;\n#[cfg(not(feature = \"private\"))]\npub async fn validate_license_key(\n    _license_key: String,\n    _db: Option<&crate::db::DB>,\n) -> anyhow::Result<(\n    String,\n    bool,\n    Option<windmill_common::ee_oss::OfflineMetadata>,\n)> {\n    // Implementation is not open source\n    Err(anyhow!(\"License can't be validated in Windmill CE\"))\n}\n\n// interpolate moved to windmill-store/src/resources.rs\n#[cfg(all(\n    feature = \"enterprise\",\n    any(feature = \"nats\", feature = \"kafka\", feature = \"sqs_trigger\")\n))]\npub use windmill_store::resources::interpolate;\n","sourceCodeStart":1,"sourceCodeEnd":28,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/backend/windmill-api/src/ee_oss.rs#L1-L28","documentation":"validate_license_key in windmill-api (the other CE stub, identical in spirit to the settings one) always fails with 'License can't be validated in Windmill CE' because license validation logic is enterprise-only. Any API path calling validate_license_key on a CE build hits this error.","triggerScenarios":"API calls or startup paths that validate the instance license key while running the open-source binary (no enterprise feature); e.g. instance settings endpoints verifying a stored key.","commonSituations":"CE deployment with an EE license key copied from another environment; automated tooling that unconditionally posts a license key; EE-to-CE downgrades leaving a license key in the database.","solutions":["Run the enterprise build to enable license validation","Remove the stored license key from instance settings on CE deployments","Obtain an EE deployment/license from Windmill if EE features are required"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// skip validation when running CE\nif !windmill_common::build_info().ee {\n    return Ok(Default::default());\n}","typeGuard":null,"tryCatchPattern":"match validate_license_key(&db, &key).await {\n    Ok(info) => info,\n    Err(e) if e.to_string().contains(\"can't be validated in Windmill CE\") => {\n        Default::default() // CE: treat as unlicensed\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Never set a license key on CE deployments","Gate license endpoints behind build-capability checks","Audit EE->CE downgrades and clear stale keys from the database"],"tags":["licensing","enterprise","api"],"backgroundTag":"feature-requires-enterprise","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"}