{"record":{"id":"6ea8a39b45e7caca","repo":"air-verse/air","slug":"entrypoint-must-be-a-string-or-array-of-strings-g","errorCode":null,"errorMessage":"entrypoint must be a string or array of strings, got %T","messagePattern":"entrypoint must be a string or array of strings, got %T","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"runner/config.go","lineNumber":84,"sourceCode":"\tcase nil:\n\t\t*e = nil\n\t\treturn nil\n\tcase string:\n\t\t*e = []string{val}\n\t\treturn nil\n\tcase []interface{}:\n\t\tvalues := make([]string, len(val))\n\t\tfor i, raw := range val {\n\t\t\ts, ok := raw.(string)\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"entrypoint values must be strings, got %T\", raw)\n\t\t\t}\n\t\t\tvalues[i] = s\n\t\t}\n\t\t*e = values\n\t\treturn nil\n\tdefault:\n\t\treturn fmt.Errorf(\"entrypoint must be a string or array of strings, got %T\", v)\n\t}\n}\n\nfunc (e entrypoint) binary() string {\n\tif len(e) == 0 {\n\t\treturn \"\"\n\t}\n\treturn e[0]\n}\n\nfunc (e entrypoint) args() []string {\n\tif len(e) <= 1 {\n\t\treturn nil\n\t}\n\treturn e[1:]\n}\n\ntype cfgBuildOverrides struct {","sourceCodeStart":66,"sourceCodeEnd":102,"githubUrl":"https://github.com/air-verse/air/blob/71ea1dee05248122ed22b5870c7fb20a90d80ddd/runner/config.go#L66-L102","documentation":"The `entrypoint` TOML unmarshaler only supports a string or an array of strings; any other TOML type (integer, table, boolean) is rejected with this error. It fires while decoding the `build.entrypoint` key of the config.","triggerScenarios":"A `.air.toml` with `entrypoint = 42`, `entrypoint = true`, or `entrypoint = {bin=\"./tmp/main\"}` — any value that is neither string nor array — passed to UnmarshalTOML.","commonSituations":"Migrating from the deprecated `bin` key by writing `entrypoint` as a table; typo-pasting YAML/JSON style config into TOML; missing quotes causing TOML to parse the value as something else.","solutions":["Set entrypoint to a string: entrypoint = \"./tmp/main\"","Or an array of strings: entrypoint = [\"./tmp/main\", \"arg1\"]","If migrating from `bin`, use entrypoint = [\"./tmp/main\"] rather than a table"],"exampleFix":"// before (.air.toml)\nentrypoint = { bin = \"./tmp/main\" }\n// after (.air.toml)\nentrypoint = [\"./tmp/main\"]","handlingStrategy":"validation","validationCode":"// entrypoint must be a string or array of strings in TOML\n// entrypoint = \"./tmp/main\"            ✓\n// entrypoint = [\"./tmp/main\", \"-flag\"]  ✓\n// entrypoint = 42 / true / {..}         ✗","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only use string or [string] forms for entrypoint","Do not try to express entrypoint as a table","Validate the TOML with a linter before running air"],"tags":["config","toml","entrypoint","type-error"],"backgroundTag":"toml-type-mismatch","analyzedSha":"71ea1dee05248122ed22b5870c7fb20a90d80ddd","analyzedAt":"2026-08-31T20:27:54.676Z","schemaVersion":2},"datasetVersion":"2026-09-01T03:17:15.561Z"}