{"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/524b4487d949b61a07d4f39c862d1290259dfd20/crates/cli/src/subcommands/init.rs#L62-L98","documentation":"spacetime init's server language parser accepts, case-insensitively: `rust`, `csharp`, `c#`, `typescript`, `cpp`, `c++`, and `cxx`. Any other string passed via `--lang` (which selects the server language in non-interactive mode) is rejected with this error. Values are lowercased but not trimmed, so stray whitespace also fails.","triggerScenarios":"`spacetime init --lang python`, `--lang go`, or `--lang unrealcpp` (client-only, not a server language); a shell variable with trailing whitespace or quotes; misspellings like `c-sharp` or `typescriptjs`.","commonSituations":"Assuming an unsupported server language exists; passing a client language where the server language is expected; unquoted/over-quoted variables in scripts.","solutions":["Use one of: rust, csharp, c#, typescript, cpp, c++, cxx","Check for stray whitespace or quotes around the value in scripts","For stacks without a server template, scaffold manually or use `--template owner/repo` with your own repo"],"exampleFix":"# before\nspacetime init my-app --non-interactive --lang c-sharp\n\n# after\nspacetime init my-app --non-interactive --lang csharp","handlingStrategy":"validation","validationCode":"# Validate the server language before calling init:\ncase \"${LANG_ARG,,}\" in\n  rust|csharp|c#|typescript|cpp|c++|cxx) ;;\n  *) echo \"unsupported server language: $LANG_ARG\" >&2; exit 2 ;;\nesac\nspacetime init --non-interactive --project-name my-app --lang \"$LANG_ARG\"","typeGuard":"// Rust: matches init's ServerLanguage::from_str acceptance set.\nfn is_supported_server_lang(s: &str) -> bool {\n    matches!(\n        s.trim().to_lowercase().as_str(),\n        \"rust\" | \"csharp\" | \"c#\" | \"typescript\" | \"cpp\" | \"c++\" | \"cxx\"\n    )\n}","tryCatchPattern":null,"preventionTips":["Quote --lang values and trim variables to avoid whitespace failures (values are lowercased but not trimmed)","Remember there is no python/go/etc. server language; only rust, csharp, typescript, cpp","unrealcpp is a generate-time client language, not an init server language"],"tags":["init","language","cli-args","validation"],"backgroundTag":"invalid-language-value","analyzedSha":"524b4487d949b61a07d4f39c862d1290259dfd20","analyzedAt":"2026-08-16T23:58:54.611Z","schemaVersion":2},"datasetVersion":"2026-08-17T04:17:16.089Z"}