{"record":{"id":"4ce87e4c694ca0f5","repo":"windmill-labs/windmill","slug":"typed-tables-are-not-supported-use-ident-table","errorCode":null,"errorMessage":"typed tables are not supported, use `ident: table`","messagePattern":"typed tables are not supported, use `ident: table`","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/parsers/windmill-parser-nu/src/lib.rs","lineNumber":186,"sourceCode":"            \"nothing\" => Typ::Unknown,\n            // TODO: needs additional work on literal parsing\n            // \"binary\" => Typ::Bytes,\n            \"datetime\" => Typ::Datetime,\n            \"any\" => Typ::Unknown,\n            \"bool\" => Typ::Bool,\n            // Lists\n            \"list\" | \"list<any>\" | \"list<nothing>\" => Typ::List(Box::new(Typ::Unknown)),\n            \"list<number>\" => Typ::List(Box::new(Typ::Float)),\n            \"list<bool>\" => Typ::List(Box::new(Typ::Bool)),\n            \"list<string>\" => Typ::List(Box::new(Typ::Str(None))),\n            // list<float/int> is not supported\n            // Records and Tables\n            // TODO: Support in V1?\n            s if s.contains(\"record<\") => {\n                bail!(\"typed records are not supported, use `ident: record`\")\n            }\n            s if s.contains(\"table<\") => {\n                bail!(\"typed tables are not supported, use `ident: table`\")\n            }\n            s => bail!(\"{s} is not supported\"),\n        };\n        Ok(typ)\n    }\n    fn parse_default(\n        content: &str,\n        ctx: &[&str],\n        i: usize,\n        skip: &mut usize,\n    ) -> anyhow::Result<Value> {\n        let mut c = content.replace(\"=\", \"\").trim().to_owned();\n\n        fn parse_object_literal(\n            (open, close): (char, char),\n            mut c_2: String,\n            ctx: &[&str],\n            i: usize,","sourceCodeStart":168,"sourceCodeEnd":204,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/backend/parsers/windmill-parser-nu/src/lib.rs#L168-L204","documentation":"Like typed records, Nushell typed tables (`table<col: type, ...>`) are not representable in Windmill's signature types. The parser maps bare `table` to a list of open objects, but any type containing `table<` bails with this message directing you to the untyped form.","triggerScenarios":"Declaring `def main [data: table<id: int, name: string>]` — any parameter type containing `table<` — in a Windmill Nushell script.","commonSituations":"Scripts handling structured tabular data annotated with Nushell's typed tables; migrated internal tooling that relied on table type checking.","solutions":["Change the annotation to bare `table` (list of objects) and validate columns in the script.","Accept `list` or `any` and perform per-row checks in the body.","Pass data as a JSON array of objects and normalize inside the script.","Wrap row validation in a helper so the signature stays untyped while logic stays strict."],"exampleFix":"// before\ndef main [rows: table<id: int, name: string>]\n// after\ndef main [rows: table] {\n  $rows | each {|r| {id: ($r.id | into int), name: $r.name}}\n}","handlingStrategy":"validation","validationCode":"function validateNoTypedTables(code) {\n  const m = code.match(/def\\s+main\\s*\\[([^\\]]*)\\]/);\n  if (m && /table</.test(m[1])) return 'typed tables (table<...>) are not supported; use bare `table` and validate columns in the body';\n  return null;\n}","typeGuard":null,"tryCatchPattern":"try {\n  const sig = parseNuSignature(source);\n} catch (e) {\n  if (String(e).includes('typed tables are not supported')) {\n    throw new Error('Change the annotation to `table` (list of objects) and validate columns inside the script');\n  }\n  throw e;\n}","preventionTips":["Use bare `table` for tabular parameters","Validate row/column shape in the body (each/into int etc.)","Reserve typed tables for internal helper signatures"],"tags":["nushell","parser","tables","unsupported-type"],"backgroundTag":"unsupported-type-signature","analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}