{"record":{"id":"a16914914707d96b","repo":"clockworklabs/SpacetimeDB","slug":"either-template-or-lang-must-be-provided-in-no","errorCode":null,"errorMessage":"Either --template or --lang must be provided in non-interactive mode","messagePattern":"Either --template or --lang must be provided in non-interactive mode","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/cli/src/subcommands/init.rs","lineNumber":1808,"sourceCode":"        );\n    }\n\n    // Validate that --dotnet-version is only used with C# projects\n    if options.dotnet_version.is_some()\n        && let Some(lang) = server_lang\n        && lang.to_lowercase() != \"csharp\"\n        && lang.to_lowercase() != \"c#\"\n    {\n        anyhow::bail!(\"--dotnet-version is only supported for C# projects (--lang csharp)\");\n    }\n\n    if !is_interactive {\n        // In non-interactive mode, validate all required args are present\n        if project_name_arg.is_none() {\n            anyhow::bail!(\"PROJECT_NAME is required in non-interactive mode\");\n        }\n        if template.is_none() && server_lang.is_none() {\n            anyhow::bail!(\"Either --template or --lang must be provided in non-interactive mode\");\n        }\n    }\n\n    exec_with_options(&mut config, &options).await\n}\n\npub fn init_rust_project(project_path: &Path) -> anyhow::Result<()> {\n    let export_files = vec![\n        (\n            include_str!(\"../../../../templates/basic-rs/spacetimedb/Cargo.toml\"),\n            \"Cargo.toml\",\n        ),\n        (\n            include_str!(\"../../../../templates/basic-rs/spacetimedb/src/lib.rs\"),\n            \"src/lib.rs\",\n        ),\n    ];\n","sourceCodeStart":1790,"sourceCodeEnd":1826,"githubUrl":"https://github.com/clockworklabs/SpacetimeDB/blob/fdd647dfac506d0967cc4492e9fce380706c94cb/crates/cli/src/subcommands/init.rs#L1790-L1826","documentation":"Non-interactive init has no way to ask which stack to generate, so it requires either --template (a full template) or --lang (language defaults) in addition to PROJECT_NAME. With neither, init aborts.","triggerScenarios":"`spacetime init my-project -y` with no stack selection; CI jobs that only pass the name.","commonSituations":"Automated scaffolding scripts; users expecting a default template to be chosen silently.","solutions":["Add a stack: `spacetime init my-project -y --lang rust` (or csharp/typescript)","Or specify a template: `spacetime init my-project -y --template quickstart`","Run without -y to pick interactively"],"exampleFix":"# before\nspacetime init my-project -y\n# after\nspacetime init my-project -y --lang rust","handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat `name + (--template|--lang)` as one unit in automation","Test non-interactive invocations in CI, not just locally with a TTY"],"tags":["spacetime-init","cli","non-interactive","argument-validation"],"backgroundTag":"missing-required-argument","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"}