{"record":{"id":"86ceaed74d04d380","repo":"wasmerio/wasmer","slug":"could-not-determine-app-domain-for-backend-url-d","errorCode":null,"errorMessage":"could not determine app domain for backend url '{domain}': unknown backend","messagePattern":"could not determine app domain for backend url '(.+?)': unknown backend","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"lib/cli/src/config/env.rs","lineNumber":154,"sourceCode":"            .registry\n            .get_login_token_for_registry(registry_endpoint.as_str())\n    }\n\n    pub fn app_domain(&self) -> Result<String, Error> {\n        let registry_url = self.registry_public_url()?;\n        let domain = registry_url\n            .host_str()\n            .context(\"url has no host\")?\n            .trim_end_matches('.');\n\n        if domain.ends_with(\"wasmer.io\") {\n            Ok(Self::APP_DOMAIN_PROD.to_string())\n        } else if domain.ends_with(\"wasmer.wtf\") {\n            Ok(Self::APP_DOMAIN_DEV.to_string())\n        } else if domain.ends_with(\"wasmer.fun\") {\n            Ok(Self::APP_DOMAIN_BUGT.to_string())\n        } else {\n            anyhow::bail!(\n                \"could not determine app domain for backend url '{domain}': unknown backend\"\n            );\n        }\n    }\n\n    pub fn client_unauthennticated(&self) -> Result<WasmerClient, anyhow::Error> {\n        let registry_url = self.registry_endpoint()?;\n\n        let proxy = self.proxy()?;\n\n        let client = wasmer_backend_api::WasmerClient::new_with_proxy(\n            registry_url,\n            &DEFAULT_WASMER_CLI_USER_AGENT,\n            proxy,\n        )?;\n\n        let client = if let Some(token) = self.token() {\n            client.with_auth_token(token)","sourceCodeStart":136,"sourceCodeEnd":172,"githubUrl":"https://github.com/wasmerio/wasmer/blob/8c4b9ee9d33fb2068863fbb3d328683e7e6ff7f5/lib/cli/src/config/env.rs#L136-L172","documentation":"`WasmerEnv::app_domain` maps a configured backend URL's host to one of Wasmer's known deployment domains (wasmer.io prod, wasmer.wtf dev, wasmer.fun bug tracker). If the backend host matches none of the known suffixes, the method bails because it cannot safely pick which app domain apps should be served from. This guards against pointing the CLI at an unknown or third-party backend.","triggerScenarios":"Any code path calling `env.app_domain()` when the registry/backend URL host does not end with wasmer.io, wasmer.wtf, or wasmer.fun — e.g. WASMER_REGISTRY pointing at a self-hosted registry, localhost, or a typo'd domain.","commonSituations":"Running against a private/forked registry deployment, local development backends on localhost or a staging host, or a mistyped registry URL in WASMER_REGISTRY/config.","solutions":["Set the backend URL to an official Wasmer domain (registry.wasmer.io, registry.wasmer.wtf, registry.wasmer.fun)","If running a private backend, use a host whose domain ends in one of the supported suffixes or patch/add the suffix in config/env.rs","Fix typos in the WASMER_TOKEN/WASMER_REGISTRY env vars or `wasmer login --registry <url>` argument"],"exampleFix":"// before\nWASMER_REGISTRY=https://registry.mycompany.internal wasmer deploy\n// after\nWASMER_REGISTRY=https://registry.wasmer.io wasmer deploy","handlingStrategy":"validation","validationCode":"let backend = std::env::var(\"WASMER_REGISTRY\").unwrap_or_default();\nlet host = url::Url::parse(&backend)?.host_str().unwrap_or(\"\").to_string();\nconst KNOWN: [&str; 3] = [\"wasmer.io\", \"wasmer.wtf\", \"wasmer.fun\"];\nif !KNOWN.iter().any(|d| host.ends_with(d)) {\n    anyhow::bail!(\"backend '{host}' is not a known Wasmer domain\");\n}","typeGuard":"fn is_known_wasmer_backend(url: &str) -> bool {\n    [\"wasmer.io\", \"wasmer.wtf\", \"wasmer.fun\"]\n        .iter()\n        .any(|d| url.ends_with(d))\n}","tryCatchPattern":"match env.app_domain() {\n    Ok(domain) => domain,\n    Err(e) if e.to_string().contains(\"unknown backend\") => {\n        eprintln!(\"Point WASMER_REGISTRY at an official registry.wasmer.io host\");\n        return Err(e);\n    }\n    Err(e) => return Err(e.into()),\n}","preventionTips":["Only configure official Wasmer registry domains","Double-check WASMER_REGISTRY and --registry values for typos","For private backends, align the host domain with supported suffixes or patch the mapping"],"tags":["config","backend-url","domain","cli"],"backgroundTag":"unknown-backend-domain","analyzedSha":"8c4b9ee9d33fb2068863fbb3d328683e7e6ff7f5","analyzedAt":"2026-09-01T23:06:31.009Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T06:17:21.866Z"}