{"record":{"id":"5930ff4021ad261e","repo":"derailed/k9s","slug":"default-value-q-for-number-input-q-is-not-a-vali","errorCode":null,"errorMessage":"default value %q for number input %q is not a valid number","messagePattern":"default value %q for number input %q is not a valid number","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/config/plugin.go","lineNumber":106,"sourceCode":"\t\t}\n\t\tseen[input.Name] = struct{}{}\n\n\t\tif input.Default == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch input.Type {\n\t\tcase InputTypeDropdown:\n\t\t\tif !slices.Contains(input.Options, input.Default) {\n\t\t\t\treturn fmt.Errorf(\"default value %q for input %q is not a valid option\", input.Default, input.Name)\n\t\t\t}\n\t\tcase InputTypeBool:\n\t\t\tif input.Default != \"true\" && input.Default != \"false\" {\n\t\t\t\treturn fmt.Errorf(\"default value %q for bool input %q must be \\\"true\\\" or \\\"false\\\"\", input.Default, input.Name)\n\t\t\t}\n\t\tcase InputTypeNumber:\n\t\t\tif _, err := strconv.ParseFloat(input.Default, 64); err != nil {\n\t\t\t\treturn fmt.Errorf(\"default value %q for number input %q is not a valid number\", input.Default, input.Name)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// NewPlugins returns a new plugin.\nfunc NewPlugins() Plugins {\n\treturn Plugins{\n\t\tPlugins: make(map[string]Plugin),\n\t}\n}\n\n// Load K9s plugins.\nfunc (p Plugins) Load(path string, loadExtra bool) error {\n\tvar errs error\n","sourceCodeStart":88,"sourceCodeEnd":124,"githubUrl":"https://github.com/derailed/k9s/blob/2d3ccc6ba2ce98c3781bfc441bb3e884f072774f/internal/config/plugin.go#L88-L124","documentation":"Thrown by Plugin.Validate() (internal/config/plugin.go:104-107) when validating a k9s plugin file. Every declared input of type \"number\" that has a non-empty `default` must parse via strconv.ParseFloat; an empty default is skipped earlier (plugin.go:91-93), so this fires only when a default was supplied but is not numeric.","triggerScenarios":"A plugin YAML input with `type: number` and a non-numeric default string: \"eighty\", \"8O80\" (letter O typo), \"8080px\", \"10,5\" (comma decimal separator), or \"0x10\" (hex is rejected by ParseFloat). Scientific notation like \"1e3\" and \"Inf\"/\"NaN\" are accepted.","commonSituations":"Hand-edited $HOME/.config/k9s/plugins.yml or XDG k9s/plugins directory files; copy-pasted plugin examples localized to locales using comma decimals; upgrades of k9s that tightened input validation.","solutions":["Set the default to a plain decimal number as a quoted string, e.g. default: \"8080\"","If no default is wanted, remove the `default` key entirely (empty defaults are skipped by validation)","Check for letter/O vs digit/0 typos and remove units or punctuation from the value","Lint the file: run k9s and read the load error, or validate YAML with a linter before launching"],"exampleFix":"# before\ninputs:\n  - name: port\n    type: number\n    default: \"808O\"\n# after\ninputs:\n  - name: port\n    type: number\n    default: \"8080\"","handlingStrategy":"validation","validationCode":"// Validate a plugin file's number inputs before k9s loads it.\nfunc CheckPluginInputs(p config.Plugin) error {\n\tseen := map[string]struct{}{}\n\tfor _, in := range p.Inputs {\n\t\tif _, ok := seen[in.Name]; ok {\n\t\t\treturn fmt.Errorf(\"duplicate input %q\", in.Name)\n\t\t}\n\t\tseen[in.Name] = struct{}{}\n\t\tif in.Default == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif in.Type == \"number\" {\n\t\t\tif _, err := strconv.ParseFloat(in.Default, 64); err != nil {\n\t\t\t\treturn fmt.Errorf(\"input %q: default %q not a number\", in.Name, in.Default)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Quote all plugin default values as strings in YAML and use plain decimal notation","Add a CI yamllint + custom plugin lint step over $XDG_CONFIG_HOME/k9s/plugins and XDG data dirs","Never rely on locale-specific decimal separators; use a dot"],"tags":["go","yaml","k9s","plugin","config","validation"],"backgroundTag":null,"analyzedSha":"2d3ccc6ba2ce98c3781bfc441bb3e884f072774f","analyzedAt":"2026-08-15T16:09:14.432Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}