{"record":{"id":"2ae31187f00542bb","repo":"derailed/k9s","slug":"default-value-q-for-input-q-is-not-a-valid-optio","errorCode":null,"errorMessage":"default value %q for input %q is not a valid option","messagePattern":"default value %q for input %q is not a valid option","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/config/plugin.go","lineNumber":98,"sourceCode":"}\n\n// Validate checks the plugin configuration for errors.\nfunc (p *Plugin) Validate() error {\n\tseen := make(map[string]struct{}, len(p.Inputs))\n\tfor _, input := range p.Inputs {\n\t\tif _, ok := seen[input.Name]; ok {\n\t\t\treturn fmt.Errorf(\"duplicate input name %q\", input.Name)\n\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{","sourceCodeStart":80,"sourceCodeEnd":116,"githubUrl":"https://github.com/derailed/k9s/blob/2d3ccc6ba2ce98c3781bfc441bb3e884f072774f/internal/config/plugin.go#L80-L116","documentation":"Returned by Plugin.Validate (internal/config/plugin.go:98) when a dropdown-typed input declares a default value that is not a member of its options list. The dropdown UI can only offer listed options, so a default outside the list has no valid selection. As with all Plugin.Validate failures, the containing plugin file is rejected at load time ('plugin validation failed for ...') and the plugin is not registered.","triggerScenarios":"inputs: [{name: env, type: dropdown, options: [dev, staging], default: prod}] — 'prod' is not among the options; also triggered by case/whitespace mismatches ('Dev' vs 'dev') or when options are reordered/renamed and the default was forgotten.","commonSituations":"Editing an existing dropdown's option list without updating default; copy-pasting between plugin definitions; YAML quoting differences ('true' vs true) changing string comparison.","solutions":["Add the intended default to the options list","Or change default to one of the existing options (exact string match, case-sensitive)","Or remove the default entirely — empty default skips validation and prompts without preselection"],"exampleFix":"# before\ninputs:\n  - name: env\n    type: dropdown\n    options: [dev, staging]\n    default: prod\n\n# after (option A: add it)\n    options: [dev, staging, prod]\n    default: prod\n# after (option B: pick existing)\n    options: [dev, staging]\n    default: staging","handlingStrategy":"validation","validationCode":"func dropdownDefaultValid(p Plugin) error {\n\tfor _, in := range p.Inputs {\n\t\tif in.Type == InputTypeDropdown && in.Default != \"\" &&\n\t\t\t!slices.Contains(in.Options, in.Default) {\n\t\t\treturn fmt.Errorf(\"input %s: default %q not in options\", in.Name, in.Default)\n\t\t}\n\t}\n\treturn nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["When editing a dropdown's options list, grep the same block for default and update it in the same commit","Copy-paste option values into default rather than retyping (case must match exactly)","Lint plugin files with plugin.Validate() before shipping them to teammates"],"tags":["k9s","plugins","validation","dropdown","config"],"backgroundTag":null,"analyzedSha":"2d3ccc6ba2ce98c3781bfc441bb3e884f072774f","analyzedAt":"2026-08-15T16:09:14.432Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}