{"record":{"id":"2e190be2beb40fb0","repo":"clockworklabs/SpacetimeDB","slug":"unknown-server-language","errorCode":null,"errorMessage":"Unknown server language: {}","messagePattern":"Unknown server language: (.+?)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/cli/src/subcommands/init.rs","lineNumber":80,"sourceCode":"}\n\nimpl ServerLanguage {\n    fn as_str(&self) -> &'static str {\n        match self {\n            ServerLanguage::Rust => \"rust\",\n            ServerLanguage::Csharp => \"csharp\",\n            ServerLanguage::TypeScript => \"typescript\",\n            ServerLanguage::Cpp => \"cpp\",\n        }\n    }\n\n    fn from_str(s: &str) -> anyhow::Result<Option<Self>> {\n        match s.to_lowercase().as_str() {\n            \"rust\" => Ok(Some(ServerLanguage::Rust)),\n            \"csharp\" | \"c#\" => Ok(Some(ServerLanguage::Csharp)),\n            \"typescript\" => Ok(Some(ServerLanguage::TypeScript)),\n            \"cpp\" | \"c++\" | \"cxx\" => Ok(Some(ServerLanguage::Cpp)),\n            _ => Err(anyhow!(\"Unknown server language: {}\", s)),\n        }\n    }\n}\n\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum ClientLanguage {\n    Rust,\n    Csharp,\n    TypeScript,\n}\n\nimpl ClientLanguage {\n    fn as_str(&self) -> &'static str {\n        match self {\n            ClientLanguage::Rust => \"rust\",\n            ClientLanguage::Csharp => \"csharp\",\n            ClientLanguage::TypeScript => \"typescript\",\n        }","sourceCodeStart":62,"sourceCodeEnd":98,"githubUrl":"https://github.com/clockworklabs/SpacetimeDB/blob/fdd647dfac506d0967cc4492e9fce380706c94cb/crates/cli/src/subcommands/init.rs#L62-L98","documentation":"`spacetime init` parses the server language string via ServerLanguage::from_str. Accepted values after lowercasing: rust, csharp (alias c#), typescript, cpp (aliases c++, cxx). Any other string is rejected with 'Unknown server language: <s>'. The check is case-insensitive, but whitespace is not trimmed and spelling variants beyond the listed aliases fail.","triggerScenarios":"Passing `spacetime init --lang <s>` (server language flag) with an unsupported value such as 'go', 'python', 'C #', 'cplus', or a value with leading/trailing whitespace. Also triggered by automation piping a language name from another tool's output verbatim.","commonSituations":"Assuming a language exists because the client SDK does (e.g. 'unity' or 'python' is not a server language); shell scripts echoing 'C++' with odd quoting/whitespace; documentation drift between CLI versions where accepted sets changed.","solutions":["Use one of the accepted values: rust, csharp (or c#), typescript, cpp (or c++, cxx)","Trim and normalize the value in scripts before passing it (lowercase, strip spaces)","Check `spacetime init --help` for your CLI version's accepted list"],"exampleFix":"# before\nspacetime init --lang \"C++ \"\n# after\nspacetime init --lang cpp","handlingStrategy":"validation","validationCode":"#!/usr/bin/env bash\nSERVER_LANGS='rust|csharp|c#|typescript|cpp|c++|cxx'\nlang=\"$(echo \"$1\" | tr '[:upper:]' '[:lower:]' | xargs)\"\n[[ \"$lang\" =~ ^($SERVER_LANGS)$ ]] || { echo \"server lang must be: $SERVER_LANGS\" >&2; exit 2; }\nspacetime init --lang \"$lang\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Normalize case and trim whitespace before passing --lang in scripts","Use canonical spellings: rust, csharp, typescript, cpp","Check `spacetime init --help` after CLI upgrades — accepted language sets change between versions"],"tags":["cli","init","arguments","language","validation"],"backgroundTag":"invalid-enum-value","analyzedSha":"fdd647dfac506d0967cc4492e9fce380706c94cb","analyzedAt":"2026-08-20T06:08:37.179Z","contentChangedAt":"2026-08-20T06:08:37.179Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}