{"record":{"id":"c8913cd5f9718ed3","repo":"dbt-labs/dbt-core","slug":"missing-default-value-for-var-in-dbt-project-yml","errorCode":null,"errorMessage":"Missing default value for var in dbt_project.yml: {var_name}","messagePattern":"Missing default value for var in dbt_project\\.yml: (.+?)","errorType":"exception","errorClass":"minijinja::Error (InvalidOperation)","httpStatus":null,"severity":"error","filePath":"crates/dbt-jinja-vars/src/configured_var.rs","lineNumber":94,"sourceCode":"    }\n\n    fn call_as_function(\n        &self,\n        state: &State<'_, '_>,\n        var_name: String,\n        default_value: Option<Value>,\n    ) -> Result<Value, Error> {\n        // 1. CLI vars\n        if let Some(value) = self.cli_vars.get(&var_name) {\n            return Ok(cli_var_value_to_minijinja(value));\n        }\n        // 2. Check if this is dbt_project.yml parsing\n        let package_name = self.package_name(state, &var_name)?;\n        if package_name == \"dbt_project.yml\" {\n            if let Some(default_value) = default_value {\n                return Ok(default_value);\n            } else {\n                return Err(Error::new(\n                    ErrorKind::InvalidOperation,\n                    format!(\"Missing default value for var in dbt_project.yml: {var_name}\"),\n                ));\n            }\n        }\n\n        // 3. Package vars\n        let vars_lookup = self.vars.get(&package_name).ok_or_else(|| {\n            Error::new(\n                ErrorKind::InvalidOperation,\n                format!(\"Package vars should be initialized for package: {package_name}\"),\n            )\n        })?;\n        if let Some(var) = vars_lookup.get(&var_name) {\n            Ok(Value::from_serialize(var))\n        } else if let Some(default_value) = default_value {\n            Ok(default_value)\n        } else if state.lookup(\"this\", &[]).is_none() {","sourceCodeStart":76,"sourceCodeEnd":112,"githubUrl":"https://github.com/dbt-labs/dbt-core/blob/0267ce9170576975b76b64ce856b2e5848e96617/crates/dbt-jinja-vars/src/configured_var.rs#L76-L112","documentation":"When a `var()` call is evaluated while parsing dbt_project.yml itself (package name resolves to `dbt_project.yml`), the library requires an inline default because there is no yet-parsed var context to fall back on. This error is thrown when `var()` is used without a default value in that phase. It prevents chicken-and-egg resolution of vars during config parsing.","triggerScenarios":"Using `{{ var('x') }}` (no default) inside dbt_project.yml — e.g. in jinja-templated `vars:` or config blocks — during project file parsing.","commonSituations":"Templating dbt_project.yml with env-driven vars via `var()` instead of `env_var()`; copying var usage from model SQL into project config; `--vars` flag values not yet available at this parse stage.","solutions":["Provide a default: `var('x', 'default_value')` in dbt_project.yml.","Use `env_var()` for environment-driven configuration instead of `var()` in dbt_project.yml.","Move dynamic values out of dbt_project.yml into model/schema configs where full var resolution is available."],"exampleFix":"# before (dbt_project.yml)\nvars:\n  lookback: \"{{ var('lookback_days') }}\"\n# after\nvars:\n  lookback: \"{{ var('lookback_days', 7) }}\"\n","handlingStrategy":"validation","validationCode":"# lint rule for dbt_project.yml: every var() must have a default\n# re: var\\(\\s*['\"][^'\"]+['\"]\\s*\\)  (single-arg var calls in project yml are errors)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never call var() without a default inside dbt_project.yml.","Use env_var() for environment-driven project config.","Lint dbt_project.yml for single-argument var() calls before running dbt."],"tags":["vars","dbt-project-yml","configuration"],"backgroundTag":"missing-required-config-field","analyzedSha":"0267ce9170576975b76b64ce856b2e5848e96617","analyzedAt":"2026-09-07T21:53:39.732Z","contentChangedAt":"2026-09-07T21:53:39.732Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}