{"record":{"id":"32c545662fe33a4d","repo":"lima-vm/lima","slug":"field-vmopts-qemu-minimumversion-must-be-a-semva","errorCode":null,"errorMessage":"field `vmOpts.qemu.minimumVersion` must be a semvar value, got %#q: %w","messagePattern":"field `vmOpts\\.qemu\\.minimumVersion` must be a semvar value, got %#q: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/driver/qemu/qemu_driver.go","lineNumber":124,"sourceCode":"\tfor i, nw := range cfg.Networks {\n\t\tif unknown := reflectutil.UnknownNonEmptyFields(nw,\n\t\t\t\"Lima\",\n\t\t\t\"Socket\",\n\t\t\t\"MACAddress\",\n\t\t\t\"Metric\",\n\t\t\t\"Interface\",\n\t\t); len(unknown) > 0 {\n\t\t\tlogrus.Warnf(\"vmType %s: ignoring networks[%d]: %+v\", *cfg.VMType, i, unknown)\n\t\t}\n\t}\n\n\tvar qemuOpts limatype.QEMUOpts\n\tif err := limayaml.Convert(cfg.VMOpts[limatype.QEMU], &qemuOpts, \"vmOpts.qemu\"); err != nil {\n\t\treturn err\n\t}\n\tif qemuOpts.MinimumVersion != nil {\n\t\tif _, err := semver.NewVersion(*qemuOpts.MinimumVersion); err != nil {\n\t\t\treturn fmt.Errorf(\"field `vmOpts.qemu.minimumVersion` must be a semvar value, got %#q: %w\", *qemuOpts.MinimumVersion, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Helper method for checking the binary signature on macOS.\nfunc validateArch(ctx context.Context, cfg *limatype.LimaYAML) error {\n\tif runtime.GOOS == \"darwin\" {\n\t\tvar vmArch string\n\t\tif cfg.Arch != nil {\n\t\t\tvmArch = *cfg.Arch\n\t\t}\n\t\tif err := checkBinarySignature(ctx, vmArch); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil","sourceCodeStart":106,"sourceCodeEnd":142,"githubUrl":"https://github.com/lima-vm/lima/blob/dd909d0973cd84fa35f9e1693181b4585ea616c1/pkg/driver/qemu/qemu_driver.go#L106-L142","documentation":"validateConfig() converts cfg.VMOpts[\"qemu\"] into a QEMUOpts struct and, if `minimumVersion` is set, parses it with semver.NewVersion(). A value that is not valid semantic versioning syntax fails and is wrapped in this error. Valid examples: \"6.0.0\", \"7.2\".","triggerScenarios":"Setting `vmOpts.qemu.minimumVersion` in lima.yaml to anything semver.NewVersion() rejects — e.g. `v.6`, `6.x`, `qemu 7`, `>=7.0`, an empty string.","commonSituations":"Copying a version constraint expression (like `>=6.0`) instead of a plain version; prefixing with `v` in a way semver rejects; trailing OS/build suffixes like `7.0.0-1` from distro package names.","solutions":["Change `vmOpts.qemu.minimumVersion` to a plain semver string, e.g. `\"6.0.0\"` or `\"7.2\"`.","Remove version constraint operators (>=, ^, ~, v-prefix issues) — the field expects a bare version, not a range.","Check for stray whitespace/quotes in the YAML value."],"exampleFix":"# before\nvmOpts:\n  qemu:\n    minimumVersion: \">=6.0\"\n// after\nvmOpts:\n  qemu:\n    minimumVersion: \"6.0.0\"","handlingStrategy":"validation","validationCode":"if mv := cfg.VMOpts[\"qemu\"].MinimumVersion; mv != \"\" {\n    if _, err := version.NewVersion(mv); err != nil {\n        return fmt.Errorf(\"vmOpts.qemu.minimumVersion must be plain semver like 6.0.0, got %q\", mv)\n    }\n}","typeGuard":"func isSemVer(s string) bool { _, err := semver.NewVersion(s); return err == nil }","tryCatchPattern":"if err := drv.Validate(ctx); err != nil && strings.Contains(err.Error(), \"minimumVersion\") {\n    // fix the semver string in vmOpts.qemu and re-validate\n}","preventionTips":["Use bare versions like \"6.0.0\" — no >=, ^, ~, or range syntax.","Avoid distro suffixes (7.0.0-1) in the config value.","Run `limactl validate` on the template before launching."],"tags":["qemu","config","semver","validation"],"backgroundTag":"invalid-semver","analyzedSha":"dd909d0973cd84fa35f9e1693181b4585ea616c1","analyzedAt":"2026-09-01T14:24:59.842Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}